2011-06-10 119 views
1

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

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

我决定通过PasteBin发布代码,因为piece很大。这里是链接: http://pastebin.com/39r4Me6B

我想挂钩ZwOpenKey,然后记录关键内容,然后启动“真”功能的指针。函数NOpenKey被执行,但进程停止没有任何错误。

有没有人看到任何问题?

回答

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 

我通常在Assembly中这样做,我不必在类型转换和所有这些方面混乱很多。希望这可以帮助。