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).
kulcs át a szkennelés kód
vezető szerint a saját
táblázatban.
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).
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: