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.
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:
Następujące podzespoły są niezbędne do wykonania tego projektu:
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.
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.
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.
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).
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.
Znajdź złącze klawiatury PS/2 na komputerze.
Odłącz klawiaturę.
Podłącz keylogger sprzętowy na miejsce klawiatury.
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.
Uruchom aplikację KeyGrab.
Podłącz sprzętowy keylogger na miejsce klawiatury. Nie podłączaj klawiatury.
Kliknij na pasek tytułowy aplikacji KeyGrab aby uczynić ją aktywną.
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.
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.
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
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.
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.
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ą.
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.