挂钩ntdll.dll调用的问题

时间:2011-06-10 11:10:57

标签: c++ windows winapi system system-calls

我正在通过dll注入挂钩ntdll.dll调用。 首先,我通过CreateRemoteThread()在现有流程中创建线程,然后通过LoadLibrary加载我的dll,最后挂钩PROCESS_ATTACH上的调用。

注入工作正常,但后来我想记录所有注册表和文件系统查询。问题是它无法正常工作。

我决定通过PasteBin发布代码,因为片段非常大。链接在这里: http://pastebin.com/39r4Me6B

我正在尝试挂钩ZwOpenKey,然后记录密钥内容,然后通过指针启动“true”函数。函数NOpenKey被执行,但进程停止而没有任何错误。

有没有人看到任何问题?

1 个答案:

答案 0 :(得分:2)

如果您使用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

我通常在装配中执行这些操作,因为我不需要使用类型转换和所有这些来解决这些问题。希望这会有所帮助。