技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 831|回复: 3
收起左侧

【搬运】[讨论]瞎扯一下ATAPI、穿还原、TDL4等相关玩意【20170211更新】

[复制链接]

995

主题

2207

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
197
威望
261 点
宅币
16463 个
贡献
32443 次
宅之契约
0 份
在线时间
1565 小时
注册时间
2014-1-26
发表于 2017-2-14 17:22:59 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
原作者:Tesla.Angela
原帖:http://www.m5home.com/bbs/thread-7451-1-1.html

最近在弄WIN64AST的“破坏文件”和“强制读写MBR”功能,一开始用摘除文件系统过滤驱动+直接给NTFS/FASTFAT驱动发IRP的方式实现直接磁盘读写。

后来发现这个方法太弱,别说过不了TDL4,连还原都过不了,于是恶补了一下磁盘相关知识,移植了机器狗的SCSI指令读写磁盘到WIN64上(这里感谢一下论坛的某核心会员,如果没有他的帮助,恐怕移植的麻烦就多了)。

不知道有人发现没有,网传的机器狗函数AtapiReadWriteDisk名不符实,因为\device\harddisk0\DR0是属于disk.sys的,而不是属于ATAPI.SYS的。ATAPI上的磁盘设备叫做\device\ide\XXXX(XXXX各不相同)。不过,通过\device\harddisk0\DR0的DeviceObject获得\device\ide\XXXX的DeviceObjec不难。

不过,网传机器狗代码的弊端太大了,先不说DR0能否准确获得(机器狗代码似乎默认人家的电脑上只有1个硬盘,这让有5个硬盘的我情何以堪啊),它使用的10字节CDB,只能读写2048GB以内的磁盘。在WIN64AST里,我把它改成了16字节的CDB。另外,网传机器狗代码里的注释很扯淡,要人家参考什么《SCSI程序员指南》,其实看看维基百科的相关词条足矣。

有了真正的AtapiReadWriteDisk,在虚拟机上穿了四个还原(Deep Freeze Standard 7.51.20.4170、shadow defender 1.2.0.355、Returnil 2011(1.0.5.5400)、雨过天晴20130111),心里爽到了极点,打算在台式机(华硕P8P67主板,采用INTEL P67芯片组)上看看效果。结果一运行,我差点晕了过去,MBR读到的结果全是0。用DEVICETREE一看,ATAPI虽然有加载,但根本没有相关功能。再一搜索,发现ATAPI的功能被INTEL芯片组驱动程序iaStor.sys替代了:
forum.jpg
于是改了改代码,不验证\device\ide\xxxx是否属于ATAPI了,找到设备直接读写就行,于是读写的问题终于解决。然后又打算在笔记本(DELL ALIENWARE M14X,采用HM77芯片组)上看看效果,结果一看又差点晕了过去,MBR读到的结果又全是0。笔记本上没有加载ATAPI.SYS,相关功能被被INTEL芯片组驱动程序iaStorV.sys替代了:
forum.jpg
于是我怀疑是不是修改的代码有问题,换回10字节的CDB,发现问题解决。这回真的觉得奇怪了,难道INTEL嫌我笔记本上的硬盘(64G+750G)太小,不让我用16字节的CDB?接下来是我遇到的情况的总结(不一定正确):
         |ATAPI.SYS|iaStor.sys|iaStorV.sys
------------------------------------------
10字节CDB|   支持  |   支持   |   支持
------------------------------------------
16字节CDB|   支持  |   支持   |  不支持

备注:以上结果均是在真机上测试的。
最后WIN64AST用了个很无奈的办法解决此问题。先使用16字节CDB来读写磁盘,如果失败,则看看sector的大小,如果sector小于等于(ULONG)0xFFFFFFFF,则改用10字节CDB来读写磁盘,否则使用发送IRP到NTFS/FASTFAT驱动的方法直接读写磁盘。

接下来扯一下TDL4,大家都知道TDL4是大名鼎鼎的RK,貌似还是第一个支持WIN64的RK,它凭借高超的隐藏技巧,干翻了一大堆杀软。它在32位系统上HOOK了ATAPI.SYS的DriverStartIO实现隐藏自身MBR。不过我感觉如果它还要搞ATAPI的话,恐怕在使用了INTEL的6系、7系的主板上就不可行了。突发奇想,TDL4替换了内存中的KDCOM镜像,如果TDL5连ATAPI.SYS(包括INTEL的iaStor.sys和iaStorV.sys,如果有的话)的镜像也一并替换了换成自己的ATAPI.SYS,就不用HOOK什么DriverStartIO(再说WIN64上ATAPI.SYS的DriverStartIO一直为0)了,多爽快,呵呵。


2013-02-05补充:
1.有人怀疑我16字节的CDB有没有组织错误,我确认没有,因为不仅在两台虚拟机上测试了,而且在真机(以前那台PM45+500GB硬盘的华硕G50Vt)上也测试了。读写MBR和读写文件均没有问题(已经用devicetree确认这些机器上\device\ide\xxxx是属于atapi的设备)。
2.又有人建议我在真机上安装一下雨过天晴之类的还原软件,我顿时表示 e127.jpg ,我是绝对不会在自己电脑上安装采用ROOTKIT类技术的软件的(包括还原软件和杀毒软件,当然自己写的软件除外 e113.gif )。当然不排除以后买一台N2700/D2500之类ATOM小本来测试,不过这是以后的事情了。
3.以后再购买一台Z87主板+4TB硬盘的台式机,测试一下在iaStorV.sys存在的情况下,能否用16字节CDB读写磁盘。


2013-02-06补充:
WIN8/WIN2012上管硬盘的『小端口驱动』又不相同了,在我的虚拟机里,WIN8上的驱动是stroahci(此驱动是微软出品的),WIN2012上的驱动是LSI_SAS(此驱动不是微软出品的),而且ATAPI还在,不过ATAPI管光驱,不管硬盘了。而且它们的设备名称不再是\device\ide\XXXX,而是\device\NNNNNNNN(NNNNNNNN为8位的数字,比如00000076)。经测试,发16字节CDB的SRB请求,均返回STATUS_SUCCESS。


2017-02-11补充:
这篇文章写于几年前,现在时过境迁,走到了WIN10系统+NVME磁盘时代,跟XP系统+IDE磁盘时代一个ATAPI吃遍天已经完全不同了,有必要作出以下补充。
游客,如果您要查看本帖隐藏内容请回复

0

主题

18

帖子

48

积分

用户组: 初·技术宅

UID
2268
精华
0
威望
1 点
宅币
28 个
贡献
0 次
宅之契约
0 份
在线时间
2 小时
注册时间
2017-2-21
发表于 2017-2-21 09:00:56 | 显示全部楼层
感谢楼主分享

0

主题

1

帖子

8

积分

用户组: 初·技术宅

UID
2806
精华
0
威望
1 点
宅币
5 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2017-8-23
发表于 2017-8-23 17:42:18 | 显示全部楼层
nvme路过
回复

使用道具 举报

0

主题

1

帖子

9

积分

用户组: 初·技术宅

UID
1854
精华
0
威望
1 点
宅币
6 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2016-7-26
发表于 2017-8-27 09:50:06 | 显示全部楼层
看看干货
回复

使用道具 举报

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2018-9-24 00:07 , Processed in 0.127817 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表