繁体   English   中英

从CreateProcess获取PROCESS_INFORMATION

[英]Get PROCESS_INFORMATION from CreateProcess

我试图从exe的CreateProcessW获取PROCESS_INFORMATION。
我在做什么是通过将jmp放置到它向我的函数跳转的字节的位置来挂接电话,然后我以与在exe中完成操作相同的方式来调用CreateProcessW
然后我试图捕获/记录数据
然后我跳回去继续exe中的内容

我的问题是它没有正确记录PROCESS_INFORMATIONProcessId与创建的进程的PID不相同

这是即时贴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

然后这是我的函数它被称为一个进程被创建,只是ProcessId与创建的进程不同

__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];
    }
}

我最终解决了这个问题

我所做的就是发现ESP的数据存储在何处

然后,我创建了一个类来保存我需要放置一个空位以将其跳转到我需要的位置的数据BYTE void[0xAddress];

然后,我将数据移到类MOV pClass, ESP;

还有其他方法可以做到这一点,但这就是我可以解决的问题

谢谢你的帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM