Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Получение парамтеров запуска зная Pid (https://forum.antichat.xyz/showthread.php?t=50408)

slesh 03.10.2007 17:26

Получение парамтеров запуска зная Pid
 
Сталкнулся с такой проблемой. Вот к примеру я знаю Pid процесса, как можно узнать параметры переданные этому процессу при запуске. Вообще в какую сторону копать?

a1ex 03.10.2007 17:32

У мну де-то программка была, которая узнавала параметры переданные процессу ну и не только...
Вообщем покопаюсь, если найду то выложу.;)

LEE_ROY 03.10.2007 18:22

перехватывать нужно CreateProcessW, внутри нее параметр - lpCommandLine считывай, это параметры ком.строки

Код:

BOOL WINAPI CreateProcess(
  __in          LPCTSTR lpApplicationName,
  __in_out      LPTSTR lpCommandLine,
  __in          LPSECURITY_ATTRIBUTES lpProcessAttributes,
  __in          LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in          BOOL bInheritHandles,
  __in          DWORD dwCreationFlags,
  __in          LPVOID lpEnvironment,
  __in          LPCTSTR lpCurrentDirectory,
  __in          LPSTARTUPINFO lpStartupInfo,
  __out        LPPROCESS_INFORMATION lpProcessInformation
);


KEZ 03.10.2007 18:41

гыгыгы люблю античатовских кодеров

"как показать месагбокс?" - "перехватывай swapcontext, находи там потоки explorer, по нему explorer.exe, потом таблицу импорта, выдирай оттуда адрес MessageBoxA, копируй через IoAllocateMdl драйвером в свой процесс и запускай..."

если посмотреть на GetCommandLineA, можно заметить
Цитата:

7C812C8D > A1 F435887C MOV EAX,DWORD PTR DS:[7C8835F4]
7C812C92 C3 RETN
инфа хранится в PEB, открывай процесс по PID и читай оттуда все что хочешь, включая его STARTUPINFO и command line

KEZ 03.10.2007 19:11

Вообще, по хорошему, надо использовать
ZwQueryInformationProcess(), но т.к. вам это все равно не обьяснишь, придется сделать так:
(наверное для всех WinNT)

Код:

#define PID 1072 // PID of target process

static LPSTR szGetCommandLineA = "GetCommandLineA";
static LPSTR szKernel32 = "kernel32.dll";
static ULONG uRead;
static ULONG uCmdLineAddr;

LPSTR __declspec(naked) __stdcall getCommandLineProcess( ULONG uPid ) {

        __asm {
                push ebp
                mov ebp, esp
                call dword ptr [GetProcessHeap]
                push MAX_PATH
                push HEAP_ZERO_MEMORY
                push eax
                call dword ptr [HeapAlloc] // allocate heap
                mov edi, eax
                push dword ptr [uPid]
                push 0
                push PROCESS_VM_READ
                call dword ptr [OpenProcess] // open process
                test eax, eax
                jz err
                mov ebx, eax
                push szKernel32
                call dword ptr [GetModuleHandle]
                push szGetCommandLineA
                push eax
                call dword ptr [GetProcAddress] // get addr of GetCommandLineA
                mov eax, dword ptr [eax+1]      // get operand of [GetCommandLineA] first instruction (mov eax, [...])
                push offset uRead
                push 4
                push offset uCmdLineAddr
                push eax
                push ebx
                call dword ptr [ReadProcessMemory] // read address of command line string
                push offset uRead
                push MAX_PATH
                push edi
                push dword ptr [uCmdLineAddr]
                push ebx
                call dword ptr [ReadProcessMemory] // read command line
                pop ebp
                jmp e
err:
                and eax, 0 // error
e:
                mov eax, edi // ok
                retn 4
        }
}

LPSTR szCmdLine = getCommandLineProcess( PID );
MessageBox( 0,
                szCmdLine,
                "Cmd line of process",
                MB_ICONINFORMATION );
HeapFree( GetProcessHeap(), 0, szCmdLine );



Время: 03:50