Autorul poate fi contactat la adresa: Login pentru adresa
Un keylogger este un dispozitiv care se conectează între tastatură și calculator, cu rolul de a înregistra ce s-a tastat. Dispozitivul înregistrează parole de autentificare, detalii de carduri de credit, conversații private și alte detalii confidențiale etc.
Pentru proiectul la PM implementez un keylogger care funcționează pe interfața PS/2 și reține într-un buffer circular o secvență cu caracterele tastate de victimă.
Keylogger-ul va dispune de două mufe PS/2: una de intrare și una de ieșire. În modul normal de funcționare, acesta va repeta valorile pinilor de intrare, la ieșire, repetând semnalul. Keylogger-ul va memora ultimele câteva sute de caractere în memoria sa internă, fiind capabil să le retrimită prin mufa de ieșire la apăsarea butonului BTN din placa de bază.
Nu am nevoie de prea multe piese adiționale: voi lega pinii mufei PS/2 la GPIO, microcontrollerul având rol de repetor.
Din conectorul PS/2 ne interesează două fire: DATA și CLK.
Comunicația este serială, sincronă și bidirecțională. Tastatura generează semnalul de ceas, iar calculatorul oprește comunicarea trăgând linia de ceas la masă.
Frecvența uzuală de ceas este 12.5khz.
Am conectat mufele PS/2 folosind jumper-e legate direct la placa de bază. Toate sârmele sunt legate folosind alte sârme de găurile de suport ale plăcii de bază.
Dezvoltarea s-a realizat pe linux. La editarea codului sursă s-a folosit editorul vim, singura alegere corectă.
Pentru conducerea celor 2 mufe PS/2 se folosesc 4 pini de GPIO: un DATA și un CLK pe intrare, plus alți doi pini pentru ieșire.
În mare, microcontrollerul trebuie să:
Pentru scriere, am folosit ca inspirație acest articol care se bazează pe delay-uri pentru a comuta atât ceasul cât și linia de date.
Pentru aplicația dată, am considerat că este satisfăcătoare o soluție care scrie la PS/2 folosind ca sincronizare delay-uri.
Pentru citirea datelor de la mufa PS/2 am pornit de la acest ghid de pe internet. Am folosit aceeași logică și eu, declanșată pe întreruperea PCINT a pinului de CLK.
Microcontrollerul trebuie să memoreze semnalele primite la intrare în ultima vreme într-un buffer intern, pentru a putea reda o secvență de caractere din nou la ieșire.
Pentru asta folosesc un buffer circular de 1kb, declarat ca memorie globală.
Am reușit să scriu o propoziție la tastatură, să apăs pe buton, și să o văd scrisă din nou pe ecran.
În concluzie, reamintim următoarele:
Deţinerea sau confecţionarea, fără drept, de mijloace specifice de interceptare ori de înregistrare a comunicaţiilor se pedepseşte cu închisoare de la 3 luni la 2 ani sau cu amendă. -- Codul Penal, Art. 302, Alin. 6
Interceptarea, fără drept, a unei convorbiri sau a unei comunicări efectuate prin telefon sau prin orice mijloc electronic de comunicaţii se pedepseşte cu închisoare de la 6 luni la 3 ani sau cu amendă. -- Codul Penal, Art. 302, Alin. 2
Descărcați arhiva proiectului de aici.
Proiectul poate fi accesat pe GitHub. Arhiva cu toate resursele este disponibilă aici.