devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
阅读:6863回复:8

逆向Sysnap的注册表保护驱动【附源码】

楼主#
更多 发布于:2009-06-10 09:23
来自:http://hi.baidu.com/devxa/blog

逆向Sysnap的注册表保护驱动
2009-06-09 17:25

前两天在网上闲逛偶得一款注册表保护软件,个人使用后感觉效果还不错,由于好奇其驱动的实现细节于是拿IDA剁了一把发现其中原理比较巧妙,特拿来和大家分享。先说下保护驱动的总体思路:

1.         获取系统盘在物理磁盘上的扇区偏移量;

2.         查询注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist获取SYSTEM 、SOFTWARE和CURRENTUSER对应的hive文件全路径;

3.         逐一打开各个hive文件,通过FSCTL_GET_RETRIEVAL_POINTERS接口来获取文件运行时分布(其实就是文件所占用的扇区分布图);

4.         Object Hook替换掉磁盘驱动disk.sys的IRP_MJ_WRITE派遣例程

5.         IAT Hook替换掉Atapi.sys驱动IoStartPacket例程的导入地址;

6.         在磁盘驱动disk.sys的IRP_MJ_WRITE的Hook例程和Atapi.sys驱动IoStartPacket的 Hook例程中过滤写请求,根据写请求的磁盘扇区偏移量来判断是否是在操作我们要保护的hive文件,如果是则直接失败返回,否则,放过!

7.         驱动接收上层应用的控制,相应两个IO控制码,一个是打开保护,另外一个是关闭保护;

总体思路就是这样,可以看到我们从这个驱动中可以学习到“磁盘读写方法、内核中注册表操作方法以及IAT Hook和Object Hook”等知识。这其中有一个巧妙地地方:作者直接以失败返回的方式来禁止操作受保护的hive文件,而没有使用重定向机制,起初我认为这样会导致系统不可用,但是后来测试发现由于hive文件通常都不会太大,系统一般都会在系统的Cache中缓存hive文件内容,所以,你会发现上层对hive的更改虽然没有被写入磁盘,但对系统却没有副作用!还有一点需要说明,逆向中发现作者关于读写磁盘部分的代码和机器狗读写磁盘的代码几乎相同,这部分内容可以参照下面这篇文章: [转]机器狗穿透还原的磁盘级文件读写完整驱动代码

这里面有几个特殊地方需要说明:第一,如何获取系统盘在物理磁盘上的扇区偏移量,回答这个问题需要大家去翻翻磁盘分区的相关知识(Google关键词 “MBR”)。驱动首先从物理磁盘0扇区位置读取1个扇区大小(512字节)的MBR区内容,然后从MBR的0x1BE位置开始读取第一个磁盘分区的相关信息(比如:分区的类型、分区所占扇区总数以及分区的开始LBA等关键信息),后而直接读取磁盘获取第一个磁盘分区的*伪MBR区*根据FAT、 FAT32等信息来计算第一个磁盘分区在物理磁盘上的扇区偏移量。第二,作者在获得hive文件运行时分布后是通过一个巨大的静态数组来保存其扇区分布的,所以在理论上存在数组不够用的可能;

最后要说明一点的是,由于作者Blog中发布的驱动在Windows 2000上测试总是蓝屏,后调试发现是在获取hive文件运行时分布时分配的缓冲区过小以及IoCallDriver后对IRP的处理不当引起的,还有在Windows 2000上发现通过ZwQuery接口总是无法获取到 Atapi.sys模块的基址(冰剑也无法获取),后来我改用PsLoadedModuleList方法来获取,所以我对代码总体上做了一部分优化和调整。总体上在2000到Vista(32位x86)系统测试还算正常,不过用到正规的产品中去还有很多工作要做 :-), 下面附上源码共大家交流,在 WDK环境下Build通过!

http://pickup.mofile.com/8427921618447897
人总在矛盾中徘徊。。。
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2009-06-10 09:27
为了长期有效,建议本地保存。
附件名称/大小 下载次数 最后更新
RegShadow.rar (61KB)  142 2009-06-10 09:28
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
板凳#
发布于:2009-06-10 10:52
谢谢znsoft的提醒,不好意思放错版块了
人总在矛盾中徘徊。。。
longtan
驱动牛犊
驱动牛犊
  • 注册日期2009-06-13
  • 最后登录2009-06-13
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-06-13 15:01
支持了!
[size=5][url=http://www.bww5.cn/style/info/self4.asp]全能5G空间加1G数据库=100元/年 双线空间[/url]
bxwpz
驱动牛犊
驱动牛犊
  • 注册日期2008-05-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注3
  • 积分17分
  • 威望151点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-09-29 09:47
还能看到吗
havegone
驱动牛犊
驱动牛犊
  • 注册日期2008-01-17
  • 最后登录2012-03-13
  • 粉丝1
  • 关注1
  • 积分29分
  • 威望229点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2011-01-30 18:21
学习
linix
驱动牛犊
驱动牛犊
  • 注册日期2004-07-28
  • 最后登录2013-02-18
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2012-03-02 00:26
附件失效了。
sarski
驱动牛犊
驱动牛犊
  • 注册日期2012-03-25
  • 最后登录2013-11-02
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望131点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2012-09-04 11:56
附件失效了怎么办呢。。感觉论坛还不是很火啊。。
sarski
驱动牛犊
驱动牛犊
  • 注册日期2012-03-25
  • 最后登录2013-11-02
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望131点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2012-09-04 13:10
百度一下,看雪有源码
游客

返回顶部