![]() |
Hook.dll und programm liefern kein ergebnis
hi also ich wollte mal nen kleinen keylogger programmieren mit dem hintergrund, bestimmte befehle einfach so eintippen zu können egal wo, soweit bin ich aber noch lange nicht. Denn irgendwie klappt das versenden von der dll zum programm nciht...
hier mein code..
Delphi-Quellcode:
und die dll
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const WM_KeyLogMessage = WM_USER + 23; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } procedure OnMyMessage(var Msg: TMessage); message WM_KeyLogMessage; public { Public-Deklarationen } end; TInstallHook = function(Hwnd: THandle): Boolean; stdcall; TUninstallHook = function: Boolean; stdcall; var Form1: TForm1; InstallHook: TInstallHook; UninstallHook: TUninstallHook; lib: Cardinal; implementation {$R *.dfm} procedure TForm1.OnMyMessage(var Msg:TMessage); begin memo1.Lines.Add(inttostr(msg.lparam)); end; procedure TForm1.FormCreate(Sender: TObject); begin lib := LoadLibrary('keyboardhook.dll'); if lib <> INVALID_HANDLE_VALUE then begin InstallHook := GetProcAddress(lib, 'InstallHook'); UnInstallHook := GetProcAddress(lib, 'UninstallHook'); end; // else ERROR end; procedure TForm1.FormDestroy(Sender: TObject); begin freelibrary(lib); end; procedure TForm1.Button1Click(Sender: TObject); begin installhook(self.Handle); end; procedure TForm1.Button2Click(Sender: TObject); begin uninstallhook; end; end.
Delphi-Quellcode:
Vllt kennst sich ja jemand besser aus damit als ich und sieht sofort was ich falsch mache. denn eigentlich sollte im memo immer die gedrückte taste erscheine... danke schonmal
library Keyboardhook;
uses Windows, Messages; var HookHandle: Cardinal = 0; WindowHandle: Cardinal = 0; WM_KeyLogMessage: WM_USER + 23; function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin //es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen //it's possible to call CallNextHookEx conditional only. Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); case nCode < 0 of TRUE: exit; //wenn code kleiner 0 wird nix gemacht //if code smaller 0 nothing has to be done FALSE: begin sendmessage(HookHandle, WM_KeyLogMessage, wParam, lParam); //Hier kann jetzt alles bearbeitet werden //Here one can work with the parameters end; end; end; function InstallHook(Hwnd: Cardinal): Boolean; stdcall; begin Result := False; if HookHandle = 0 then begin //Erstmal Hook installieren //First install the hook HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0); //Uebergebenes Fensterhandle sichern //Save the given window handle WindowHandle := Hwnd; Result := TRUE; end; end; function UninstallHook: Boolean; stdcall; begin //Hook aus der Hookchain entfernen //Uninstall hook from hook chain Result := UnhookWindowsHookEx(HookHandle); HookHandle := 0; end; exports //Installations- und Deinstallationsroutine exportieren //Export the installation and deinstallation routine InstallHook, UninstallHook; end. |
Re: Hook.dll und programm liefern kein ergebnis
windowhandle ist bei einem globelen Hook immer Null .. mit MMF's arbeiten
|
Re: Hook.dll und programm liefern kein ergebnis
Tut mir leid ich versteh nur bahnhof! kann mir jemand erklären was das heißen soll?
|
Re: Hook.dll und programm liefern kein ergebnis
Die DLL wird in jeden laufenden prozess geladen. Und zwar jeweils einzeln. Das heißt, in jeder ihrer Instanzen (außer in der ovn deinem eigenen programm), wird WindowHandle auf 0 stehen.
Das heißt, du musst dir eine andere Möglichkeit suchen, um mit deinem Hauptprogramm zu kommunizieren. Zum Beispiel Memory Mapped Files. |
Re: Hook.dll und programm liefern kein ergebnis
Okay das war ein tipfehler, ich hab HookHandle reingeschrieben, obwohl da WIndowHandle stehen sollte, jetzt kommt auch was an, allerdings sehr merkwürdige zahlen und immer gleich vier davon, was hat das zu bedeuten, bzw wie find ich raus welche buchstaben damit gemient sind?
|
Re: Hook.dll und programm liefern kein ergebnis
also mittlerweile weis ich was hier bei mir ankommt es sind die ascii werte der tasten, aber immer viermal das 3mal zu viel
|
Re: Hook.dll und programm liefern kein ergebnis
Also erstensmal sieht das (wegen der Kommentare) aus wie 1 zu 1 kopiert. Du wirst dich ein wenig mehr in die Materie vertiefen müssen.
Zweitens hast du ganz sicher Probleme, dein Hauptprogramm zu finden. Da gibts mehrere Möglichkeiten, das zu lösen. MMF wurde bereits erwähnt. Drittens sagt dir die MSDN Library einiges: ![]() ASCII-Codes dürften das mitnichten sein. Bzw. noch einiges mehr. Viertens werden Doppelposts hier nicht gern gesehen. DU kannst dein Posts editieren. |
Re: Hook.dll und programm liefern kein ergebnis
Also das meiste von oben hat sich erledigt, die buchstaben kommem also an werden auch umgewandelt.. nur werden sie mehr als einmal gesendet...
|
Re: Hook.dll und programm liefern kein ergebnis
Hm... da kann ich dir leider nicht helfen. Hast du mal ne Demo, um das zu reproduzieren?
|
Re: Hook.dll und programm liefern kein ergebnis
ja klar kein problem, also hier mal der code der unit...
Delphi-Quellcode:
.dll
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const WM_KeyLogMessage = WM_USER + 23; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } procedure OnKeyLogMessage(var Msg:Tmessage); message WM_KeyLogMessage; public { Public-Deklarationen } end; TInstallHook = function(Hwnd: THandle): Boolean; stdcall; TUninstallHook = function: Boolean; stdcall; var Form1: TForm1; InstallHook: TInstallHook; UninstallHook: TUninstallHook; lib: Cardinal; implementation {$R *.dfm} procedure TForm1.OnKeyLogMessage(var msg:Tmessage); begin memo1.Lines.Add(chr(msg.wparam)); end; procedure TForm1.FormCreate(Sender: TObject); begin lib := LoadLibrary('keyboardhook.dll'); if lib <> INVALID_HANDLE_VALUE then begin InstallHook := GetProcAddress(lib, 'InstallHook'); UnInstallHook := GetProcAddress(lib, 'UninstallHook'); end; // else ERROR end; procedure TForm1.FormDestroy(Sender: TObject); begin freelibrary(lib); end; procedure TForm1.Button1Click(Sender: TObject); begin installhook(self.Handle); end; procedure TForm1.Button2Click(Sender: TObject); begin uninstallhook; end; end.
Delphi-Quellcode:
geht das so? oder wie meintest du das mit der demo? mitlerweile kommen öfter auch mal noch mehr buchstaben an.... ganz merkwürdig
library Keyboardhook;
uses Windows, Messages; const WM_KeyLogMessage = WM_USER + 23; var HookHandle: Cardinal = 0; WindowHandle: Cardinal = 0; function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin //es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen //it's possible to call CallNextHookEx conditional only. Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); case nCode < 0 of TRUE: exit; //wenn code kleiner 0 wird nix gemacht //if code smaller 0 nothing has to be done FALSE: begin sendmessage(WindowHandle, WM_KeyLogMessage,wparam,lparam); //Hier kann jetzt alles bearbeitet werden //Here one can work with the parameters end; end; end; function InstallHook(Hwnd: Cardinal): Boolean; stdcall; begin Result := False; if HookHandle = 0 then begin //Erstmal Hook installieren //First install the hook HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0); //Uebergebenes Fensterhandle sichern //Save the given window handle WindowHandle := Hwnd; Result := TRUE; end; end; function UninstallHook: Boolean; stdcall; begin //Hook aus der Hookchain entfernen //Uninstall hook from hook chain Result := UnhookWindowsHookEx(HookHandle); HookHandle := 0; end; exports //Installations- und Deinstallationsroutine exportieren //Export the installation and deinstallation routine InstallHook, UninstallHook; end. vllt findest du ja was |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 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-2025 by Thomas Breitkreuz