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 ****, nutz MS Detours oder eine andere Library, die dir auch den Jump erstellt.