我试图从exe中获取CreateProcessW的PROCESS_INFORMATION
我正在做的是通过在一个nopping字节的位置放置一个jmp来挂钩调用
它对我的功能有所帮助
然后我回忆起CreateProcessW与它在exe中完成的方式相同
然后我试图捕获/记录数据
然后我回来继续exe中的东西
我的问题是它没有正确记录PROCESS_INFORMATION
ProcessId
与创建的流程的PID
不同
这是我挂钩的功能 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与创建的进程
不同__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 :(得分:0)
我最终解决了这个问题
我所做的是我在ESP
中找到了存储数据的位置
然后我创建了一个类来保存我需要的数据,将jmp放到我需要的位置
BYTE void[0xAddress];
然后我将数据移到我的班级
MOV pClass, ESP;
还有其他方法可以做到这一点 但这就是我可以解决的问题
感谢您的帮助