我正在通过dll注入挂钩ntdll.dll调用。
首先,我通过CreateRemoteThread()
在现有流程中创建线程,然后通过LoadLibrary
加载我的dll,最后挂钩PROCESS_ATTACH
上的调用。
注入工作正常,但后来我想记录所有注册表和文件系统查询。问题是它无法正常工作。
我决定通过PasteBin发布代码,因为片段非常大。链接在这里: http://pastebin.com/39r4Me6B
我正在尝试挂钩ZwOpenKey
,然后记录密钥内容,然后通过指针启动“true”函数。函数NOpenKey
被执行,但进程停止而没有任何错误。
有没有人看到任何问题?
答案 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
我通常在装配中执行这些操作,因为我不需要使用类型转换和所有这些来解决这些问题。希望这会有所帮助。