AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Hook.dll und programm liefern kein ergebnis
Thema durchsuchen
Ansicht
Themen-Optionen

Hook.dll und programm liefern kein ergebnis

Ein Thema von Chaosente · begonnen am 6. Sep 2007 · letzter Beitrag vom 8. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Chaosente

Registriert seit: 20. Aug 2006
80 Beiträge
 
#1

Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 19:28
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:
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.
und die dll
Delphi-Quellcode:
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.
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
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#2

Re: Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 19:44
windowhandle ist bei einem globelen Hook immer Null .. mit MMF's arbeiten
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Chaosente

Registriert seit: 20. Aug 2006
80 Beiträge
 
#3

Re: Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 22:00
Tut mir leid ich versteh nur bahnhof! kann mir jemand erklären was das heißen soll?
  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: Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 22:04
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.
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
Chaosente

Registriert seit: 20. Aug 2006
80 Beiträge
 
#5

Re: Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 22:45
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?
  Mit Zitat antworten Zitat
Chaosente

Registriert seit: 20. Aug 2006
80 Beiträge
 
#6

Re: Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 23:04
also mittlerweile weis ich was hier bei mir ankommt es sind die ascii werte der tasten, aber immer viermal das 3mal zu viel
  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
 
#7

Re: Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 23:09
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: http://msdn2.microsoft.com/en-us/library/ms644984.aspx

ASCII-Codes dürften das mitnichten sein. Bzw. noch einiges mehr.

Viertens werden Doppelposts hier nicht gern gesehen. DU kannst dein Posts editieren.
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
Chaosente

Registriert seit: 20. Aug 2006
80 Beiträge
 
#8

Re: Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 23:17
Also das meiste von oben hat sich erledigt, die buchstaben kommem also an werden auch umgewandelt.. nur werden sie mehr als einmal gesendet...
  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
 
#9

Re: Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 23:20
Hm... da kann ich dir leider nicht helfen. Hast du mal ne Demo, um das zu reproduzieren?
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
Chaosente

Registriert seit: 20. Aug 2006
80 Beiträge
 
#10

Re: Hook.dll und programm liefern kein ergebnis

  Alt 6. Sep 2007, 23:27
ja klar kein problem, also hier mal der code der unit...
Delphi-Quellcode:
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.
.dll
Delphi-Quellcode:
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.
geht das so? oder wie meintest du das mit der demo? mitlerweile kommen öfter auch mal noch mehr buchstaben an.... ganz merkwürdig
vllt findest du ja was
  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 20:43 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