| 
					阅读:4078回复: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啊				 | |
 
							
 
				
 
				