Du kannst den originalen code nicht einfach so aufrufen. Immerhin hast du 5 Bytes überschrieben. Genau die müssen wieder vorher ausgeführt werden. Und meistens zerschneidest du halt eine Assembler Anweisung, d.h. du musst vorher den Code noch analysieren und ggf. 6 und mehr Bytes kopieren.
Für dich gibt es jetzt mehrere Möglichkeiten:
a) bevor du die originale Funktion aufrufst machst du den patch wieder rückgängig und am Ende deiner Funktion patched du wieder. (dann aber nicht jedes mal VirtualProtect aufrufen), das is sehr langsam -> nicht so einfach mit ThreadSafe, und wenn dann wieder langsamer (z.b.
Mutex)
b) du kopierst die
dll und lädst sie ein 2. mal und rufst dann da die Funktion von auf (ggf. funktioneirt das nicht wenn die
dll mit globalen variablen arbeitet)
c) du nimmst eine andere Hook-Möglichkeit z.B. Import/Export/Relocation/PageGuard/ hook (ggf. verlierst du dadurch aber ein paar Aufrufe)
d) du immst eine
Dll (Name enfallen) die macht das alles für dich direkt auf Treiberebene (capi oder so?)
e) seit Windows XP haben viele Funktionen 5 NOPs vor dem EntryPoint. Ist das der Fall kannst du dort deinen Jump reinschreiben und dann die ersten bytes mit einem short JMP dahhin überschreiben (das wird bei Windows Updates teilweise so gemacht)
f) du nimmst fertige HookingUnits ( z.b. meine
http://uall.Cheat-Project.com/uallCollection oder madshis (madshi.net)