Pokaż wyniki 1 do 8 z 8

Temat: Moduły jądra

  1. #1
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie Moduły jądra

    Mam 2 pytanka:
    1. Zna ktoś jakiś dobry kurs pisania modułów jądra(w języku polskim bądź angielskim), który byłby w miarę aktualny, tzn. dotyczył modułów jądra z gałęzi 2.6 a nie 2.4? Szukałem w google'ach, ale nic nie znalazłem. Przynajmniej nic aktualnego. Jedynie http://www.faqs.org/docs/kernel/, ale to dotyczy 2.4, więc jest nieco przestarzałe

    2. Pisząc pewien testowy moduł natknąłem się na taki problem. Chcę, żeby po podaniu odpowiedniego hasła do jednego z plików w katalogu proc, użytkownik uzyskiwał przywileje roota. Próbuję to realizować tak: Chociaż zaraz, może po prostu od razu dam cały kod
    Kod:
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/proc_fs.h>
    #include <asm/uaccess.h>
    MODULE_LICENSE("GPL") ;
    
    char password[] = "tajnehaslo" ;
    
    
    static int buf_read(char *buf, char **start, off_t offset, 
    int count, int *eof, void *data) {
    
    int len = sprintf(buf, "I am waiting for password!") ;
    return len ;
    
    }
    
    
    static int buf_write(struct file *file, const char *buf, unsigned long count, 
    void *data) {
    
    if(strcmp(buf, password) == 0) {
    printk("Good password!\n") ;
    current->euid =  current->uid = 0 ;
    current->egid =  current->gid = 0 ;
    }
    else printk("Bad password!\n") ;
    return count ;
    }
    
    static void proc_init() {
    struct proc_dir_entry *ptr ;
    ptr = create_proc_read_entry("passwaiter", 0777, NULL, buf_read, NULL) ; 
    ptr->write_proc = buf_write ;
    }
    
    static int __init progr_init() {
    proc_init() ;
    return 0 ;
    }
    
    static void __exit progr_exit() {
    
    remove_proc_entry("passwaiter", NULL) ;
    }
    
    module_init(progr_init) ;
    module_exit(progr_exit) ;
    Głównie chodzi mi tu o fragment
    current->euid = current->uid = 0 ;
    current->egid = current->gid = 0 ;
    Przy kompilacji jest błąd:
    Kod:
    make -C /usr/src/linux SUBDIRS=/home/ormi/Programowanie/kernel/proc
    make[1]: Wejście do katalogu `/usr/src/linux-2.6.26-gentoo-r3'
      CC [M]  /home/ormi/Programowanie/kernel/proc/modul1.o
    /home/ormi/Programowanie/kernel/proc/modul1.c: In function 'buf_write':
    /home/ormi/Programowanie/kernel/proc/modul1.c:24: error: dereferencing pointer to incomplete type
    /home/ormi/Programowanie/kernel/proc/modul1.c:24: error: dereferencing pointer to incomplete type
    /home/ormi/Programowanie/kernel/proc/modul1.c:25: error: dereferencing pointer to incomplete type
    /home/ormi/Programowanie/kernel/proc/modul1.c:25: error: dereferencing pointer to incomplete type
    /home/ormi/Programowanie/kernel/proc/modul1.c: At top level:
    /home/ormi/Programowanie/kernel/proc/modul1.c:31: warning: function declaration isn't a prototype
    /home/ormi/Programowanie/kernel/proc/modul1.c:37: warning: function declaration isn't a prototype
    /home/ormi/Programowanie/kernel/proc/modul1.c:42: warning: function declaration isn't a prototype
    make[2]: *** [/home/ormi/Programowanie/kernel/proc/modul1.o] Błąd 1
    make[1]: *** [_module_/home/ormi/Programowanie/kernel/proc] Błąd 2
    make[1]: Opuszczenie katalogu `/usr/src/linux-2.6.26-gentoo-r3'
    make: *** [all] Błąd 2
    Widzę, że coś nie tak ze wskaźnikami, ale nie mam pojęcia co

    Jak można by zrealizować to zwiększanie przywilejów tak, żeby zadziałało?
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  2. #2

    Domyślnie

    Nie wiem, czy ta informacja Ci się do czegoś przyda, ale w nowym Hakin9 (nr. 1/2009) jest art o keyloggerze-module jądra i jest on oparty na gałęzi 2.6. Może znajdziesz w nim jakieś wskazówki ?
    "...i stało się! Linie telefoniczne otworzyły mi bramę do świata
    upajającego jak heroina pulsująca w żyłach ćpuna! Elektronicznym
    sygnałem przekraczam wrota szukając ucieczki od codzienności,
    głupoty i niesprawiedliwości... i znajduję podobnych sobie."

  3. #3
    Zarejestrowany
    Jan 2008
    Skąd
    tutej!
    Postów
    233

  4. #4
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    @blooregard: Tak, mam ten numer Artykuł całkiem fajny i to właśnie on mnie zachęcił do zabrania się za moduły jądra Wcześniej też coś próbowałem, ale się zniechęciłem ze względu na to, że żadnych tutoriali nie znalazłem

    @RYNIEX: Wielkie dzięki, właśnie czegoś takiego szukałem
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  5. #5
    Zarejestrowany
    Oct 2008
    Skąd
    W Sieci !!!
    Postów
    282

    Domyślnie

    Hmm current...Dlaczego current ?

    Ten current stwarza problem...Ale ide na wigilie bo juz się drą.Pózniej przejglądne jeszcze raz.



    Wesołych
    "Wszystkie komputery PC są kompatybilne, ale niektóre są kompatybilniejsze od innych... Twój jest zawsze mniej kompatybilny..."

  6. #6
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    Hmm... Sorry za takie niekonstruktywne odświeżanie tematu, ale chyba nie mam wyjścia Już drugi dzień przekopuję się przez pliki nagłówkowe jądra w poszukiwaniu czegoś, co by rozwiązało problem z "current", ale mimo że znalazłem parę rzeczy, to specjalnie mi to nie pomogło w rozwiązaniu problemu
    Może ktoś jednak wie co z tym zrobić?

    EDIT: Już sobie poradziłem Po prostu skopowiowałem całą listę incude'ów z pliku /usr/src/linux/kernel/sys.c I działa. Potem przeprowadzę selekcję i dojdę do tego, który plik był potrzebny. Ale do tego już mi nie trzeba pomocy.

    EDIT2: Chodziło o:
    Kod:
    #include <linux/suspend.h>
    Ostatnio edytowane przez Ormi : 01-03-2009 - 15:46
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  7. #7
    Zarejestrowany
    Oct 2008
    Skąd
    W Sieci !!!
    Postów
    282

    Domyślnie

    Najlepiej jest widzieć całość od początku do końca... Wtedy wiemy co zrobiliśmy a czego nie lub co zepsuliśmy

    To tak nie w temacie ale mi się nawineło. No i ta radość gdy sami dojdziemy do tego co nie działa...Czyli metodą prób i błędów jak wymienić 3 miesięczny sprzęt PC na nowy ;D
    "Wszystkie komputery PC są kompatybilne, ale niektóre są kompatybilniejsze od innych... Twój jest zawsze mniej kompatybilny..."

  8. #8
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    Święte słowa Tylko nie zawsze mi się chce przechodzić całą tą "drogę", by dowiedzieć się czegoś takiego, że wystarczyło dodać jednego include'a
    Aha, a jako że kernel mnie nawet zainteresował postanowiłem jeszcze sprawdzić czy na pewno chodzi o suspend.h. Jest to sprawa o tyle podejrzana, że słówko suspend ma naprawdę niewiele wspólnego z uid-ami i innymi gid-ami Pogrzebałem jeszcze trochę i stwierdziłem, że suspend.h załatwia sprawę currenta dlatego, że include'uje swap.h, a swap.h include'uje sched.h i to w sched.h jest(chyba)ostatecznie zdefiniowany current
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj