WINDOWS下的磁盘还原及穿透技术内幕

还原精灵、冰点、影子系统等还原产品在关键的技术原理上没有本质区别,都是在磁盘过滤驱动一层对特定的扇区IO进行了重定位处理。本文将对这种技术进行简略分析,并提供一套实用的实现源代码。多点还原的实现方式与前面几者区别较大,这里不作讨论。

    我们都知道,当系统里安装了磁盘“还原”类软件并激活后,所有应用层文件的写操作——创建、修改、删除,以及各种系统设置、注册表的变化,甚至包括分区格式化,在系统重启后都被完全恢复到激活还原软件时的状态。这种“恢复”的表象背后,并不是真的有什么机制在帮我们把文件系统的各种操作回退到最初的状态。事实上,一旦还原软件被激活后,我们的对文件的所有写操作就不再是有效的,全都被写到磁盘上的一些临时空间中,比如未使用的簇或预先分配的特定存储文件内,而磁盘分区内已分配给文件占用的有效扇区,一个也不会被写入!由于文件系统下层的还原驱动程序通过内存中的一个重定位表,帮我们维护着这些新写入的脏数据快与上层文件系统结构的链接关系,所以我们仍然觉得各种文件操作都在正常进行。但是当系统重启后,内存中非持久的重定位表消失了,驱动程序也处于初始化状态,更关键的是,文件系统的原来分配的有效扇区一个也没变!所以我们通过文件系统看到的磁盘分区结构也是没有变化(其实是有变化的,你在系统重启前写入的那些文件都在磁盘未分配簇或临时转储文件里)。
   
    弄明白上述过程,就可以分析出磁盘过滤还原驱动的关键技术点了:


    一、分析磁盘分区结构,你得知道什么是MBR、DBR、文件簇、扇区相对偏移(分区内)、扇区绝对偏移(磁盘内)、磁盘分区结构表等,还得对FAT/NTFS文件系统结构有一定的了解,至少你得知道FAT的簇分配表以及NTFS的$MFT和$BITMAP。


    二、截获扇区IO(文件系统是以簇为单位操作,簇到了磁盘驱动这一层就变成了连续的扇区块),然后根据扇区的偏移做出不同的处理。
        下面为了叙述方便,我们把在还原状态下被写过的扇区称为“脏”扇区,未写过的扇区称为净扇区。

        读操作            
              读净扇区——直接下传该操作的IRP;
              读脏扇区——查询重定位表,找到脏扇区数据的实际存储位置,转换IRP的偏移,分割后再下传(这里如何分割并创建子IRP是个难点);

        写操作
              写净扇区——在未使用的扇区里分配出同样大小的空间,设置重定位表,转换IRP的偏移,分割后再下传;
              写脏扇区——查询重定位表,转换IRP的偏移,分割后再下传;

            
    三、高效的重定位算法及数据结构,位图是个比较直观方式,但是当磁盘空间很大时,也许你在物理内存中无法放置一个映射全盘扇区的位图,而且位图的操作效率就是最好的吗?


    四、从磁盘分区信息中解析出文件的簇链,这个并不是还原驱动所必须的,但如果你要做一些相对高级的功能,就会需要以文件为单位来进行操作而不是以扇区为单位来进行操作。使用内核文件API?磁盘驱动中怎么能使用文件API呢!


    五、穿透,有很多方式,这里举一个例子:即动态切换磁盘的还原/非还原状态,然后在非还原状态下把我们需要更新的文件写入磁盘扇区。虽然更新的时间通常只是一会儿,为了稳妥起见,在非还原状态下还是要使用某种临时保护机制(比如文件系统只读),禁止其它进程写文件。切换分区还原状态一定要锁定分区,因为未锁定的分区在内存中可能有各种未决的操作、中间状态及未刷新的缓存,是不稳定的。锁定分区和临时的保护方式,会带来一些应用上的不便。目前有一种不锁定分区,映射出虚拟分区后两次写操作的更新方式。


    六、其它一些细节。比如pagefile.sys/hiberfil.SYS文件的特殊处理、BOOT文件标志的设置、阻止WINDOWS磁盘分区管理程序的操作,以及对MBR/DBR的保护等等。



    七、磁盘过滤驱动的安装及防护。对于那些写ROOTKIT、病毒、木马的混蛋们来说,要绕过一个标准的磁盘过滤驱动是很容易的。所以在驱动安装及防止非法穿透上要不断地改进,做还原驱动做到这步就跟做杀毒软件的有点类似了,道高一尺魔高一丈啊!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
理解Microsoft专家认证程序 理解Microsoft认证的不同等级和类型 选择成为MCP(Microsft认证专家)的考试科目 选择成为MCSD的考试科目 选择成为MCT的考试科目 MCSE认证考试的科目 选择合适的MCSE课程组合 核心课程考试 选修课程考试 考试编号的识别 课程内容和考试内容的对照 理解微软的MCSE长远考虑 理解微软出题的方式 使用本书帮助备考 在Internet上寻找对考试有帮助的信息 寻求微软认可的课程指导 寻找高质量的和三方帮助 寻找可利用的评估软件拷贝 报名参加考试 考试的费用问题 考前的自我调整 使用考试中心提供的考试工具 参加模拟测试 熟悉使用计算机进行考试 充分利用考试时间 考题的形式 理解多重选择题型 理解对错题题型 理解多重选择多重答案题型 理解基于解决方案型的问题 理解“建议方法”类型的考题 分析考试结果 准备重新考试 合理安排考试课程的顺序 熟悉Windows系列产品 比较Windows NT Server和NT Workstation 比较Windows NT Workstaton和Windows 95 在Windowx 95和Windows NT Workstation之间作出选择 关于Microsoft Windows NT的70-069号考试:实现和支持Microsoft Windows NT Server 4.0 70-069号考试(实现和支持Microsoft Windows NT Server 4.0)覆盖的内容 Windows NT 4.0界面简介 Windows NT 4.0任务栏(taskbar)的使用 Windows NT回收站简介 Windows NT帐号简介 理解单域模型支持和帐号数量 安全认证号简介 使用管理向导(Administrative Wizards)创建帐号 使用Server Manager(服务器管理器)程序创建计算机帐号 Userver Manager for Domains(域的用户管理器)简介 使用User Mnager for Domains创建用户帐号 刷新用户帐号列表 用户帐号列表的排序 事件查看器(Event View)程序简介 筛选Event Viewer中的事件 授予用户在本地登录的权利 使用Windows NT诊断程序查看系统配置 激活“Windows NT Security(Windows NT安全)”对话框 理解登录验证过程 理解访问令牌(Access Token) Windows NT目录服务简介 理解Windows NT如何构造用户帐号数据库 使用Windows NT中的Ctrl+Alt+Del组合键 把Windows NT计算机设置成自动登录 改变Windows NT口令 用拨号网络登录 复制用户帐号 为简化多个帐号的创建工作而建立用户帐号模板 删除和重新命名用户帐号 理解保护缺省的Administrator帐号的重要性 重新命名管理员帐号 理解缺省的Guest帐户 Windows NT在哪里创建帐号 设置口令限制条件 设置用户登录地点 创建宿主文件夹 设置用户登录时间 创建临时用户帐号 重新设置用户帐号口令 修改多个用户帐号 自动注销有时间限制的用户 要求用户在下次登录时改变口令 设置帐号规则 设置用户口令永不过期 停用用户帐号 解开登录失败后的用户帐号 Windows NT组简介 理解用户权限和组的访问权限 理解用户和组的权利 分清权限(permission)和权利(right) 设置组成成员关系 理解全局帐号 理解本地帐号 定义Everyone组 Network组的详细说明 Inteactive组的详细说明 Administrators组的详细说明 Guest组的详细说明 Users组的详细说明 Print Operators组的详细说明 Backup Operators(帐户操作员)组的详细说明 Replicator(复制员)组的详细说明 Domain Guests(域客户)组的详细说明 Domain Users(域用户)组的详细说明 Domain Admins(域管理员)组的详细说明 赋予拨号进入权限 理解用户配置文件(User Profile) 为Windows用户创建并使用登录脚本文件(Logon Script) 创建漫游式用户配置文件(Roaming User Profile) 创建强制性用户配置文件(Mandatory User Profile) 为用户帐号分配一个配置文件 创建帐户时变量的使用 创建随机初始化口令 理解内建组(Built-in Group) 理解组和策略 设置主组(Primary Group) 理解删除一个组的影响 域控制器(Domain Controller)简介 成员服

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值