Kommandozeilen Argumente von anderem Prozess ändern
-
Hallo Leute,
also ich hab folgendes Problem:
Mein Programm braucht ein zusätzliches Programm welches als .exe in den Resourcen liegt.
Um diese .exe auszuführen ohne sie auf die Festplatte zu schreiben benutz ich diese Technik: www.security.org.sg/code/loadexe.htmlIch erstelle mit CreateProcess also einen neuen Prozess von irgendeiner .exe im
SUSPENDED Mode, schreibe dort dann die .exe aus den Resourcen rein und RESUME dann
den Prozess.Ich möchte dem Programm allerdings Kommandozeilen Argumente übergeben und komm einfach nicht drauf wie ich das machen kann

Wenn ich den ursprungs Prozess mit welchen erstelle bekommt sie das eigentliche Programm ( das aus den Resourcen ) nicht, wahrscheinlich weil ich das ursprungs Programm vor dem überschreiben mit dem Programm aus den Resourcen aus dem Speicher entferne...
Wär sehr Dankbar für jede Hilfe

mfg
-
*push*
Keiner eine Antwort?
-
struct RTL_USER_PROCESS_PARAMETERS { // PEB->ProcessParameters ULONG MaximumLength; ULONG Length; ULONG Flags; ULONG DebugFlags; PVOID ConsoleHandle; ULONG ConsoleFlags; HANDLE StdInputHandle; HANDLE StdOutputHandle; HANDLE StdErrorHandle; UNICODE_STRING CurrentDirectoryPath; HANDLE CurrentDirectoryHandle; UNICODE_STRING DllPath; UNICODE_STRING ImagePathName; UNICODE_STRING CommandLine; ...Ich sehe was zu tun ist, und Du?
-
Super, vielen Dank

Mehr brauch ich gar nicht, von da an gehts (denk ich jedenfalls mal) alleine weitermfg
-
Also ich brauch trotzdem nochmal Hilfe..
Ich kann bei meinem eigenen Prozess jetzt die CommandLine auslesen, ABER wenn ich einen anderen Prozess auslesen will funktionierts nicht.
Und zwar, wenn ich CommandLine.Buffer auslesen will geht das nicht, und er meint was vonwegen "Only part of a ReadProcessMemory or WriteProcessMemory request was completed."
Read ProcessMemory hat in der Tat 0 Bytes gelesen, CommandLine.Length ist aber richtig ausgelesen worden
Hier ist mein Code, ich hab kA was ich da noch machen soll..
CreateProcess( "coutArgv.exe", "test" , NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi); HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pi.dwProcessId); // GetCurrentProcessId() NTSTATUS dwStatus = gNtQueryInformationProcess(hProcess,0,basicInfo,sizeof(smPROCESS_BASIC_INFORMATION),NULL); if(true) // dwStatus > 0 { smPEB peb; if(basicInfo->PebBaseAddress) if(ReadProcessMemory(hProcess, basicInfo->PebBaseAddress, &peb, sizeof(peb), NULL)) { smRTL_USER_PROCESS_PARAMETERS peb_upp; ReadProcessMemory(hProcess, peb.ProcessParameters, &peb_upp, sizeof(peb_upp), NULL); cout << "LastError() " << GetLastError() << endl; // hier noch 0 ReadProcessMemory(hProcess, peb_upp.CommandLine.Buffer, &buf, peb_upp.CommandLine.Length, &r); cout << "LastError() " << GetLastError() << endl; // hier 299 cout << "Read: " << r << endl; // ist hier 0 } }Schon mal vielen Dank

mfg
-
Schaumal was setzt in peb_upp.CommandLine.Buffer. Ich sehe 0x498 (0x10000=UmgebungVars), also das mußt ein offset sein:
pointer = RTL_USER_PROCESS_PARAMETERS* + CommandLine.BufferReadProcessMemory(hProcess, peb_upp.CommandLine.Buffer + peb.ProcessParameters,Bis jetzt ist alles gut, aber wozu OpenProcess gleich nach CreateProcess?
-
Juhu, das klappt

Das OpenProcess hab ihc nur gemacht weils mit CreateProcess und dem Handle aus pi nicht gegangen ist, dachte das liegt vll da dran

Vielen Dank für eure Hilfe, is echt ein top Forum, zumal man nichtmal zum registrieren gezwungen wird wenn man mal eben eine
Frage hat und es wird einem eigentlich immer und kompetent geholfen
mfg
P.S: Mal schaun ob ich nochmal Hilfe brauch, aber ich hoff nicht