Linux kernel keylogger saját kezét №1

Hogyan működik a billentyűzet meghajtó

Valld be, hogy az írna
illetékes keylogger tudniuk kell, hogyan
megnyom egy gombot a billentyűzeten
A rendszerben regisztrált. Lásd az ábrát:

handle_scancode -> put_queue -> tty_queue -> receive_buf ->
puffer tty_ldisc -> tty_read -> / dev / ttyX -> sys_read ->
felhasználói folyamat

Először is, ha megnyom egy gombot
billentyűzet eszköz küld
Scan a megfelelő kulcs kód
billentyűzet driver. egyetlen gombnyomással
képes egy szekvenciát legfeljebb
Hat kódokat. handle_scancode () funkció
billentyűzet vezérlő kezeli az adatfolyam
kódok és konvertálja őket (az eszköz használatával
fordítás kbd_translate ()) egy sor „kulcsesemények
depressziós „” elengedi a gombot. "
Minden gomb megvan a saját egyedi kód 1
127. megnyomása generálja ezt a kódot, és
engedje - ez a kód 128 (például akkor, ha
nyomja meg az „a” a hegyen kap a 30-as kódot, és
felengedésekor - 158).

Ezután írjuk be a kódot szerint
kódkártya boríték vissza magát
karakter (általában ez figyelembe veszi
funkcióbillentyűk - Shift. AltGr,
Control, Alt ShiftL, ShiftR, CtrlL és CTRLR, kombinációk
aktív „módosítók” - CapsLock
példa), és továbbítja a lánc pufferek és
Sorokat a terminál.

A billentyűzet meghajtó működhet
négy üzemmód:

  • scancode (RAW mód): prilozhenitse jelentkeznek
    scancode az áramból, és a további folyamatokban
    saját driver (például - X11).
  • keycode (MEDIUMRAW mód): A program fogadja el a kódot
    kulcs át a szkennelés kód
    vezető szerint a saját
    táblázatban.

  • ASCII (XLATE mód): a kulcs kódját alakítjuk
    ASCII karakterből álló kódot, vagy valamilyen
    a sorozat karaktereinek ASCII-kódok
    összhangban az elrendezés táblázat
    billentyűzet, amely a memóriában tárolt / disk
    külön fájl (lehet változtatni
    billentyűzetkiosztás kbdconfig csapat, ő
    előír egy új értéket a / etc / sysconfig / billentyűzet
    és betölti a táblázatban megadott
    RAM).

  • Unicode (Unicode üzemmódra): Ez az üzemmód eltér
    előző Más kiadási méret
    karakterek - UTF8, nem ASCII.
  • Ezek a módok a végén, meg
    Az alkalmazás kap eredményeként
    gombnyomás. (Mellesleg: Mód
    működő billentyűzetet illesztőprogramok találhatók
    vagy módosított alkalmazásával kbd_mode (). de
    Ne feledd! Rendszerváltás általában hagyja
    Ön billentyűzet nélkül!)

    Kernel alapú keylogger

    Általánosságban elmondható, hogy elfoghatja az áramlás
    kódok két módja van: a levelet a felvezető
    billentyűzet megszakítja vagy zavarja a
    továbbítása az egyik fent ismertetett lépések.

    Look végre, mint az első kiviteli alakban. az
    Intel architektúra billentyűzet vezérlő
    Lapozzunk az első megszakítás. amikor
    van a felvezető kell olvasni
    scancode és a billentyűzet állapotát. események
    Billentyűzet áll rendelkezésre 0h60 port (billentyűzet
    adatregiszteren), és állapotát - 0h64 (billentyűzet állapota
    regiszter).

    / * Az alábbiakban kód intel specifikus * /
    #define KEYBOARD_IRQ 1
    #define KBD_STATUS_REG 0x64
    #define KBD_CNTL_REG 0x64
    #define KBD_DATA_REG 0x60
    #define kbd_read_input () inb (KBD_DATA_REG)
    #define kbd_read_status () inb (KBD_STATUS_REG)
    #define kbd_write_output (Val) outb (Val, KBD_DATA_REG)
    #define kbd_write_command (Val) outb (Val, KBD_CNTL_REG)
    / * Regisztrálj saját IRQ kezelő * /
    request_irq (KEYBOARD_IRQ, my_keyboard_irq_handler, 0, "az én billentyűzet"
    NULL);

    scancode = kbd_read_input ();
    key_status = kbd_read_status ();
    log_scancode (scancode);

    Ez a kezelő csak a csatorna
    Intel Architecture, hogy abban az esetben a szállítási
    Egy másik platformon munka
    Természetesen nem lesz. Bár, őszintén szólva,
    ahol láttál más platformokon ...

    Ez az első vezető funkció
    billentyűzet (billentyűt melyik), feldolgozza leolvasó
    kódok kapott a billentyűzet:

    # /usr/src/linux/drives/char/keyboard.c
    void handle_scancode (unsigned char scancode, int le);

    Akkor cserélje ki a valódi handle_scancode ()
    saját eljárását, amely amellett, hogy
    minden mást ír kulcskódokat.

    Itt található az ezt a cikket egy ismerősének:

    Kapcsolódó cikkek