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.html

    Ich 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 weiter

    mfg



  • 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.Buffer

    ReadProcessMemory(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


Anmelden zum Antworten