如何对西数硬盘固件进行逆向分析

几年前我就开始做BIOS rootkits方面的东西(在UEFI成为主流之前)。我知道在初始化启动过程的后期阶段,大多数硬件都有一个BIOS类型设置 ,我的主要关注GPU和硬盘。本文我所做的是我曾经 在 spritesmods 上看到的一些东西。

硬盘破解

我发现一个老版本的西部数码硬盘驱动器很适合现在的研究,所以我把控制器卸下来。

Spritesmods上的那个家伙把固件的闪存芯片弄下来然后把里面的内容全部拷贝出来了,这里唯一的问题是红圈中闪存芯片这个地方。

红圈中是Marvell 88i8846-TFJ2 ARM处理器,有内部的闪存。我不想为了访问内存而手工把整个CPU弄下来,所以我决定使用JTAG方法。

JTAG的头是很知名的,虽然可以被颠倒(在我的案例中头部的第一个pin点用’1’标识)。Pins 6到11是我们需要的JTAG金属圈。

正如你可以看到的,我们决定不焊接pins点。主要原因是其有点生锈并且离得太近,所以很容易把单板弄坏掉。作为替代我决定使用测试点,这可以用万用表的“连续”模式实现。

通过设置万用表的这个模式能够得到两点之间的电阻,‘1’代表完全绝缘(这意味着这两点是不通电的),‘0.01’代表互通性很好。当电阻很低的时候,仪表会发出声音(难以忍受的噪音),所以我们只需要通过声音来判断两点之间是否连接即可。

将硬盘驱动器断开,只要把你要测的两点用万用表测一下即可。然后移动其中一段到其他点上,直到听到蜂鸣声为止。在我的单板上你会发现从头部的pin点到测试点有可见的数据行,这给了你很好的入口(前提是你的视力很好)。

我不想将硬盘插入到我的电脑电源上以免出现一些错误,并且我的电脑在房间的对面,所以我也不想搞个10米长的SATA数据线。下面是我的解决方案:

如果你有备用电源,在没有连接到主板的情况下,你可以将ATX的第三个和第四个pin点短路来将它开启。我的备用电源很老并且少一个风扇,所以我很惊讶居然没有短路和起火(我的房子的所有设备都在一个断路器上,所以短路的话我得花一个小时重启所有设备)。

我使用5美元的SATA来连接USB,这是一个很好的方法。右边的红色单板使用了一个30美元的TIAO USB多协议适配器,基于FT2232H同时以可以用SPI和JTAG。

在这里我有一个愚蠢复杂的设置,由于我的windows机器放在房间的另一边,iMac为JTAG软件运行了一个linux虚拟机(FTDI驱动和OpenOCD)因为这在windows和OSX上安装很麻烦。 Windows系统运行IDA来逆向和调试(当我开始动态调试时我打算在本地网络上用IDA连到OpenOCD的GDB服务器上去)。

现在所有要连接的东西都已经准备好了,给硬盘插上电源然后输入下面的命令:

openocd -f interface/<your interface here>.cfg -f target/test.cfg

需要先为你的硬盘控制CPU配置test.cfg文件,对于大部分marvell的CPU这个配置都有效。我不知道khz适配器行不行,所以我将mine设置成100(由于这个值低于它正常的工作值)。

如果一切正常,你会看到这些信息。现在你可以telnet到4444端口然后发送命令了。

硬盘控制器用的Marvell芯片没有公开的文档,所以如果你想了解相关信息比如内存布局,你需要在NDA上注册然后付费。作为替代,我想要做的是尽可能在固件上和通过探测电路找到更多的信息。

如果你们没有办法焊下闪存并导出信息要得到固件并不容易,所以我们将会在boot进程下工作。 大部分ARM CPU的起始执行地址是0xFFFF0000,这是复位向量。如果我们从这个地址导出65536字节,我们将会找到启动代码,这是一个很好的入口点。

为了导出内存,我们首先要停止CPU,可以使用命令”reset halt”(这是必要的因为我们没有办法在任何一个阶段都能停下来)。如果这个命令没有效果可能是JTAG的RST pin点没有连接,你需要断开并重连硬盘的电源然后快速的修复这个JTAG问题。内存导出用以下命令

“dump_image <file name> <address> <size>”

当我们将导出的镜像文件反汇编时,它是一个很小的只有4KB的启动代码,这段代码能够引导剩下的固件。

我发现JTAG的重置点不是真的系统重置(SRST)只是一个TAP重置(TRST),这对调试不是很有用。这里是对系统重置信号的添加(这样允许重置停止命令在重置向量上中断下来,在任何指令执行之前)。

在我的例子中没有SRST行的测试点,但是在序列标签下面有暴露出非常小的镀铜位,这个可以用来连接CPU的SRST pin点。

红迪网上的Ceriand指出JTAG头跟MICTOR连接器很像(通常是38或40个pin点)。所以如果你不想做任何焊接工作你可以找一个MICTOR连接器和数据线。

同时我发现老版本的PSU硬件无法在低电压下使用(内部的组件可能会爆炸),所以我推荐为Molex电源适配器买一个好的AC(不要买便宜的,一天就坏掉了)。

最后,由于JTAG头有一个RTCK连接器,你需要将opencd的adapter_khz配置为0. 这样JTAG能够使用自适应时钟,这样你能够防止所有超时错误。

引导和引导程序

通过一些逆向我确定第二部分的引导代码无法在正常的启动中使用。执行的时候在一个端口上等待一些数据(最有可能是串行端口),然后采取相关的行动。如果没有数据到来,这段代码将进入一个死循环驱动将永远不会启动。

PCB周围的端口和测试点映射到CPU的0x1C00A000-0x1C00AFFF范围上。现在,由于我没有钱买示波器或者像样的逻辑分析仪。我不得不通过这些端口映射,这样会使事情变得更容易。

所有的这些代码都是为了基于一些值读取进入系统特殊模式的开关:

4-不确定,当它为了一些端口的值进行无限循环。我猜这些值是允许开发者读取/写入/ 擦除处理器内部的闪存。

3-跳转到R4的地址(我的例子中这个值为0,但可能是设计的原因)

6-串行端口的串行控制台可以用ASCII字节(r,w,j,h),可以让开发者发送读取, 写入,跳转和停止命令。

我对端口如何映射到内存不太熟悉,0x1C00A030总是为0,0x1C00A03A总是为0xFFFF(我认为这一个是低电压常数一个是高电压常数)。

有趣的是在“cmp R1,#R3”上设置断点将R3设置成3,代码会跳到地址0然后正常启动(这就是我认为为什么0不代表未初始化)。让我们看看地址0有什么。

地址0通常是RAM,但已经有一些有效的代码了,所以很可能是在启动过程中CPU临时映射地址0到一些内部只读存储器。这是标准的ARM IVT,你可以在任何ARM设备的启动地址看到;使我想到CPU检测到JTAG附加进来时0xFFFF0000上的启动只是被执行了。在我买到逻辑分析仪并找到哪个端口允许我控制启动模式跳转之前,唯一通过JTAG正常启动硬件的办法是在校验之前执行“重置”然后将R1设置成3.

在这个例子中启动代码是节与节之间差距最大的地方,后续有机会我会将它进行映射,导出,并逆向。

*参考来源malwaretech.com

时间: 2024-09-22 01:01:23

如何对西数硬盘固件进行逆向分析的相关文章

如何对西数硬盘固件进行逆向分析(下)

这篇文章其实是有很多个小部分,为了大家阅读方便,我将其整合成了上下两个部分(第一部分),其中有一些地方翻译起来较为困难(老外废话真的很多),望各位嘴下留情. 启动代码貌似只是分布在不同的内存地址,但没有什么简单的办法能够将它们全部导出,所以我决定从内存的0×00000000开始导出区块然后所有的都来引用这个区块的外部地址(建立一个基本的代码地图). 虽然硬盘模型之间的确其地址不同,但是我的布局可以给你一个好的思路.   在附近看了一会之后,我发现它会从一些地方读取代码到内存中,所以我猜这里是闪存

西数硬盘坏了怎么保修?西数硬盘保护教程

西数官方一般是不管保修,让你找代理商,我是从淘宝上购买的,小的淘宝卖家都不管的,只能还是找西数,打了N个西数的电话,都不管. 中国目前两个电话可以联系到西数: 800-820 6682 400-627 6682 还是要一直拨打这个电话,一直到他们帮你处理为止,然后,你说找不到经销商,西数会帮你提升等级处理.期间可能让你上传一些硬盘的照片.过了有一个多星期,收到了他们的回信:     尊敬的用户,您好!     感谢您对西部数据的支持.关于您反馈的问题我们已经收到.给您带来的不便,我们深表抱歉.

西数三财季西数回购普通股股票520万股

硬盘商西部数据今天公布2013年三财季(截止3月29日)业绩,期内营收38亿美元,同比增长26.7%.净利3.91亿美元,同比下降19%.按非通用会计准则,一财季西数净利5.14亿美元,上年同期净利6.19亿美元.三财季西数硬盘出货6020万块,上年同期4420万块.到季度末,西数有现金.现金等价物41亿美元,三财季来自经营活动的现金流为7.27亿美元.三财季,西数回购普通股股票520万股,动用2.43亿美元.

西数数据战略投资固态硬盘

  作为机械硬盘双雄,希捷和西部数据对于固态硬盘都不太感冒,一直都显得脚步缓慢,只是通过收购和投资进行试水,而且都局限在企业级领域.今天,西数又宣布向企业级固态硬盘厂商Skyera进行了战略投资. Skyera总部位于加州圣何塞,是一家新兴的企业级固态存储服务商,曾经在2012年的闪存峰会上赢得最具创新闪存企业业务应用表现奖,还被著名市调机构Gartner评为2012年最酷的存储厂商之一. 该公司的主打产品是SkyHawk系列企业级固态硬盘,采用20/19nm工艺MLC NAND闪存,最大容量可

数据中心公布硬盘使用报告 西数表现最差

如果你最近有意购买一部机械硬盘,那你或许应该关注下Blackblaze日前公布的一份研究报告.这家云备份服务提供商在报告中表示,希捷的硬盘在不断改进,西数的产品质量却越来越差,HGST则最为可靠. Blackblaze会定期分享自己使用不同硬盘型号的经验,而这对于消费者而言无疑是宝贵的参考.毕竟如果你希望对硬盘的生命周期进行科学测试,一个拥有56224块硬盘的数据中心显然是一个合适的测试地点.这也正是Blackblaze的报告如此有趣的原因.他们拥有大量不停运转的硬盘,并向我们分享了其数据中心当

西数企业级市场大救星:充氦硬盘

 西部数据已经在消费级硬盘上稳超希捷,但企业级领域还是不如后者,不过市调机构IHS iSuppli预计,凭借旗下日立的充氦硬盘技术,西数终将在企业级硬盘市场上也灭掉希捷. 算上日立,西数2012年第三季度在企业级硬盘市场上的份额已经达到45%,只比希捷少3个百分点,而在引入充氦硬盘上,西数有望到2013年第四季度超越希捷. IHS分析师Fang Zhang指出:"充氦硬盘将让西数爬上企业级硬盘第一的宝座.西数说充氦硬盘可以降低功耗20%以上,这对企业级用户来说是至关重要的,而且在不增加存储密度和

单碟1.75T 西数14TB充氦硬盘今年上

西数去年底更新了机械硬盘的容量纪录,带来了新一代HGST Ultrastar He12系列,高达12TB.据外媒报道,这款12T硬盘最快本月就将出货.He12采用充氦技术,PMR垂直磁记录,8碟,7200转,提供SAS 12Gbps及SATA 6Gbps两种接口规格,分别面向企业和消费级市场,读取速度最高243MB/s. 另外,今年晚些时候会出货14TB的He12系列机械盘,同样8碟装,单碟提高到惊人的1.75TB,采用的是SMR技术(叠瓦式磁记录,shingled magnetic recor

希捷、西数、日立4TB硬盘大乱斗

  现如今硬盘市场上已经有了很多4TB大容量型号,希捷甚至已经推出了单碟1TB.四碟装的,西数.日立则还停留在单碟800GB.五碟装,那么它们的性能究竟孰优孰劣.能差多少呢? 希捷的ST4000DM000无疑最值得关注,因为它在4TB硬盘里唯一用了单碟1TB技术,但它的诞生可以说是悄无声息,没有任何公开发布就上市了. 不过它的转速并不快,只有5900RPM,因此它的性能也并不是特别好,内部持续数据传输率为180MB/s,平均等待时间5.10毫秒,而之前7200RPM的能跑到210MB/s.4.1

土豪专用的黄金硬盘?西数Gold系列8TB硬盘开卖

HDD硬盘市场日渐萎靡,西数觉得给大家换点新花样--上个月宣布推出Gold金盘系列,再加上此前绿盘并入蓝盘,西数目前一共有黑盘.红盘.蓝盘.绿盘.紫盘.金盘总计6种颜色了.这个Gold金盘其实也不是给土豪用的,主要取代之前的RE系列,面向数据中心应用,容量有4TB.6TB及8TB,使用了充氦技术.现在8TB大容量版也开卖了,日本地区预售价74980日元,折合人们币大约4498元--价格倒是蛮土豪的.   既然主打企业级市场,西数的Gold金盘性能指标不错,7200RPM转速,最大128MB缓存,