CV #52het - 52 projekt

Egy kísérlet arra, hogy mi az a legkisebb méret, amiben egy működő keylogger írható

- 2001 -

Ez a poszt meglehetősen technikai lesz, a gépi kód és a Windows API bugyraiban fogunk kalandozni.

Tehát mi is az a keylogger?


forrás: bash.hu/959

Röviden tehát: egy program, ami megjegyzi a lenyomott billentyűket. Kérdezőnk elég frappáns választ kapott, hiszen a Microsoft Word teljesen alkalmas arra, hogy a lenyomott betűket rögzítse, ámbár csak akkor képes erre, ha ő az aktív program.

A keylogger ennél sokkal mélyebben helyezkedik el a rendszerben: nem csak akkor képes a lenyomott billentyűket (és nem csak betűket) érzékelni, amikor aktív, hanem akkor is, amikor rejtve van és valamilyen más program van az előtérben.

A működésének alapja az, hogy ráakaszkodik (hook) a rendszer azon funkciójára, amelyik a billentyűzetet kezeli (igen, a billentyűzetet az operációs rendszer kezeli szoftverszinten, nem a program, amelyik előtérben van, ő csak megkapja az operációs rendszertől, ha annak olyan kedve van, hogy továbbítsa). Ilyen módon, a keylogger alapjában véve nem egy ártalmas szoftver, mindenkinek a rendszerében van egy-két olyan program, ami ezt a hookot alkalmazza. Például az Intel videokártyákhoz szállított beállítóprogram, ami a CTRL+ALT+jobbra gomb lenyomásakor elforgatja a képernyőt - többekkel láttam előfordulni és telefonálni, hogy "most akkor ezzel mit csináljak?!". Ez a program végig a háttérben várakozik és csak akkor reagál, ha egy speciális kombinációt nyom le a felhasználó.

Tehát a rendszerben találhatók olyan programok, amik figyelik éppen most, nálad is a billentyűzetet. Keyloggernek viszont az olyan típusú szoftvereket nevezzük, amik a lenyomott billentyűket rögzítik egy naplóba (akár fájl, akár adatbázis), innen a neve: key (billentyű) - logger (naplózó).

A keyloggert azért kriminalizálják, mert az összes billentyűlenyomás rögzítése és tárolása csak nagyon-nagyon ritka esetben a normális felhasználás része. Ezt a típusú programot legtöbbször arra használják, hogy adatot lopjanak felhasználótól, miközben a számítógépet használja. Csak, hogy két elég erős példát mondjak: jelszavak és bankkártyaadatok.

"Tudta-e?" - hogy a keyloggernek nem kell még csak rendszergazda jogosultság sem a hatékony működéshez?

Mi ez a kísérlet?

Láttam én már sok számítógépes vírust addig és azóta is, érdeklődve figyeltem a működésüket, reakciójukat, felépítésüket. Nevezzük ezt maximum műkedvelésnek, még a boncolásig sem jutottam el sok esetben - csak azonosítottam és eltávolítottam.

Ami viszont mindig megdöbbentett: a vírus mérete. Óriásiak voltak, nem lehetett őket nem kiszúrni és ez szerintem probléma (a vírusoknak, mármint). Ha csak megnézzük a scene versenyeken milyen kis méretben milyen bámulatos dolgokat tudnak összehozni a versenyzők: https://youtu.be/1NW8lBa29NY?t=89.

Ezeket a munkákat kevesebb, mint egy bekezdésnyi karakterrel megalkották. Ahogy már egy korábbi bejegyzésben is taglaltam, szenvedélyem az optimalizálás, a minél kevesebb erőforrásból minél többet kihozni. Ezért ütött szöget a fejembe, hogy "dehát miért kell egy keyloggernek ilyen nagynak lennie?".

Szóval nekiláttam, megnéztem, mi kell ahhoz, hogy billentyűleütéseket tudjak figyelni: 10 karakter - ezt még megjegyezni is egyszerű lenne! Persze önmagában ez a 10 karakter még nem képes érzékelni és rögzíteni a leütött billentyűket, de 10 karakterrel megoldható, hogy a keylogger megkapja mindet.

10 karakter

Ezzel a 10 karakterrel indult tehát a program, ami a következő "funkciókat" hivatott még szolgálni:

  1. minden rendszerben leütött billentyűt megkap
  2. a billentyűket, ha azok nem olvashatók (pl. nem betűk/számok/jelek), akkor olvasható szöveget társít hozzájuk (pl. a shift billentyű lenyomásakor csak egy kódot kap a program, a naplóba viszont már azt kell írni, hogy "shift", hogy érthető legyen)
  3. a naplófájlt álcázza olyan névvel, amivel egy gyakorlott rendszergazda is átsiklik fölötte
  4. figyeli azt is, hogy melyik program van előtérben és szintén rögzíti a váltást a naplóba (pl. a word-ről a böngészőre váltotta a felhasználó és a böngésző címsorában milyen weboldal van megnyitva)
  5. az elkészült naplót időnként feltölti egy internetes tárhelyre

A legutolsó változat működő magja már 1000 karakteres volt (+ a 2-es ponthoz szükséges lista, amig még kb. 300 byte, illetve pár szükséges sallang).

Tehát 1500 karakterből sikerült egy teljesen működőképes keyloggert írnom. Viszonyításképpen: ez a poszt eddig a pontig 4100 karakter körül van.

Az üröm az örömben sajnos az, hogy a Windows-on futó legkisebb program mérete 4096 byte lehet (legalábbis a fordító ekkorát generált egyetlen parancs miatt is). Elég pazarló, de ez van. Így, bár a szoftver lényegi része minden szükséges toldalékkal együtt maximum 1500 karakter volt, a Windows miatt ez fel volt kerekítve 4096-ra és ki lett töltve ürességgel.

A programot a mai napig nem ismerik fel a népszerű vírusirtók (persze, igazából nem terjed - de attól még kártékony is lehet).

Forráskód a githubon.

(A program utoljára Windows 98-on működött és csak a saját gépemen teszteltem.)