Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Do 06.03.08 22:33 
Ich erstelle einen Prozess und möchte gleich darauf eine DLL mit der uall Collection injecten
Hier der Code
ausblenden 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'NilNil, 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 user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 06.03.2008 um 21:38
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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)?

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Tobi482
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 135



BeitragVerfasst: 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
ausblenden 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
ausblenden Delphi-Quelltext
1:
     InjectDLL(flb.FileName, ProcInfo.dwProcessId);					


Zu 3. und jetzt erst laufen lassen
ausblenden Delphi-Quelltext
1:
     ResumeThread(ProcInfo.hThread);					


Mit freundlichen Grüßen
Tobi
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: 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