Also das Umleiten an sich ist super simpel, im Prinzip nichts anderes als bei den WindowProcs wo Du Dir den Pointer holst, nen eigenen Wert reinschreibst, Dein Ding machst und am Ende die alte Proc aufrufst. Trickreich wirds erst wenn Dein Code halt Systemfunktionen aufrufen will. Dafür gibts mehrere Möglichkeiten:
a) Dein Code macht das alles zu Fuss (hat seine eigene Importtable die beim Start erstmal gefüllt wird)
b) Dein Exepatcher untersucht die Imports der Zielexe und benutzt die vorhandene Importtable für seinen eigenen Code ebenfalls. Falls der eigene Code APIs braucht die noch nicht in der Importtable stehen, lässt sich diese auch erweitern.
a) klingt schon nach viel Aufwand, ist aber noch wesentlich einfacher als b) zu programmieren wenn man nicht jeden Tag in den Innereien des
PE-Formates rumwühlt *g*
Dein Exepatcher muss dann nur noch den Entrypoint (EP) aus dem
PE-Header auslesen, den Wert durch den Einsprungspunkt des eigenen Codes ersetzen und am Ende des eigenen Codes per JMP an den EP springen. Sowas in Delphi zu programmieren wäre mir persönlich allerdings zu umständlich, meine kleinen Patcher hab ich bisher immer direkt in Assembler gestrickt
(Und eh jetzt wieder jemand was von Cracker schreit, es handelte sich bei den Dingern um ganz legale Programme die im Zuge meiner damaligen Entwicklertätigkeit notwendig wurden.)