Eigene Callback in einer DLL, die injected wird
Hi,
Ich hoffe ihr könnt mir helfen. Ich habe mir eine DLL geschrieben, die in eine WinApi Funktion injected werden soll. Dazu verwende ich madCodeHook. Soweit so gut. Jetzt möchte ich der DLL eine Callback Funktion übergeben, die ausgeführt wird wenn die WinApi Funktion aufgerufen wird. Leider passier aber absolut gar nichts. Gehen eigene Callback Funtionen nicht in einer DLL, die injected wird? Hier der Code: DLL:
Delphi-Quellcode:
Und jetzt der Code meiner Anwendung:
library TestLIB;
uses Windows, SysUtils, WinSock, madCodeHook; type THKLibOnPermission = procedure(); PHKLibOnPermission = ^THKLibOnPermission; {$R *.res} var { Externe Funktionen } OnPermission: THKLibOnPermission; { Hooks } AcceptNext: function(S: TSocket; Addr: PSockAddr; AddrLen: PInteger): TSocket; stdcall; { Legt die Funktion die ausgeführt werden soll fest } procedure Init(_OnPermission: Pointer); var pp: PHKLibOnPermission; begin pp := _OnPermission; OnPermission := pp^; end; function AcceptProc(S: TSocket; Addr: PSockAddr; AddrLen: PInteger): TSocket; stdcall; begin if Assigned(OnPermission) then OnPermission(); end; exports Init; begin { CollectHooks ausführen um Hooks zu beschleunigen } CollectHooks(); { WSOCK32.DLL hooken } HookAPI('WSOCK32.DLL', 'accept', @AcceptProc, @AcceptNext); FlushHooks(); end.
Delphi-Quellcode:
program Test;
{$APPTYPE CONSOLE} uses Windows, SysUtils, madCodeHook, WinSock; type THKLibOnPermission = procedure(); procedure Init(_OnPermission: Pointer); register; external 'TestLIB.dll'; procedure sPermission(); begin { Um anzuzeigen das die Prozedur ausgeführt wurde } FileClose(FileCreate('C:\test.txt')); end; begin readln; Init(@sPermission); InjectLibrary(ALL_SESSIONS or SYSTEM_PROCESSES, 'TestLIB.dll'); Sleep(20000); UnInjectLibrary(ALL_SESSIONS or SYSTEM_PROCESSES, 'TestLIB.dll'); end. |
Re: Eigene Callback in einer DLL, die injected wird
Die Variable OnPermission existiert nicht nur einmal, sondern für jeden Prozess in den die DLL geladen wird separat.
Init wirk sich deshalb nur auf den eigenen Prozess aus. Wie man das umgeht wurde schon sehr oft zu Hooks erklärt. |
Re: Eigene Callback in einer DLL, die injected wird
Könntest du mir bitte einen Link schicken, da ich zwar Themen zu DLL Injection finde aber nicht zu meinem Thema?
|
Re: Eigene Callback in einer DLL, die injected wird
Passende Suchbegriffe wären hier z.B.: IPC, Named Pipes, Memory mapped Files, Mailslots - kurzum: Deine DLL-Instanzen müssen miteinander quatschen können, und das hat mit der Injection selbst garnix zu tun.
|
Re: Eigene Callback in einer DLL, die injected wird
Vielen Dank an euch!
An Mapped Files hatte ich auch schon gedacht, aber so wäre es einfacher gewesen. Auf jeden Fall werde ich mich mal mit den von Medium genannten Begriffen auseinander setzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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