【问题标题】: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 中执行这些操作,这样我就不必在类型转换和所有这些方面搞砸了。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多