Entwickler-Ecke
Windows API - Zugriff verweigert bei InjectLibrary
Flamefire - Do 06.03.08 22:33
Titel: Zugriff verweigert bei InjectLibrary
Ich erstelle einen Prozess und möchte gleich darauf eine DLL mit der uall Collection injecten
Hier der Code
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var siLoader: TStartupInfo; piLoader: TProcessInformation; i,start:Integer; begin FillChar(siLoader, SizeOf(siLoader), 0); FillChar(piLoader, SizeOf(piLoader), 0); if (not CreateProcess(nil, 'C:\Programme\prozess.exe', Nil, Nil, False, CREATE_SUSPENDED, Nil, 'C:\Programme\', siLoader, piLoader)) then begin raise Exception.Create('couldn''t create process...'); end else begin ResumeThread(piLoader.hProcess); ResumeThread(piLoader.hThread); Sleep(200); InjectLibrary(piLoader.hProcess,'C:\Programme\test.dll'); |
Ich erhalte aber (mit syserrormessage) eine Fehlermeldung: Zugriff verweigert. Bei nem eigen-erstellten Prozess
UND: Wenn ichs aus dem Delphi-Compiler (F9) heraus ausführe klappts!
Wie kann das sein?
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 06.03.2008 um 21:38
Martok - Fr 07.03.08 00:05
Bei der Sache, dass es aus der IDE raus geht, tippe mal auf vererbte Rechte.
Was für ein OS hast du, und als was für ein User bist du angemeldet (Admin/Eingeschränkt)?
Tobi482 - Fr 07.03.08 14:36
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
Flamefire - Mo 10.03.08 18:33
nein der prozess hat keinerlei schutz gegen fremdstarten, was auch normalerweise prima funktioniert
sonst konnte ich DLLs immer auch mit Openprocess und so in diesen prozess injecten
aber ich versuch mal die dll zu injecten bevor der prozess resumed wird
hab WINXP SP2 und adminrechte
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!