首页
社区
课程
招聘
[原创]注册表文件解析完整解决方案
发表于: 2010-6-26 23:46 34683

[原创]注册表文件解析完整解决方案

2010-6-26 23:46
34683

UESTC 鹿剑
开始是看大米的那个增删改方案,不过,由于好多GUI处理干扰,头很大,最后到网上找到了下面这个库,大米那个其实就是基于这个改写的,最近要用到这个,所以好好看了看,做了良好的封装,支持几乎所有操作:
枚举子键、枚举键值,修改、删除、增加键值、子键,关键是接口良好,移植使用相当方便,就算不懂注册表格式的程序员移植也很简单。
注册表格式虽然已经可以找到相对完整资料,但是自己来解析的话难度还是有难度,现今比较完整的资料都是英文,这个对于英文不太好的同学来说是个不小的挑战,另外要读懂那些资料然后自己写出完整代码来也不是一件容易的事,最简单的做法就是在前人的代码上来进行二次开发。网上比较完整的资料就是这个了:
NTREG - Window registry file reader / writer library
作者是 Petter Nordahl-Hagen.
下载地址可以使用谷歌搜索引擎来获取,输入关键字Ntreg.h之后前几页都是,请不要使用百度,然后找不到时问我要下载地址,相信外事问谷歌,内事问百度这句话你还是知道的。下载回来之后一般直接编译成静态库就可以了,附件里有我编译好的静态库。原作者的代码是使用运行时C写的,所以在使用时请使用extern “C” 包含头文件。废话不多说,接下来正式编程,首先遇到的问题是访问被系统独占的文件,XP下可以枚举系统句柄表,DuplicateHandle句柄过来,原因就是xp下可以用复制句柄权限打开system进程,到了Windows7下就完全不行了,用复制句柄权限无法打开system进程(我很意外,为什么资源监视器还是能看到system进程打开的文件呢?自己逆向水平太差了,没本事去分析资源监视器,还望高手指点一二^_^),所以为了通用,我写了一个驱动来实现句柄权限修改,都到了驱动,可以访问注册表文件的方法很多了,直接使用驱动读写文件等等,我之所以选择修改句柄权限的方法是因为方法稳定,比较简单,首先获取进程句柄表,遍历句柄表,找到目标句柄,修改权限,为了通用(其实是我也真的不知道到底那个权限域和SDK里面的权限对应关系),用户态传入两个句柄,目标句柄会获取到源句柄相同的访问权限,这样就不需要关心在各个系统下SDK里面的权限和句柄对象权限的对应关系了,我也没有能力像别人一样实现句柄表的手工解析,资料倒是很多,读起来头大,我又比较懒,所以使用系统提供的ExEnumHandleTable函数了,一句足以搞定,手动解析还要分层次,麻烦。驱动代码大致如下:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 8
支持
分享
最新回复 (45)
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
2
支持vista不?
2010-6-27 01:05
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持,多谢分享
2010-6-27 02:33
0
雪    币: 284
活跃值: (106)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
4
解析部分完全支持Windows 7 vista 等等,只是那个修改权限的驱动,获取进程句柄表的那行代码需要修改而已,自己已经在Windows7下测试过了,完全没有问题,因为注册表解析库使用的是最新版本……
2010-6-27 11:52
1
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
这个必须支持~
2010-6-27 16:52
0
雪    币: 466
活跃值: (175)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
6
打个标签备用
2010-6-27 17:35
0
雪    币: 97697
活跃值: (200839)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
Support.
2010-6-27 17:59
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最近论坛很少进货,支持个
2010-6-27 18:32
0
雪    币: 363
活跃值: (338)
能力值: ( LV15,RANK:310 )
在线值:
发帖
回帖
粉丝
9
不错!支持下!
2010-6-27 21:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
嗯。支持,学习中。
2010-6-28 11:55
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
11
支持,顺便提供我找到的资源:
http://pogostick.net/~pnh/ntpasswd/
上传的附件:
2010-6-28 12:04
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
12
学习下这个改句柄权限的
2010-6-28 13:47
0
雪    币: 255
活跃值: (49)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
13
感谢分享 ^_^
2010-7-1 13:02
0
雪    币: 324
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
UESTC.....DING
2010-7-1 21:04
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
谢谢楼主,学习一下。
2010-7-2 15:01
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
最后一个问题,就是中文乱码,提一个解决办法(试试)

我最近在用VS2005的VC++编程,默认情况下,是支持Unicode。

能不能在这相环境下编程,但楼主提供的源码就要进行unicode方面的修改。

如果有一天我也要用到这方面的编程,我会利用楼主提供的代码进行修改。
2010-7-2 15:06
0
雪    币: 284
活跃值: (106)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
17
没有这么简单,我的开发环境就已经是vs2008了,并且整个工程都是UNICODE,很奇怪,所有键值名字,子健名字,如果是英文就是ascii的char,如果是中文却是 UNICODE,如果中英混合,就更混乱了……
2010-7-2 15:33
0
雪    币: 387
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
18
strong, powerful
2010-7-2 16:28
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
想当年我第一次到实验室的项目就是HIVE文件解析..怀念啊...
2010-7-2 18:48
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
windows7的system进程是有点奇怪
2010-7-5 11:21
0
雪    币: 234
活跃值: (83)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
21
好东西,学习加收藏。。。
2010-7-5 13:14
0
雪    币: 320
活跃值: (283)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
22
mark之 顶楼主
2010-7-5 14:40
0
雪    币: 287
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
RegEdit.rar大家都编译通过了吗?怎么没人提出疑问
2010-7-6 16:33
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
看一下源码,看看是怎么实现的
2010-7-10 21:25
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
访问被系统独占的文件在用户级可以绕过句柄保护的
2010-7-10 23:36
0
游客
登录 | 注册 方可回帖
返回
//