MessageBox Hook funktioniert nicht

11/30/2011 14:19 GLemon#1
Hi leute ,

ich bin langsam echt ratlos wieso funktioniert dieser Hook nicht?

Code:
#include <vcl.h>
#include <windows.h>
#include "detours.h"
#include "detoured.h"

#pragma comment(lib,"detours.lib")



 int (WINAPI * trueMessageBoxA)(HWND, LPCSTR, LPCSTR, UINT) = MessageBoxA;


 int WINAPI hookMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) {

 int hook = trueMessageBoxA(hWnd, "Hook wurde ausgeführt","MessageBox Hook",uType);

 return hook;

 }

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
if (reason==DLL_PROCESS_ATTACH) {


	DetourTransactionBegin();
	DetourUpdateThread(GetCurrentThread());
	DetourAttach(&(PVOID&)trueMessageBoxA,hookMessageBoxA);
	DetourTransactionCommit();
}
	return 1;
}

Die DLL wird erfolgreich injected aber sobald sich die MessageBox aufruft von meiner Test.exe bleibt trozdem der alte Text vorhanden.
(Ich nutze in der exe MessageBoxA).

Hoffe mir kann jemand helfen.
11/30/2011 18:18 ms​#2
Es kann nicht sein, dass du schon beim Compilen weißt, wo sich MessageBoxA befindet. Hol dir die Adresse am besten mit GetModuleHandle und GetProcAddress und setze dann den Hook da.

Wenn es dann immernoch nicht klappt, dann versuch mal MessageBoxA von deiner DLL selbst aufzurufen um zu schauen, ob der Hook überhaupt funktioniert.
11/30/2011 20:20 GLemon#3
Danke dir hat geklappt, kann geschlossen werden
12/01/2011 16:10 MrSm!th#4
Quote:
Es kann nicht sein, dass du schon beim Compilen weißt, wo sich MessageBoxA befindet. Hol dir die Adresse am besten mit GetModuleHandle und GetProcAddress und setze dann den Hook da.

Wenn es dann immernoch nicht klappt, dann versuch mal MessageBoxA von deiner DLL selbst aufzurufen um zu schauen, ob der Hook überhaupt funktioniert.
Klar kann man das, das MessageBox was er im Source Code hat, wird durch den indirekten Call über die IAT ersetzt, d.h. wenn er MessageBox einem Pointer zuweist, wird die korrekte Adresse aus der IAT zur Laufzeit ausgelesen.
12/01/2011 16:30 ms​#5
Quote:
Originally Posted by MrSm!th View Post
Klar kann man das, das MessageBox was er im Source Code hat, wird durch den indirekten Call über die IAT ersetzt, d.h. wenn er MessageBox einem Pointer zuweist, wird die korrekte Adresse aus der IAT zur Laufzeit ausgelesen.
mimimimi ;<