MessageBox Hook

08/15/2010 22:07 SiZeXtreme#16
Bin mir auch sicher, dass es damit gehten wird. Ich will es nur wissen, damit ich meinen Programmier-Skill noch weiter verbessern kann. ;)
08/16/2010 16:36 SiZeXtreme#17
So habs jetzt noch selber lösen können :). Hier noch der gefixte Source Code, falls jemand mal das selbe Problem hat.
Code:
int WINAPI hook_MessageBox(HWND hWnd, char* lpText, char* lpCaption, UINT uType){

	
	WriteProcessMemory((HANDLE)-1, (void*)MessageBoxaddr, backupMS, 6, 0);
	
	int ret = MessageBoxA(hWnd, "Hook is working!", "Info", uType);

	MessageBoxaddr = HookFunction("user32.dll", "MessageBoxA", hook_MessageBox, backupMS);
	
	return ret;
}
08/16/2010 19:35 MrSm!th#18
Kann es sein, dass deine HookFunction einfach die Adresse der MessageBoxA returnt?
Sieht nämlich hier danach aus:

Code:
WriteProcessMemory((HANDLE)-1, (void*)MessageBoxaddr, backupMS, 6, 0);
Denn MessageBoxaddr hat ja den Rückgabewert von HookFunction gegeben hat und an den schreibst du die original Bytes, also wirds wohl einfach die MessageBoxA Adresse sein.
Da Frage ich mich doch, wo ist der Sinn?

Außerdem musst du ja das Trampolin aufrufen, was dann in die original Funktion nach dem Jump zum Hook springt, sonst macht es, außer zum unhooken, keinen Sinn, die Bytes zu sichern.
Da backupMS wohl nur 6 Bytes hat, hat dieses Trampolin dort keinen Jump in die original Funktion, also bist du gezwungen zu unhooken, das Original auszuführen und wieder zu hooken oder in ner Endlosschleife zu landen.

Mein Fazit also: Die Funktion ist crap, nutz MS Detours oder eine andere Library, die dir auch den Jump erstellt.