Keelog zdecydował się opublikować projekt wcześniejszej wersji keyloggera sprzętowego, udostępniając pełną wersję firmware'u, kodów źródłowych oprogramowania, schematów elektrycznych oraz dokumentacji. Keylogger Sprzętowy Open Source to w 100% sprawny oraz przetestowany logger klawiatury PS/2, zmontowany i używany przez setki osób na całym świecie. Działanie tego urządzenia jest podobne do wersji KeyGrabber PS/2. Do pobierania i analizowania danych z keyloggera zapewniona jest specjalna aplikacja KeyGrab. Przypominamy jednak, że Keylogger Sprzętowy Open Source opublikowany został "jak jest", ze wszystkimi wadami i bez żadnej gwarancji.

Sprzętowy Keylogger Open Source

Przed rozpoczęciem pracy, sprawdź według listy czy posiadasz wszystkie narzędzia oraz umiejętności niezbędne do wykonania projektu Keyloggera Sprzętowego Open Source:

  • podstawowe doświadczenie w elektronice (głównie hardware)
  • lutownica do układów scalonych
  • programator mikrokontrolerów (obsługujący rodzinę Atmel AT89CXX51)
Sprzętowy Keylogger Open Source - podzespoły

Następujące podzespoły są niezbędne do wykonania tego projektu:

  • mikrokontroler Atmel AT89C2051 (lub AT89C1051, AT89C4051)
  • pamięć EEPROM typu AT24C512 (lub kompatybilna)
  • kwarc 12 MHz
  • 2x kondensator 33p
  • kondensator 10 uF
  • rezystor 10 k
  • niewielki przycisk
Sprzętowy Keylogger Open Source - gniazd i wtyk PS/2 (np. z kabla)

Niezbędne jest również zapewnienie obudowy dla loggera. Dobrym pomysłem jest zakup przedłużacza PS/2 oraz parocentymetrowego kawałka rurki termokurczliwej, którą można termicznie zawinąć na gotowym loggerze.

Montaż należy zacząć od zaprogramowania firmware'u mikrokontrolera. Uruchom aplikację programatora, wybierz mikrokontroler AT89C2051, i załaduj program używając kodu w wersji binarnej lub wersji hex. W przypadku wątpliwości, można również ponownie skompilować kod w wersji źródłowej używając odpowiedniego kompilatora dla rodziny 8051. Lutowanie jest prawdopodobnie najbardziej złożonym i czasochłonnym etapem montażu, z tego względu, że keylogger sprzętowy powinien być wykonany przy zachowaniu najmniejszych możliwych gabarytów. Poniższy schemat elektryczny Keyloggera Sprzętowego Open Source pokazuje, jak połączenia powinny przebiegać pomiędzy podzespołami.

Sprzętowy Keylogger Open Source - podstawowe doświadczenie w elektronice (głównie hardware)

Zlutuj elementy zaczynając od mikrokontrolera oraz pamięci EEPROM. Nieużywane piny mogą zostać usunięte. Upewnij się, że zachowany zostanie dostęp do przycisku. Podczas montażu kondensatorów, upewnij się, że są właściwie spolaryzowane.

Sprzętowy Keylogger Open Source - lutowanie

Urządzenie powinno być możliwie jak najmniejsze, bez zbędnych odstępów pomiędzy elementami. Należy jednak unikać zwarć, bowiem będą one później bardzo trudne do usunięcia. Po zlutowaniu głównych elementów, keylogger sprzętowy powinien przypominać prototyp pokazany na zdjęciu.

Sprzętowy Keylogger Open Source - konektory

Montaż gniazda i wtyku PS/2 powinien być przeprowadzony na końcu. Dobrym pomysłem jest przecięcie przedłużacza PS/2 na dwie części i przylutowanie przewodów z każdej części osobno. Pamiętaj jednak o nałożeniu rurki termokurczliwej na jedną z części przed lutowaniem. Przylutuj wszystkie cztery używane linie PS/2 (CLK, DATA, VCC i GND) na gnieździe oraz wtyku (przyłączanymi do klawiatury i komputera).

Sprzętowy Keylogger Open Source

Przed termicznym zawinięciem rurki termokurczliwej wokół keyloggera, dobrym pomysłem jest umieszczenie niewielkiej ilości kleju lub żywicy pomiędzy elementami, żeby usztywnić całą konstrukcję. Na końcu ogrzej rurkę termokurczliwą żeby się zacisnęła wokół keyloggera oraz wytnij niewielki otwór zapewniający dostęp do przycisku.

Keylogger Sprzętowy Open Source zaczyna przechwytywanie danych z klawiatury w momencie podłączenia pomiędzy komputer a klawiaturę. Keylogger jest całkowicie "przeźroczysty", nie wpływa nijak na funkcjonowanie komputera ani klawiatury, ani nie może być wykryty przez oprogramowanie. Wszystkie dane z klawiatury są zapisywane do wewnętrznej pamięci nieulotnej EEPROM o rozmiarze 64kB. Tryb przechwytywania jest niezależny od typu systemu operacyjnego zainstalowanego na komputerze.

Sprzętowy Keylogger Open Source - Instalacja 1

Znajdź złącze klawiatury PS/2 na komputerze.

Sprzętowy Keylogger Open Source - Instalacja 2

Odłącz klawiaturę.

Sprzętowy Keylogger Open Source - Instalacja 3

Podłącz keylogger sprzętowy na miejsce klawiatury.

Sprzętowy Keylogger Open Source - Instalacja 4

Podłącz klawiaturę do keyloggera. Tryb przechwytywania wystartuje od razu po włączeniu zasilania.

Kiedy dane klawiatury zostaną zachowane w trybie przechwytywania, mogą one zostać odtworzone na dowolnym komputerze klasy PC z systemem operacyjnym Windows 9X/Me/XP/2000. Keylogger sprzętowy dokonuje tego poprzez symulowanie wysyłania danych przez klawiaturę. Przekazywane dane są pobierane przez aplikację KeyGrab. Po pobraniu wszystkich danych przez komputer, mogą one zostać przetworzone oraz zanalizowane. Poniższe instrukcje ilustrują sposób inicjowania trybu pobierania danych z keyloggera.

Sprzętowy Keylogger Open Source - Tryb przechwytywania 1

Uruchom aplikację KeyGrab.

Sprzętowy Keylogger Open Source - Tryb przechwytywania 2

Podłącz sprzętowy keylogger na miejsce klawiatury. Nie podłączaj klawiatury.

Sprzętowy Keylogger Open Source - Tryb przechwytywania 3

Kliknij na pasek tytułowy aplikacji KeyGrab aby uczynić ją aktywną.

Sprzętowy Keylogger Open Source - Tryb przechwytywania 4

Naciśnij przycisk na keyloggerze żeby zainicjować transmisję. W trakcie pobierania nie przełączaj aktywnej aplikacji. Naciśnij przycisk ponownie, żeby zakończyć pobieranie. Należy to uczynić, kiedy pożądane dane zostały już pobrane do komputera.

Sprzętowy Keylogger Open Source - Tryb przechwytywania 5

Odłącz keylogger sprzętowy i podłącz ponownie klawiaturę PS/2.

Podczas pobierania danych do głównej tabeli aplikacji KeyGrab, są one automatycznie przetwarzane w taki sposób, żeby pokazać klawisze naciśnięte podczas trybu przechwytywania. Dane są transmitowane w kolejności odwrotnej do chronologicznej, żeby pokazać najświeższe przechwycone dane na początku. Pobrane dane można analizować ręcznie, lub skorzystać z niektórych wbudowanych opcji wyszukiwania.

Sprzętowy Keylogger Open Source - Analiza danych

1 - Pozycja w pamięci zajęta przez przechwyconą daną (format hex).
2 - Przechwycony klawisz.
3 - Zaistniałe wydarzenie - naciśnięcie lub zwolnienie klawisza.
4 - Skankod klawisza na magistrali PS/2 (format hex).
5 - Ostatnia pozycja zapisana w pamięci (format hex).
6 - Rozmiar pamięci nieulotnej EEPROM (w kilobitach).

Najbardziej interesującą dla użytkownika informacją jest kolumna z klawiszem (2) oraz zdarzeniem (3). W tych kolumnach zakodowana jest informacja o wpisanych znakach. Przesuwając pasek przewijania można odtworzyć historię wpisanego tekstu w trybie przechwytywania. Dane z keyloggera są transmitowane w odwrotnej kolejności chronologicznej (najnowsze dane na początku).

Aplikacja do pobierania danych z Keyloggera Sprzętowego Open Source dla Windows 9X/ME/2000/XP:
KeyGrab.zip (0.7MB)

Pełny kod źródłowy dla mikrokontrolera AT89C2051:
Kod źródłowy - diy.asm

Skompilowany firmware dla mikrokontrolera AT89C2051:
plik BIN - diy.bin, plik HEX - diy.hex

Sprzętowy Keylogger Open Source - KeyGrab

Zachęcamy to zapoznania się z poniższymi uwagami, które mogą przyczynić się do uniknięcia wielu problemów związanych z użytkowaniem keyloggera sprzętowego.

Odpowiedzialność prawna

  1. Każdy kraj ma inne prawo dotyczące logowania danych z klawiatury. Nieznajomość prawa nie upoważnia do nie przestrzegania go. Prosimy o zapoznanie się z Umową Użytkownika.
  2. Firma Keelog nie bierze żadnej odpowiedzialności za zniszczenia ani utraty zdrowia i mienia wynikłe z użytkowania tego keyloggera sprzętowego.
  3. Keylogger Sprzętowy Open Source nie powinien być używany do bezprawnego przechwytywania cudzych danych, w szczególności haseł, danych bankowych, poufnej korespondencji itp. W większości krajów jest to naruszenie prawa.

Akwizycja danych

  1. Keylogger sprzętowy ma 64 kB nieulotnej pamięci typu EEPROM. Zapełnienie tej pamięci spowoduje ponowny zapis od pierwszej lokalizacji pamięci. Najstarsze dane zostaną utracone.
  2. Pierwsze 128 bajtów pamięci jest zarezerwowane na dane konfiguracyjne, w szczególności znacznik zawierający adres ostatniego zapisu do pamięci. Znacznik ten jest uaktualniany w przybliżeniu co 10 sekund.
  3. Nie zostawiaj keyloggera sprzętowego podłączonego w trybie przechwytywania kiedy nie jest to konieczne. Powoduje to niepotrzebne zapełnianie pamięci, przez co stare, często istotne dane mogą zostać nadpisane.

Transmisja danych

  1. Do pobierania danych z keyloggera sprzętowego niezbędny jest komputer klasy PC o prędkości przynajmniej 100 MHz z zainstalowanym systemem operacyjnym Windows 9X/Me/XP/2000.
  2. Do pobierania danych z keyloggera sprzętowego używana jest technika symulowania klawiatury. Z tego względu rzeczywista klawiatura musi być odłączona podczas transmisji.
  3. W trakcie pobierania danych aktywną aplikacją musi być KeyGrab. W przeciwnym wypadku system Windows lub inna aktywna aplikacja będą usiłowały zinterpretować przychodzące naciśnięcia klawiszy.
  4. Dane zarchiwizowane w trybie przechwytywania są odtwarzane w kolejności odwrotnej do chronologicznej. Ma to na celu pokazanie najświeższych danych na początku procesu transmisji. Żeby odzyskać najstarsze dane, niezbędne jest odczekanie całego procesu transmisji. Cały proces pobierania danych może trwać do 20 minut.
  5. Pobieranie danych musi zostać zakończone przez ponowne naciśnięcie przycisku. Należy to uczynić, kiedy dane zaczną być dublowane.

Działanie klawiatury PS/2

  1. Działanie klawiatury typu PS/2 jest bardziej skomplikowane niż może się początkowo wydawać. Można to zauważyć, analizując surowe dane zarchiwizowane przez sprzętowy keylogger. Przy każdym naciśnięciu klawisza, klawiatura generuje jeden znak, tzw. "skankod". Przy zwolnieniu klawisza, znak ten jest generowany ponownie, lecz poprzedzony znakiem 240 (hex F0). Istnieją również rozszerzone klawisze, dla których używany jest znak 224 (hex E0). Więcej informacji na ten temat jest dostępnych w dziale Protokół klawiatury PS/2.
  2. Sprzętowy Keylogger Open Source ma 64 kB pamięci, co nie oznacza jednak, że może zapamiętać 64 tysiące naciśnięć klawiszy. Jedna sekwencja naciśnięcia i zwolnienia klawisza zajmuje 3 bajty dla standardowego klawisza i 5 bajtów dla klawisza rozszerzonego. Logowanie zostało znacząco zoptymalizowane w wersjach komercyjnych.

Podstawy

Sprzętowy Keylogger Open Source - sygnały magistrali PS/2

Przecinając kabel klawiatury PS/2 zazwyczaj znaleźlibyśmy w środku 6 przewodów. Tylko 4 z tych linii są znaczące. Dwie z nich to zasilanie: masa (GND) oraz +5 Voltów (VCC) generowane przez zasilacz komputerowy. Dwie pozostałe to asynchroniczna transmisja danych: linia danych (DATA) oraz linia zegarowa (CLK). Na rysunku po prawej uwidoczniono jak te linie przekładają się na piny wtyczki DIN (a) oraz miniDIN (b). Transmisja jest dwukierunkowa, jednak rolę nadrzędną spełnia klawiatura. Wysyła ona informację na temat naciśnięć oraz zwolnień klawiszy. Ramka danych zawiera tylko jeden bajt, poprzedzony bitem startu oraz zakończony bitem parzystości i bitem stopu. Klawiatura wystawia kolejne bity na linii danych DATA oraz taktuje je ujemnym zboczem na linii zegarowej CLK. Częstotliwość taktowania to 10...30 kHz. Byłby to bardzo prosty i elegancki protokół, gdyby nie fakt, że komputer potrzebuje od czasu do czasu wysłać daną do klawiatury. W takim wypadku ściąga linię zegarową CLK do zera na jakiś czas i oczekuje aż klawiatura rozpocznie taktowanie. Kiedy rozpoczną się impulsy, kontroler w komputerze zaczyna wystawiać własne dane na linii DATA. Przebiegi transmisji są uwidocznione na wykresach poniżej: (a) od klawiatury do komputera, (b) od komputera do klawiatury. Protokół ten posiada oczywiście kilka wyjątków i zawiłości, jak na przykład przerywanie transmisji, powtarzanie znaku itd. Tym niemniej, są to stosunkowo rzadkie przypadki.

Sprzętowy Keylogger Open Source - przebiegi

Dane na magistrali

Jakie więc dane są w rzeczywistości transmitowane przez kabel klawiatury? Przy starcie zarówno klawiatura, jak i komputer wysyłają dane inicjalizacyjne, informując o swoim statusie. Przy normalnej pracy komputera, tylko klawiatura wysyła dane. Dane te dotyczą każdego wydarzenia, które miało miejsce na klawiaturze. Jako wydarzenie brane jest pod uwagę naciśnięcie oraz zwolnienie klawisza. W przypadku naciśnięcia klawisza, wysyłany jest jego tzw. "skankod". Każdy klawisz posiada dokładnie jeden skankod, co tworzy mapę skankodów. W przypadku zwolnienia klawisza, najpierw wysyłany jest bajt specjalny 240 (hex F0), a następnie skankod danego klawisza. Tak więc standardowe wpisanie znaku z klawiatury spowoduje, że wysłane zostaną 3 bajty. Jeśli klawisz zostanie przytrzymany dłużej, jego skankod będzie powtarzany z aktualnie ustawioną częstotliwością powtarzania. Kiedy zostanie zwolniony, bajt 240 będzie wysłany, a na końcu skankod. To wciąż byłby prosty i przyjemny protokół, gdyby nie obecność pewnych klawiszy specjalnych, jak Home, End, strzałki itd. Kiedy klawisz specjalny zostanie naciśnięty, wysłany zostaje bajt 224 (hex E0), a następnie jego skankod. Kiedy klawisz specjalny zostaje zwolniony, wysyłana jest sekwencja 224, 240 (hex E0, F0), a następnie skankod klawisza. Standardowe i specjalne klawisze są wspólne dla wszystkich układów klawiatur narodowych, zgodnie z mapą skankodów. Żeby skomplikować całą historię jeszcze bardziej, istnieją dwa klawisze "super-specjalne", Print Screen oraz Pause, których naciśnięcie powoduje wysłanie całego ciągu znaków. Dla osoby oprogramowującej komunikację klawiatury, najlepiej udawać, że te klawisze nie istnieją.

Logowanie danych

Mikrokontroler monitoruje linie DATA i CLK przez cały czas, przechwytując wszystkie dane. Dane są zapisywane bezpośrednio do wewnętrznej, nieulotnej pamięci, bez żadnej analizy. Dzięki temu, użytkownik może później dowiedzieć się o wszystkich zdarzeniach które miały miejsce na klawiaturze. Kiedy użytkownik zadecyduje, że przechwytywanie jest zakończone i naciśnie przycisk, keylogger sprzętowy przełącza się w tryb pobierania. Klawiatura powinna uprzednio zostać rozłączona, w przeciwnym wypadku zacznie interpretować strumień danych. Keylogger wówczas zaczyna transmitować dane z wewnętrznej pamięci poprzez symulowanie klawiatury. Aplikacja KeyGrab powinna być aktywną aplikację w systemie, żeby interpretować strumień danych od keyloggera sprzętowego. Standardowe klawisze są wysyłane bezpośrednio za pomocą skankodu, zaś klawisze rozszerzone za pomocą dwubajtowego kodu.