HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Получение парамтеров запуска зная Pid
  #1  
Старый 03.10.2007, 17:26
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию Получение парамтеров запуска зная Pid

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

  #2  
Старый 03.10.2007, 17:32
a1ex
Banned
Регистрация: 11.10.2006
Сообщений: 682
С нами: 10306406

Репутация: 271


По умолчанию

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

  #3  
Старый 03.10.2007, 18:22
LEE_ROY
Постоянный
Регистрация: 09.11.2006
Сообщений: 639
С нами: 10265091

Репутация: 541


По умолчанию

перехватывать нужно 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
);
 
Ответить с цитированием

  #4  
Старый 03.10.2007, 18:41
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
С нами: 11042306

Репутация: 2726


По умолчанию

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

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

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

  #5  
Старый 03.10.2007, 19:11
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
С нами: 11042306

Репутация: 2726


По умолчанию

Вообще, по хорошему, надо использовать
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 );
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.