【问题标题】:Problem with hooking ntdll.dll calls挂钩 ntdll.dll 调用的问题
【发布时间】:2011-09-12 10:15:39
【问题描述】:
我目前正在通过 dll 注入挂钩 ntdll.dll 调用。
首先,我通过CreateRemoteThread() 在现有进程中创建线程,然后通过LoadLibrary 加载我的dll,最后在PROCESS_ATTACH 上挂钩调用。
注入工作正常,但我想记录所有注册表和文件系统查询。问题是它不能正常工作。
我决定通过 PasteBin 发布代码,因为代码块很大。链接在这里:
http://pastebin.com/39r4Me6B
我正在尝试挂钩ZwOpenKey,然后记录关键内容,然后通过指针启动“true”函数。函数NOpenKey 被执行,但进程停止,没有任何错误。
有没有人发现任何问题?
【问题讨论】:
标签:
c++
windows
winapi
system
system-calls
【解决方案1】:
如果您使用 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 中执行这些操作,这样我就不必在类型转换和所有这些方面搞砸了。希望这会有所帮助。