2014-05-01 3 views
1

임 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]; 
    } 
} 
+0

'CreateProcessW'는'PROCESS_INFORMATION'에 대한 포인터를 취합니다. 이 포인터를 찾을 필요가 있습니다 (CreateProcessW의 10 번째 매개 변수이므로 후크가 제어 될 때 [esp]에 있어야합니다). 그런 다음 역 참조하십시오. – Inspired

+0

나는 그것을 ollybdg에서'[ESP + 0x1C]' 에서 찾았지만 내 'PROCESS_INFOMATION' 객체에 복사하는 법을 알지 못했습니다. MOV ProcessInformation, [ESP + 0x1C]; didnt work – Nathan

+0

[esp + 0x1c]에서 CreateProcessW가 어떻게 10 번째 매개 변수를 찾을 수 있는지 알지 못합니다. 어쨌든, 그것은 포인터입니다. 그러므로'PROCESS_INFORMATION * ppi;'와'mov ppi, [esp + 0xWhatever]'를 정의한 다음 ppi-> dwProcessId를 기록해야합니다. – Inspired

답변

0

나는

을이 밖으로 작동 결국 내가 내 클래스로 데이터를 이동 그때 BYTE void[0xAddress];

를 필요한 위치로 JMP 할 수있는 공간을 배치하여 필요 ESP에 데이터가

을 저장했다 어디 다음 데이터를 보유하는 클래스를 만들어 발견 MOV pClass, ESP;

가이 을하는 다른 방법이 있습니다하지만 내가 당신의 도움

위해

감사 힙을 작업 할 GET을 일할 수있는 것입니다

관련 문제