임 CreateProcessW에서 PROCESS_INFORMATION을 (를) 얻으려고합니다. 나는 그
다음 잡으려고 노력 메신저 exe 인에서 수행 CreateProcessW 같은 방법을 불러 내 기능 에 위치에서 nopping 바이트 그것을 JMPS을 JMP를 배치하여 전화를 후킹한다 뭘 메신저
/데이터를 기록
다음 내가 EXE에서 물건을 계속 다시 JMPPROCESS_INFORMATION에서 CreateProcess
내 문제는 잘 ProcessId
이 생성 된 과정
이의 PID
과 동일하지 않은 PROCESS_INFORMATION
를 기록후킹 기능 메신저 아닙니다이다 그런 다음 6,http://i.stack.imgur.com/tFZRn.png
나는 그것은 호출되는 후크/JMP를
DWORD CreateProcessMidHookAddress = (DWORD)GetModuleHandleA("MyDll.dll") + 0x16F46;
DWORD CreateProcessMidHookRet = (DWORD)GetModuleHandleA("MyDll.dll") + 0x16F56;
placeJMP((BYTE*)CreateProcessMidHookAddress, (DWORD)CreateProcessMidHook, 16); // JMP from loader.dll + 0x16F46 to my function
가 여기에 내 기능 되는 놓습니다 과정은 프로세스 ID가 생성 된 프로세스와 같은 프로세스 ID가 아닌 을 만들어
내가 뭘했던 것은 내가했다__declspec(naked) void CreateProcessMidHook()
{
PROCESS_INFORMATION ProcessInformation;
__asm
{
PUSH EDX; // 52
PUSH EBP; // 55
PUSH 0; // 6A 00
PUSH 5; // 6A 05
PUSH 0; // 6A 00
PUSH 0; // 6A 00
PUSH 0; // 6A 00
PUSH ECX; // 51
PUSH ESI; // 56
CALL EAX; // FF D0 CALLS CreateProcessW
// think problem is here
MOV ProcessInformation, EDX;
PUSHAD;
PUSHFD;
}
// Log function is just like printf, logs to text file
Log("ProcessId : 0x%X \n", ProcessInformation.dwProcessId);
__asm
{
POPFD;
POPAD;
JMP[CreateProcessMidHookRet];
}
}
'CreateProcessW'는'PROCESS_INFORMATION'에 대한 포인터를 취합니다. 이 포인터를 찾을 필요가 있습니다 (CreateProcessW의 10 번째 매개 변수이므로 후크가 제어 될 때 [esp]에 있어야합니다). 그런 다음 역 참조하십시오. – Inspired
나는 그것을 ollybdg에서'[ESP + 0x1C]' 에서 찾았지만 내 'PROCESS_INFOMATION' 객체에 복사하는 법을 알지 못했습니다. MOV ProcessInformation, [ESP + 0x1C]; didnt work – Nathan
[esp + 0x1c]에서 CreateProcessW가 어떻게 10 번째 매개 변수를 찾을 수 있는지 알지 못합니다. 어쨌든, 그것은 포인터입니다. 그러므로'PROCESS_INFORMATION * ppi;'와'mov ppi, [esp + 0xWhatever]'를 정의한 다음 ppi-> dwProcessId를 기록해야합니다. – Inspired