[已解决]WIN64上内核挂钩Zw(Nt)CreateFile的怪现象
无论是SSDT HOOK ZwCreateFile,还是INLINE HOOK NtCreateFile,即使在代理函数里直接调用原函数并返回,都会出现问题。状况为:全部返回一样的失败值,前者貌似是“参数不正确”,后者貌似是“拒绝访问”。但是INLINE HOOK IopCreateFile无此现象(我的WIN64AST里用的就是INLINE HOOK IopCreateFile实现禁止创建文件)。
有人可能认为是句柄的关系,但是HOOK同样需要句柄NtTerminateProcess就没有此现象。
大家说说是什么原因?
2012-05-31:
问题已由某高校研究生WatchSky解决,经WatchSky本人同意,附上无错代码。 函数地址不正确?被人hook过了? watchsky 发表于 2012-5-29 14:18 static/image/common/back.gif
函数地址不正确?被人hook过了?
应该不是 ssdt HOOK有没有可能在GetOffsetAddress里或是其他什么地方,抹掉了参数信息?ZwCreateFile的参数比较多,另外换地址的时候改成原子操作能保险点 watchsky 发表于 2012-5-30 14:26 static/image/common/back.gif
ssdt HOOK有没有可能在GetOffsetAddress里或是其他什么地方,抹掉了参数信息?ZwCreateFile的参数比较多, ...
感觉更加不可能。
如果是这样的话,参数更加多的IopCreateFile为什么没事呢? 是ssdt表里函数地址的低四位,有人说这个是存放参数个数的,当然我没验证过 M。。真的來試看看 一直调试这个函数,郁闷,又是楼主这里发现他有问题的。纠结了很长的时间!!!
内联hook 跳到自己的函数之后,所有的操作都正常,然后,复位原来的函数时,第一条指令
fffff800`01b88400 4c8bdc mov r11,rsp
执行了就 跳到系统异常中断,然后,就蓝屏了。
求解决~ 蓝屏代码是 0x000000fc 也是有同樣問題, 但權限不足。看不到 kk1025 发表于 2013-6-7 22:00 static/image/common/back.gif
也是有同樣問題, 但權限不足。看不到
你发一个原创技术贴就有权限了,懂? Tesla.Angela 发表于 2013-6-7 23:16 static/image/common/back.gif
你发一个原创技术贴就有权限了,懂?
謝謝大大, 因為一直試不出來所以還沒法有所謂的原創 kk1025 发表于 2013-6-8 11:02 static/image/common/back.gif
謝謝大大, 因為一直試不出來所以還沒法有所謂的原創
任何类型的『技术原创帖』均可,不是非要WINDOWS底层相关的帖子。 Tesla.Angela 发表于 2013-6-7 23:16 static/image/common/back.gif
你发一个原创技术贴就有权限了,懂?
謝謝版大, 看到了,但有一個問題請教,要找NtCreateFile index ,為何是用ZwTerminateProcess+0x15, 那個0x15怎麼算來的呢~~ kk1025 发表于 2013-6-18 22:43 static/image/common/back.gif
謝謝版大, 看到了,但有一個問題請教,要找NtCreateFile index ,為何是用ZwTerminateProcess+0x15, 那個 ...
我电脑上的WINDBG坏了。。。
没记错的话,ntdll!ZwTerminateProcess+0x15正好是NtTerminateProcess的INDEX。 Tesla.Angela 发表于 2013-7-11 21:31 static/image/common/back.gif
我电脑上的WINDBG坏了。。。
没记错的话,ntdll!ZwTerminateProcess+0x15正好是NtTerminateProcess的IND ...
謝謝大大,再請教一下, 那為何是NtCreateFile = ntdll!ZwTerminateProcess+0x15 kk1025 发表于 2013-7-13 17:51 static/image/common/back.gif
謝謝大大,再請教一下, 那為何是NtCreateFile = ntdll!ZwTerminateProcess+0x15
昨天解释错了,应该是:
nt!NtTerminateProcess的INDEX=*(PULONG)((PUCHAR)nt!ZwTerminateProcess+0x15)。
至于为什么,看WINDBG。 Tesla.Angela 发表于 2013-7-14 01:41 static/image/common/back.gif
昨天解释错了,应该是:
nt!NtTerminateProcess的INDEX=*(PULONG)((PUCHAR)nt!ZwTerminateProcess+0x15) ...
感謝大大。這段我完全了解, 我唯一不了解的是
index = SYSCALL_INDEX(ZwTerminateProcess);//明明找出來的是NtTerminateProcess的index
NtCreateFile=(NTCREATEFILE)GetSSDTFuncCurAddr(index);//為何是把NtTerminateProcess的index當成NtCreateFile的index用 功力真的有差,原來是要這樣調整才行,
页:
[1]