Hi,
sieht für mich etwas seltsam aus
Wenn du eine DLL in einen Prozess injektieren willst, (mir fällt dabei
immer nur der eine Grund ein für das "Warum?" und dir sicherlich auch^^)
muss dafür gesorgt werden, dass der Prozess selber nicht merkt, dass
er von dir gestartet wurde (nur falls er das auch überprüft, was deiner sicherlich macht^^)
Dazu hookt man am besten ShellExecute des originalen Starter.
Dann sollten folgende Schritte in richtiger Reihenfolge abgearbeitet werden
1. Prozess erstellen aber noch nicht laufen lassen
2. DLL Injektion
3. Prozess laufenlassen
Zu 1 sollte das ganze so aus sehen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| ZeroMemory(@StartInfo, Sizeof(TStartupInfo)); StartInfo.cb := SizeOf(StartInfo); StartInfo.wShowWindow := SW_SHOW; StartInfo.dwFlags := STARTF_USESHOWWINDOW;
hostapp := ExtractFileDir(Application.ExeName) + '\XXX.exe';
CreateOK := CreateProcess( nil, pchar(hostapp), nil, nil, false, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);
if CreateOK = False then begin Showmessage('XXX.exe konnte nicht gestartet werden'); exit; end; |
Zu 2. hier kommt die Injektion
Delphi-Quelltext
1:
| InjectDLL(flb.FileName, ProcInfo.dwProcessId); |
Zu 3. und jetzt erst laufen lassen
Delphi-Quelltext
1:
| ResumeThread(ProcInfo.hThread); |
Mit freundlichen Grüßen
Tobi