Zitat:
|
"gehookte" MessageBox() von irgendwo im Programm auf, d.h. nicht aus der main().
|
das ist mir zwar zuviel C Zeug drin

, aber als mögliche Fehlerquelle: sicher dass Dein Compiler STDCALL und nicht CDECL benutzt?
in etwa so sollte ein "allgemeiner" Hook gehen: Hooken, den Code wiederherstellen, an derselben Stelle weitermachen, wo der Hook vorher stand -als ob nichts geschehen wäre (daher braucht man sich auch nicht wirklich darum zu kümmern, was man für Anweisungen mit dem Hook auseinanderreißen könnte

) - und wenn man die RET Adresse manipuliert, kann man ein zweites mal in den Hookcode kommen, um den Hook nochmal zu setzen.
Das war mal für ein Injectme (war ein "einmaliger Hook" und wurde gerade erweitert (auf die Uhr schiel

)) - wie immer hat der Code eine lange Geschichte hinter sich und wurde zig mal aus den älteren Versionen übernommen (daher auch einige unschöne Passagen - denn "never change working code"

). Im wesentlichen sollte es auch auf DLL übertragbar sein (da wird man sich auch keinen Kopf mit der relativen Adressierung machen müssen)
Im Beispiel hookt er die MessageBox API in einer beliebigen "test.exe" und gibt jedesmal eine eigene (zusätliche) MsgBox aus.