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

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

几年前我就开始做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

相关文章
|
20天前
|
存储 人工智能 测试技术
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
141061 20
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
|
19天前
|
人工智能 运维 前端开发
基于阿里百炼的DeepSeek-R1满血版模型调用【零门槛保姆级2084小游戏开发实战】
本文介绍基于阿里百炼的DeepSeek-R1满血版模型调用,提供零门槛保姆级2048小游戏开发实战。文章分为三部分:定位与核心优势、实战部署操作指南、辅助实战开发。通过详细步骤和案例展示,帮助开发者高效利用DeepSeek-R1的强大推理能力,优化游戏逻辑与视觉效果,解决官网响应延迟问题,提升开发效率和用户体验。适合企业开发者、教育行业及多模态探索者使用。
70897 17
基于阿里百炼的DeepSeek-R1满血版模型调用【零门槛保姆级2084小游戏开发实战】
|
27天前
|
人工智能 自然语言处理 Shell
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
仅用3分钟,百炼调用满血版Deepseek-r1 API,享受百万免费Token。阿里云提供零门槛、快速部署的解决方案,支持云控制台和Cloud Shell两种方式,操作简便。Deepseek-r1满血版在推理能力上表现出色,尤其擅长数学、代码和自然语言处理任务,使用过程中无卡顿,体验丝滑。结合Chatbox工具,用户可轻松掌控模型,提升工作效率。阿里云大模型服务平台百炼不仅速度快,还确保数据安全,值得信赖。
358010 62
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
|
23天前
|
人工智能 自然语言处理 API
快速使用 DeepSeek-R1 满血版
DeepSeek是一款基于Transformer架构的先进大语言模型,以其强大的自然语言处理能力和高效的推理速度著称。近年来,DeepSeek不断迭代,从DeepSeek-V2到参数达6710亿的DeepSeek-V3,再到性能比肩GPT-4的DeepSeek-R1,每次都带来重大技术突破。其开源策略降低了AI应用门槛,推动了AI普惠化。通过阿里云百炼调用满血版API,用户可以快速部署DeepSeek,享受高效、低成本的云端服务,最快10分钟完成部署,且提供免费token,极大简化了开发流程。
191014 23
快速使用 DeepSeek-R1 满血版
|
8天前
|
人工智能 搜索推荐 数据可视化
Manus:或将成为AI Agent领域的标杆
随着人工智能技术的飞速发展,AI Agent(智能体)作为人工智能领域的重要分支,正逐渐从概念走向现实,并在各行各业展现出巨大的应用潜力。在众多AI Agent产品中,Manus以其独特的技术优势和市场表现,有望成为该领域的标杆。作为资深AI工程师,本文将深入探讨Manus的背景知识、主要业务场景、底层原理、功能的优缺点,并尝试使用Java搭建一个属于自己的Manus助手,以期为AI Agent技术的发展和应用提供参考。
11071 13
|
8天前
|
机器学习/深度学习 人工智能 测试技术
阿里云百炼已上线超强推理开源模型QwQ-32B,尺寸更小,性能比肩DeepSeek满血版
通义千问团队推出了320亿参数的QwQ-32B模型,通过大规模强化学习和多阶段训练,在数学、编程及通用能力上达到或超越了DeepSeek-R1等先进模型。QwQ-32B模型已在阿里云百炼上线,支持API调用,用户可通过官方文档了解详细使用方法。未来,团队将继续探索智能体与RL集成,推动人工通用智能的发展。
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
快来零门槛、即刻拥有 DeepSeek-R1 满血版
随着人工智能技术的发展,DeepSeek作为一款新兴推理模型,凭借强大的技术实力和广泛的应用场景崭露头角。本文基于阿里云提供的零门槛解决方案,评测DeepSeek的部署与使用。该方案支持多模态任务,涵盖文本生成、代码补全等,融合NLP、IR和ML技术,提供快速实现AI应用的便利。用户无需编码,最快5分钟、最低0元即可部署DeepSeek模型。阿里云还提供100万免费Token,适合预算有限的个人或小型团队试用。通过Chatbox客户端配置API,用户可轻松体验智能交互功能,如数学提问和代码书写等。
37604 5
|
20天前
|
人工智能 编解码 算法
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
7908 68
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
|
7天前
|
机器学习/深度学习 弹性计算 搜索推荐
真正的0代码,0脚本,0门槛,QwQ-32B一键部署!
阿里云最新发布的QwQ-32B模型通过强化学习显著提升了推理能力,在多个核心指标上达到DeepSeek-R1满血版水平,超越了DeepSeek-R1-Distill-Qwen-32B。用户可通过阿里云系统运维管理(OOS)的公共扩展功能,一键部署OpenWebUI+Ollama至ECS,轻松运行QwQ-32B模型。该方案支持本地部署和连接阿里云百炼在线模型,无需编写代码,操作简便,适合新手尝试。具体步骤包括:在阿里云控制台安装OpenWebUI扩展、选择ECS实例并创建、等待几分钟后获取URL链接,即可开始使用。此外,还提供了详细的配置指南和高级玩法介绍,帮助用户更好地利用该模型。
|
10天前
|
开发者 异构计算
高效部署通义万相Wan2.1:ComfyUI文生/图生视频实战,工作流直取!
通义万相Wan2.1开源不到一周,已登顶HuggingFace Model 和 Space 榜双榜首,在HuggingFace和ModelScope平台的累计下载量突破100万次,社区热度持续攀升!为响应小伙伴们对ComfyUI工作流运行Wan2.1的强烈需求,社区开发者整理了实战教程👇
1287 21
高效部署通义万相Wan2.1:ComfyUI文生/图生视频实战,工作流直取!