找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 12938|回复: 18

[已解决]WIN64上内核挂钩Zw(Nt)CreateFile的怪现象

 火.. [复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2012-5-29 12:42:37 | 显示全部楼层 |阅读模式
无论是SSDT HOOK ZwCreateFile,还是INLINE HOOK NtCreateFile,即使在代理函数里直接调用原函数并返回,都会出现问题。状况为:全部返回一样的失败值,前者貌似是“参数不正确”,后者貌似是“拒绝访问”

但是INLINE HOOK IopCreateFile无此现象(我的WIN64AST里用的就是INLINE HOOK IopCreateFile实现禁止创建文件)。

有人可能认为是句柄的关系,但是HOOK同样需要句柄NtTerminateProcess就没有此现象。

大家说说是什么原因?


2012-05-31:
问题已由某高校研究生WatchSky解决,经WatchSky本人同意,附上无错代码。

watchsky_code.rar

5.79 KB, 阅读权限: 30, 下载次数: 5

售价: 2 水晶币  [记录]

4

主题

183

回帖

3

精华

钻石会员

积分
4965
发表于 2012-5-29 14:18:33 | 显示全部楼层
函数地址不正确?被人hook过了?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2012-5-29 21:06:49 | 显示全部楼层
watchsky 发表于 2012-5-29 14:18
函数地址不正确?被人hook过了?

应该不是

4

主题

183

回帖

3

精华

钻石会员

积分
4965
发表于 2012-5-30 14:26:01 | 显示全部楼层
ssdt HOOK有没有可能在GetOffsetAddress里或是其他什么地方,抹掉了参数信息?ZwCreateFile的参数比较多,另外换地址的时候改成原子操作能保险点

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2012-5-31 10:42:30 | 显示全部楼层
watchsky 发表于 2012-5-30 14:26
ssdt HOOK有没有可能在GetOffsetAddress里或是其他什么地方,抹掉了参数信息?ZwCreateFile的参数比较多, ...

感觉更加不可能。

如果是这样的话,参数更加多的IopCreateFile为什么没事呢?

4

主题

183

回帖

3

精华

钻石会员

积分
4965
发表于 2012-5-31 11:16:00 | 显示全部楼层
是ssdt表里函数地址的低四位,有人说这个是存放参数个数的,当然我没验证过

评分

参与人数 1水晶币 +100 收起 理由
admin + 100 解决问题

查看全部评分

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-11 16:38:30 | 显示全部楼层
M。。真的來試看看

4

主题

58

回帖

0

精华

铜牌会员

积分
248
发表于 2013-4-28 13:19:51 | 显示全部楼层
一直调试这个函数,郁闷,又是楼主这里发现他有问题的。纠结了很长的时间!!!

内联hook 跳到自己的函数之后,所有的操作都正常,然后,复位原来的函数时,第一条指令
fffff800`01b88400 4c8bdc          mov     r11,rsp
执行了就 跳到系统异常中断,然后,就蓝屏了。
求解决~

4

主题

58

回帖

0

精华

铜牌会员

积分
248
发表于 2013-4-28 13:22:05 | 显示全部楼层
蓝屏代码是 0x000000fc

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-6-7 22:00:54 | 显示全部楼层
也是有同樣問題, 但權限不足。看不到

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2013-6-7 23:16:19 | 显示全部楼层
kk1025 发表于 2013-6-7 22:00
也是有同樣問題, 但權限不足。看不到

你发一个原创技术贴就有权限了,懂?

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-6-8 11:02:29 | 显示全部楼层
Tesla.Angela 发表于 2013-6-7 23:16
你发一个原创技术贴就有权限了,懂?

謝謝大大, 因為一直試不出來所以還沒法有所謂的原創

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2013-6-11 20:30:23 | 显示全部楼层
kk1025 发表于 2013-6-8 11:02
謝謝大大, 因為一直試不出來所以還沒法有所謂的原創

任何类型的『技术原创帖』均可,不是非要WINDOWS底层相关的帖子。

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-6-18 22:43:53 | 显示全部楼层
Tesla.Angela 发表于 2013-6-7 23:16
你发一个原创技术贴就有权限了,懂?


謝謝版大, 看到了,但有一個問題請教,要找NtCreateFile index ,為何是用ZwTerminateProcess+0x15, 那個0x15怎麼算來的呢~~

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2013-7-11 21:31:53 | 显示全部楼层
kk1025 发表于 2013-6-18 22:43
謝謝版大, 看到了,但有一個問題請教,要找NtCreateFile index ,為何是用ZwTerminateProcess+0x15, 那個 ...

我电脑上的WINDBG坏了。。。

没记错的话,ntdll!ZwTerminateProcess+0x15正好是NtTerminateProcess的INDEX。

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-7-13 17:51:12 | 显示全部楼层
Tesla.Angela 发表于 2013-7-11 21:31
我电脑上的WINDBG坏了。。。

没记错的话,ntdll!ZwTerminateProcess+0x15正好是NtTerminateProcess的IND ...

謝謝大大,再請教一下, 那為何是NtCreateFile = ntdll!ZwTerminateProcess+0x15

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2013-7-14 01:41:23 | 显示全部楼层
kk1025 发表于 2013-7-13 17:51
謝謝大大,再請教一下, 那為何是NtCreateFile = ntdll!ZwTerminateProcess+0x15


昨天解释错了,应该是:
nt!NtTerminateProcess的INDEX=*(PULONG)((PUCHAR)nt!ZwTerminateProcess+0x15)。
至于为什么,看WINDBG。

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-7-14 21:57:13 | 显示全部楼层
Tesla.Angela 发表于 2013-7-14 01:41
昨天解释错了,应该是:
nt!NtTerminateProcess的INDEX=*(PULONG)((PUCHAR)nt!ZwTerminateProcess+0x15) ...

感謝大大。這段我完全了解, 我唯一不了解的是
index = SYSCALL_INDEX(ZwTerminateProcess);//明明找出來的是NtTerminateProcess的index
NtCreateFile=(NTCREATEFILE)GetSSDTFuncCurAddr(index);//為何是把NtTerminateProcess的index當成NtCreateFile的index用

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-7-28 23:19:07 | 显示全部楼层
功力真的有差,原來是要這樣調整才行,
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表