紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 19038|回复: 58

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

  [复制链接]

851

主题

3477

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
37093
发表于 2013-2-5 14:19:37 | 显示全部楼层 |阅读模式
最近在弄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替代了:
T[}JAO)344P1T{7DEYR}OAB.jpg

于是改了改代码,不验证\device\ide\xxxx是否属于ATAPI了,找到设备直接读写就行,于是读写的问题终于解决。然后又打算在笔记本(DELL ALIENWARE M14X,采用HM77芯片组)上看看效果,结果一看又差点晕了过去,MBR读到的结果又全是0。笔记本上没有加载ATAPI.SYS,相关功能被被INTEL芯片组驱动程序iaStorV.sys替代了:
Untitled.png

于是我怀疑是不是修改的代码有问题,换回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.又有人建议我在真机上安装一下雨过天晴之类的还原软件,我顿时表示{:soso_e127:},我是绝对不会在自己电脑上安装采用ROOTKIT类技术的软件的(包括还原软件和杀毒软件,当然自己写的软件除外{:soso_e113:})。当然不排除以后买一台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吃遍天已经完全不同了,有必要作出以下补充。
游客,如果您要查看本帖隐藏内容请回复

272

主题

3284

帖子

1

精华

管理员

嗷嗷叫的老马

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
17043

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2013-2-5 14:47:35 | 显示全部楼层
看不太明白,不过仍然要支持{:soso_e113:}
我就是嗷嗷叫的老马了......

3

主题

39

帖子

1

精华

铂金会员

Rank: 5

积分
2532
发表于 2013-2-5 17:24:25 | 显示全部楼层
云里雾里
本网站最菜的人 该用户已被删除
发表于 2013-2-5 19:24:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

94

帖子

0

精华

钻石会员

Rank: 6Rank: 6

积分
3031
发表于 2013-2-6 08:49:13 | 显示全部楼层
再次证明自己的学习才刚起步

851

主题

3477

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
37093
 楼主| 发表于 2013-2-6 18:59:03 | 显示全部楼层
本网站最菜的人 发表于 2013-2-5 19:24
继续跪顶
PS:原来我的X86某软件里也有这个,关于那个16字节CDB问题我不知道(X86么~~~),除了上述问题外 ...


暂未发现蓝屏的现象,如果发现的话,我也会改用DISK的。
感觉小端口驱动的变化较大。而DISK是类驱动,似乎从XP到WIN8的变化都不大。
顺便说一下,DISK(CLASSPNP)是开源的,源码在:C:\WINDDK\7600.16385.1\src\storage\class\disk。

7

主题

421

帖子

1

精华

铂金会员

Rank: 5

积分
2173
发表于 2013-4-11 17:15:50 | 显示全部楼层
Tesla.Angela 发表于 2013-2-6 18:59
暂未发现蓝屏的现象,如果发现的话,我也会改用DISK的。
感觉小端口驱动的变化较大。而DISK是类驱动,似 ...

M。好東西

2

主题

64

帖子

0

精华

金牌会员

Rank: 4Rank: 4Rank: 4Rank: 4

积分
831
发表于 2017-2-11 11:02:19 | 显示全部楼层
NVME一堆路过

0

主题

44

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
130
发表于 2017-2-11 11:07:05 | 显示全部楼层
学习学习!!!!!!

2

主题

14

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
217
发表于 2017-2-11 11:38:18 | 显示全部楼层
虽然没学到那么底层,但是先科普下自己的知识也是不错的选择,感谢TA大大分享
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2024-3-29 02:00 , Processed in 0.044006 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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