阅读:3901回复:10
Hook ZwCreateKey的问题
有什么有效的办法,可以区分 ZwCreateKey 请求具体是 Create Key 还是 Open Key???
谢谢!! |
|
|
沙发#
发布于:2005-06-04 19:32
我觉得先放它(ZwCreateKey)过去,在返回后判断Disposition的值,决定是创建还是打开比较简单,不知大家还有什么更简单的办法
|
|
|
板凳#
发布于:2005-06-04 19:42
我觉得先放它(ZwCreateKey)过去,在返回后判断Disposition的值,决定是创建还是打开比较简单,不知大家还有什么更简单的办法 如果放过去了就没法控制了。 我测试了,Disposition很多情况下都是NULL。 |
|
|
地板#
发布于:2005-06-06 08:46
也许应该把ZwCreateKey反汇编后看一下,调试一下。
|
|
|
地下室#
发布于:2005-06-06 08:55
[quote]我觉得先放它(ZwCreateKey)过去,在返回后判断Disposition的值,决定是创建还是打开比较简单,不知大家还有什么更简单的办法 如果放过去了就没法控制了。 我测试了,Disposition很多情况下都是NULL。 [/quote] 这回不能再骗大侠的分了,得来点真格的了,否则就so shamed. 我跟了一下瑞星的实现办法,感觉还不错 瑞星hook的是NtCreateKey,但大侠肯定知道ZwCreateKey用不了两句就调用了NtCreateKey。由于NtOpenKey的参数是NtCreateKey子集,所以瑞星开始就调用NtOpenKey,根据它的返回值,如果成功,表明是打开,直接设置NtCreateKey的返回参数返回就可以了,如果失败表明是创建,失败后就再调用NtCreateKey创建 使用上面方法可以达到控制目的,而且由于多数是打开操作,因此上述方法对性能不会产生很大影响。 |
|
|
驱动老牛
|
5楼#
发布于:2005-06-06 09:22
有什么有效的办法,可以区分 ZwCreateKey 请求具体是 Create Key 还是 Open Key??? 自己先用OPENKEY打开就知道是不是要创建了。 |
|
6楼#
发布于:2005-06-06 09:33
问题前天已经搞定了,不过还得多谢几位了。
我的做法是在Hook ZwCreateKey的例程里,先调用ZwOpenKey,如果返回STATUS_SUCCESS,则说明是Open,直接返回。如果ZwOpenKey失败,则说明是Create,调用真实的ZwCreateKey即可。 |
|
|
7楼#
发布于:2005-06-06 09:43
问题前天已经搞定了,不过还得多谢几位了。 英雄所见略同啊 :D |
|
|
8楼#
发布于:2010-11-03 16:47
看了各位看法 发现很有道理 赞一个
|
|
9楼#
发布于:2011-01-05 09:47
也许应该把ZwCreateKey反汇编后看一下,调试一下。
|
|
10楼#
发布于:2011-01-08 12:22
直接看wrk啊
|
|