我正在尝试从 exe 的 CreateProcessW 获取 PROCESS_INFORMATION。
我正在做的是通过在 nopping 字节的位置放置一个 jmp 来 Hook 调用
它跳转到我的功能
然后我记忆起 CreateProcessW,就像在 exe 中完成的一样
然后我试图捕捉/记录数据
然后我跳回去继续exe中的东西
我的问题是它没有正确记录 PROCESS_INFORMATION
ProcessId
与创建进程的 PID
不同
这是我 Hook 的功能 http://i.stack.imgur.com/tFZRn.png
然后我放置钩子(Hook)/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 与创建的进程不同 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
中的存储位置
然后我制作了一个类来保存我需要的数据,并放置了一个 void 以跳转到我需要的位置
BYTE void[0xAddress];
然后我将数据移到我的类中
MOV pClass, ESP;
还有其他方法可以做到这一点 但这是我可以解决的问题
谢谢你的帮助
关于c - 从 CreateProcess 获取 PROCESS_INFORMATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23406751/