0
So, da bin ich schon wieder.
Ich habe es jetzt gemacht wie Klaus es im Prinzip gesagt hat (etwas einfacher, wie ich finde)
1.) Mit CreateProcess die Exe, die allein auf der Festplatte ist starten (CREATE_SUSPENDED)
2.) Mit CreateRemoteThread wird in den fremden Prozess meine Dll geladen, die da dann folgendes tut:
2a.) Den ganzen Speicher der Anwendung nach der Adresse von 'GetModuleFileNameA/W' scannen, und diese dann mit der Adresse meiner eigenen Funktion ersetzen (die sich auch in der Dll befindet)
3.) Exe laufen lassen, mit ResumeThread()
Das ist das Prinzip, und es klappt eigentlich auch. Er findet immer einen Aufruf der Funktion und ersetz ihn.
Das Problem ist jetzt aber, dass es erstens nach wie vor nicht funktioniert (Setup.exe meckert, dass ihm dateien fehlen) und außerdem wird MyGetModuleFileName() nie aufgerufen. Ich habe zum Test eine MessageBox reingemacht.
Meine Vermutung ist jetzt, dass sich diese Setup.exe noch ein paar dll Dateien lädt (die tatsächlich dabei sind) und erst in diesen wird dann der Pfad irgendwie ermittelt. Das ganze passiert aber erst nachdem ich den Speicher gescannt habe, es werden also nicht alle 'GetModuleFileName()'s ersetzt.
So, ich hoffe dass das jetzt irgendjemand blickt
Ist meine Überlegung überhaupt richtig? Und was kann man tun?
P.S: Ich sehe grade, dass mein Testprogramm garkeine Dll's benutzt. Einfacher macht es das nicht, aber vielleicht hat jemand von Euch ja ne Idee