首页
社区
课程
招聘
[求助]ZwQueryKey通过KEY句柄获取项名的一点疑问
发表于: 2011-10-26 09:30 7264

[求助]ZwQueryKey通过KEY句柄获取项名的一点疑问

2011-10-26 09:30
7264
不知道发这里合适不。。。但我还是很想请教这板块的高手啊。。

前段时间学习写了一个REG防护程序,其实就是一个R3的HOOK

我选择HOOK的是ZwSetValueKey

但是程序调用RegSetValueEx时,第一个参数是一个已经打开的句柄

,第二参数是要设置值的名字,而这个句柄通过RegOpenKey,RegCreateKeyEx等指定了标准项和要打开的项名获得,也就是说,通过ZwSetValueKey参数的截取,我无法知道程序修改的具体是哪个是项,只知道句柄,要设置值的名字,和值……

后来百度翻到一个别人的源码,他可以通过ZwQueryKey 在只有句柄的情况下获得项名的

然后用OD简单看了下搬到了自己的程序中
invoke ZwQueryKey,handle,3,eax,255,eax      ;调用ZwQueryKey 3号功能返回KEY项名,参数1为句          柄参数2为功能号  参数3为返回项名的地址 参数4          为最大字节 参数5为实际返回的字节

下面就是我想请教各位的问题了,上面参数 2 那个3号功能,哪里能查到其他功能号的作用呢? MSDN?  我好象没看见。

还有就是上面的参数 3  他返回的是一个结构,结构里的其中一个参数就是宽字符显示的项名,但是,这个返回地址必须是在EXE模块里的地址,不然返回一个错误,忘了说了,我是用DLL注入的方式HOOK的,当程序转到我的函数运行时,通过传来的句柄然后调用ZwQueryKey获取项名的,起初,那个返回地址我是放在DLL里的,结果不行,而单独写一个测试用的程序来却能获取到,凭着两个调用只有地址的不一样的感觉,我在DLL里,就用VirtualAlloc分配一个地址作为返回地址,这个地址在EXE模块内,结果成功返回,这是为什么?。 和权限有关系? 还是说和句柄存储的结构有关系?  还望指点迷津

附一个例子:

比如在一个已经注入DLL的程序中,有以下片段

PUSH      10000030              ;实际返回的字节数  此地址在DLL模块内
PUSH      255                        ;最大字节数
PUSH      10000040              ;返回结构的地址    此地址在DLL模块内
PUSH      3                            ;3号功能
PUSH      [EBP+24]               ;句柄
CALL       ZwQueryKey

如此调用后返回一个C0000005还是80000002给EXE我忘了。。
但是

PUSH      00408000            ;实际返回的字节数  此地址在EXE模块内
PUSH      255                        ;最大字节数
PUSH      00408004             ;返回结构的地址    此地址在EXE模块内
PUSH      3                            ;3号功能
PUSH      [EBP+24]               ;句柄
CALL       ZwQueryKey

这样就成功。。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
http://msdn.microsoft.com/en-us/library/ff567060(VS.85).aspx
2011-10-26 09:37
0
雪    币: 308
活跃值: (230)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
额,好快。谢谢,我看到了

typedef enum _KEY_INFORMATION_CLASS {
  KeyBasicInformation            = 0,
  KeyNodeInformation             = 1,
  KeyFullInformation             = 2,
  KeyNameInformation             = 3,
  KeyCachedInformation           = 4,
  KeyFlagsInformation            = 5,
  KeyVirtualizationInformation   = 6,
  KeyHandleTagsInformation       = 7,
  MaxKeyInfoClass                = 8
} KEY_INFORMATION_CLASS;

= =。。。。为什么当初没看到。。
2011-10-26 09:40
0
游客
登录 | 注册 方可回帖
返回
//