吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11923|回复: 36
收起左侧

[调试逆向] 如何读取CD音频光盘,大刀阔斧砍WinHex、gBurner、VLC

  [复制链接]
JuncoJet 发表于 2020-6-3 11:47
本帖最后由 JuncoJet 于 2020-6-4 15:48 编辑

前言
之前写了一款镜像转储工具,FastImageDump。在对软件测试的时候发现CD音频光盘在转储时有点问题。
然后作者各项调试,发现大多数的API在音频光盘上都无法操作(GetDiskFreeSpaceEx、ReadFile等)
经过对2款镜像工具(WinHex、gBurner),1款播放器(VLC)的逆向,基本了解了CD光盘的读取方法。三款软件的实现方式都不一样,
但是机智的作者们貌似都破解出来了读取的方法。

逆向分析
众所周知,一般对设备的操作涉及到以下API们
CreateFileA/W、ReadFile、WriteFile、DeviceIoControl等
对软件一顿猛下断,神奇的发现三款软件都没有使用ReadFile来读取,可见CD音频光盘果然不支持这种读取方式。
WinHex
Image 617.jpg
Image 618.jpg
如上图可以看到CtrlCode是0x4D014,百度得到 IOCTL_SCSI_PASS_THROUGH_DIRECT,此方法可以直接发送SCSI指令给驱动器设备。
功能不言而喻,可以实现的功能多多,甚至可以穿透还原和影子系统篡改硬盘数据。
采用的操作指令是 0xBE VOLUME SET (IN) READ CD(比较早期CD光驱时代的指令),虽然百度了老半天查到这个指令,
但却有没详细的参数用法,但看上去参数比较简单。
参数就是1扇区2扇区这样的,后面我们直接用他数据来进行测试。
gBurner
Image 612.jpg
Image 613.jpg
Image 614.jpg
Image 615.jpg
Image 616.jpg
可以看到他的操作相对来说比较复杂,但后续都是通过 0x52 XDREAD (10)READ TRACK INFORMATION,来进行读取的。
VLC
Image 611.jpg
Image 619.jpg
Image 620.jpg
Image 621.jpg
可以看到VLC采用的是CtrlCode 0x2403E(未百度到)IOCTL_CDROM_RAW_READ来操作,而非SCSI指令。
Image 622.jpg
对参数分析,得到参数应该是bit值。没有强制的扇区概念,该操作方式相对来说比较自由。

技术重现
采用WinHex的方式来读写扇区
Image 627.jpg
采用VLC的方式来读写扇区
Image 623.jpg
对照WinHex,可以看到读取OK!
Image 624.jpg
Image 625.jpg
Image 626.jpg

总结
至于为啥无法读取音频光盘?个人猜测应该是系统为了防拷贝而屏蔽了上层API的操作(可能存在某种公约)。
同样的,VirtualBox 也无法映射音频光盘到虚拟机上。对此表示很无奈,本想着对WMP尝试下逆向的。
已对WMP和PotPlayer逆向,均采用 IOCTL_CDROM_RAW_READ 方式来读取音频光盘数据。
而WinHex的作者貌似对磁盘比较了解,所以采用卷集的方式来读取,可能年纪比较大,对CD光驱时代的指令比较了解,
采用了READ CD指令,gBurner作者对DVD光驱比较了解所以采用 READ TRACK INFORMATION。
可以看到各软件为此都用出了自己的看家本事,百花齐放百家争鸣,咩哈哈。逆向真是个好东西。

源码.zip

1.77 KB, 下载次数: 38, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 8威望 +2 吾爱币 +108 热心值 +7 收起 理由
京吹久美子 + 1 + 1 我很赞同!
Xkf1217 + 1 鼓励转贴优秀软件安全工具和文档!
shi128862 + 1 + 1 我很赞同!
sssjcccz01a + 1 + 1 谢谢@Thanks!
Hmily + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
5omggx + 1 + 1 期待FastImageDump支持生成优化合并重复文件的iso
jiangweiforever + 1 谢谢@Thanks!
610100 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| JuncoJet 发表于 2021-1-14 10:40
cjsky008 发表于 2021-1-14 10:36
上次raid数据有问题,就是人家远程用winhex帮我搞定的,太厉害了,他操作的时候要只两分钟,我付费500元。{ ...

winhex、r-studio、diskgen都可以重建raid
thankit 发表于 2020-6-22 11:36
上次raid数据有问题,就是人家远程用winhex帮我搞定的,太厉害了,他操作的时候要只两分钟,我付费500元。
gblgbl 发表于 2020-6-3 12:36
mitimake 发表于 2020-6-3 13:07
学习学习
ShinRan 发表于 2020-6-3 13:29
学习一下
会成功的人 发表于 2020-6-3 13:58
技术帖子,学习了。
flac 发表于 2020-6-3 15:14
感觉分享,可以试试NtReadFile
 楼主| JuncoJet 发表于 2020-6-3 15:18
flac 发表于 2020-6-3 15:14
感觉分享,可以试试NtReadFile

肯定读不了
netspirit 发表于 2020-6-3 15:35
cd不是啥秘密了吧 楼主可以试试sacd哈哈哈哈哈哈
mengxiang12388 发表于 2020-6-3 16:07
挺深奥呀,表示看不太懂
duanlai 发表于 2020-6-3 20:19
谢谢分享,看不太懂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 19:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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