挂钩ntdll.dll调用的问题

我目前正在通过DLL注入hook ntdll.dll调用。 首先,我通过CreateRemoteThread()在现有的进程中创build线程,然后通过LoadLibrary加载我的DLL,最后在PROCESS_ATTACH上挂接调用。

注射工作正常,但我想logging所有的registry和文件系统查询。 问题是它不能正常工作。

我决定通过PasteBin发布代码,因为一块很大。 这里是链接: http : //pastebin.com/39r4Me6B

我试图挂钩ZwOpenKey ,然后logging关键内容,然后通过指针启动“真”function。 函数NOpenKey被执行,但进程停止没有任何错误。

有没有人看到任何问题?

如果使用OllyDbg,则ZwOpenKey以5个字节MOV EAX, 77

你可以像JMP _myZwOpenKey那样覆盖这些字节,然后你可以用堆栈中的值做任何事情,恢复所有寄存器,然后做一个JMP 7C90D5B5 ,它是ZwOpenKey地址+5字节。

 CPU Disasm Address Hex dump Command Comments 7C90D5AF 90 NOP 7C90D5B0 /$ B8 77000000 MOV EAX,77 ; ntdll.ZwOpenKey(guessed rg1,Arg2,Arg3) 7C90D5B5 |. BA 0003FE7F MOV EDX,7FFE0300 7C90D5BA |. FF12 CALL DWORD PTR DS:[EDX] 7C90D5BC \. C2 0C00 RETN 0C 

我通常在Assembly中这样做,这样我就不必在类型转换和所有这些方面搞乱了。 希望这可以帮助。