挂接ntdll.dll调用时出现问题

Problem with hooking ntdll.dll calls

本文关键字:问题 调用 ntdll dll 挂接      更新时间:2023-10-16

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

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

我决定通过PasteBin发布代码,因为这篇文章相当大。以下是链接:http://pastebin.com/39r4Me6B

我试图挂接ZwOpenKey,然后记录关键内容,然后通过指针启动"true"函数。函数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中这样做,这样我就不必在类型铸造之类的事情上太麻烦了。希望这能有所帮助。