嵌入式多媒体卡(eMMC)系统内内容提取技术详解

本文详细介绍了如何在无需移除芯片的情况下,通过信号探测、电源管理和系统隔离等技术,提取嵌入式多媒体卡(eMMC)的内容。涵盖硬件接口、逻辑分析仪使用和实际操作步骤。

嵌入式多媒体卡(eMMC)系统内内容提取

日期:2025年6月20日
作者:Dmitry Janushkevich

每个复杂的现代设备都需要非易失性存储来在断电时保存程序和配置数据。市场上有几种竞争选项可供系统设计人员选择:串行闪存、原始NAND芯片、(微型)SD卡和嵌入式多媒体卡(eMMC)。本文讨论eMMC,特别是如何在不从系统中移除芯片的情况下与其交互。

这种方法通常是可取的——毕竟,即使您非常擅长BGA重新植球,芯片和PCB能承受的加热和冷却周期也只有那么多,失败的概率会变得太高。更不用说eMMC最常使用的封装的极细间距。接触球/焊盘仅相距0.5毫米(0.02英寸),使整个过程相当繁琐且容易出错。没有人真的想每次需要更改时都进行飞线!

因此,最好避免所有这些,仍然能够读写芯片的数据。关于如何实现这一点,各种零散的信息一直在流传,其中很多在手机维修论坛上,但我觉得以更结构化的方式收集、处理和呈现集体经验可能是有益的。让我们探索这个想法以及如何使其成为现实。

先决条件

首先,基础知识。以下内容是实现任何目标所必需的:

  • 显然,要研究的设备。
  • 与eMMC芯片交互的接口设备。选项可以不同,但您可以选择任何能够使用1位MMC的设备。我使用一个自定义的基于STM32的适配器,这提供了一些额外的黑客和调试功能,但另一方面速度相当慢。还有其他选项可用,但我个人尚未测试它们。
  • 一些带有程序来使用磁盘映像的机器。这取决于您将使用的实际接口设备。也许是Linux笔记本电脑和“dd”?
  • 微焊接设备和技能。不幸的是,仍然需要一些繁琐的焊接,因为您需要连接一些东西。一个尖头的烙铁头,可以焊接小于0603尺寸的被动元件,以及一些合理直径的“磁线”是必须的。如果您觉得不够自信,先在一些不那么重要的设备上练习。
  • 探测信号的设备。万用表是必须的,但您还需要逻辑分析仪和示波器。两者都不需要高端,但它们应该能够处理至少100MHz的频率。
  • 可调节的台式电源。这可能需要为您的设备供电,无论是整体还是部分。

eMMC基础

尽管eMMC芯片有一百五十个接触球,但只有几个实际上起作用;其余的似乎是为了机械稳定性和/或保留供未来使用。虽然eMMC协议的完整描述在JESD84 [PDF]中提供,但以下是特别感兴趣的信号及其属性的简要概述:

  • CLK线由主机提供,并同步总线上发生的一切。
  • CMD线用于主机和总线上eMMC设备之间的双向通信。主机命令和设备响应通过此线发送。
  • 一组双向线DAT0 through DAT7,用于主机和eMMC设备之间的数据交换。这些携带除命令和响应之外的所有其他内容。
  • VDD和VDDQ线,以及相应的VSS和VSSQ线,为eMMC设备供电。eMMC标准定义了几种可接受的电压组合,但在所有情况下,VDDQ小于或等于VDD。值得注意的是,VDDQ定义了eMMC总线上所有外部信号的电压水平!

基本上就是这样。事实上,我们将进一步简化,只处理CLK、CMD、DAT0和电源线,这就是所谓的1位总线宽度,其他两个选项是4和8位。

更高的速度通常需要为eMMC总线的所有信号添加串联电阻。这导致eMMC设备被8个或更多电阻紧密包围,这些电阻是极好的接触点。eMMC标准还建议所有线通过电阻上拉到VDDQ,以确保信号电平明确定义。

整个冒险提出了一系列几个相互关联的问题,解决这些问题对于成功建立通信至关重要。

问题#1:定位板上的eMMC信号

在我们连接任何东西之前,我们需要确切地了解要连接什么。如果您幸运,设备PCB上有丝印标记,注明部分或所有eMMC信号位置。

但更多时候,没有这样的运气,PCB没有任何标记。如何继续?

首先,注意板上eMMC设备周围的走线。其中一些可能来自设备下方。它们去哪里?也许是到SoC?是否有串联的被动元件?确保彻底检查板的另一面。虽然eMMC信号在内部层布线并非不可能,但如果板有足够的层,但在4层板中,内部层更常见的是电源和地,而顶层和底层携带信号。

还可以将封装引脚覆盖在板照片上,以大致识别感兴趣信号的位置。

这项调查工作应该让您有一组eMMC信号的潜在候选。现在我们需要筛选它们。最简单的方法可能是用一些磁线接触所有候选,并使用逻辑分析仪观察被黑设备启动时的活动。

在图4中,可以看到几条从上到下的走线,都是探测的好候选。

在启动或系统重置时,总线上唯一的主动交互是通过CMD线:将总线切换到空闲状态、询问支持的电压、分配设备地址等。您应该看到慢速CLK信号的突发,CMD上的活动不太规则。像这样:

请注意,由于eMMC标准允许使用低电压(如1.8V)进行总线操作,您的逻辑分析仪可能需要适当配置。

CMD线活动总是以位序列01开始;这些是起始位(总是0)和方向位(1表示主机到设备)。自然,CMD转换必须与潜在CLK的下降沿同步。在某些时候,您可能会看到CLK的频率变为更高的频率——比如50MHz——CMD也随之变化。使用这些线索,应该可以在您的候选中找到CLK和CMD线。您可以通过在逻辑分析仪软件中配置协议分析器来确认猜测,看看它是否显示任何合理的内容。

如果有看起来像CMD但没有CLK的东西,您将需要找到更多候选。请注意,在所有信号中,CLK线最不可能在eMMC芯片附近有串联电阻。主机是唯一驱动该线的,因此电阻将更靠近主机放置。

现在只缺少数据线。这些可以在您发现CMD和CLK并使用协议分析器时发现。寻找主机发出任何会导致设备发送数据的命令,例如,请求扩展CSD内容或读取某些扇区。前者通常发生在速度切换之前,后者在之后。高速设备也可能使用8位模式;8条线变低然后显示活动也是一个好线索。如果您的被黑设备在速度切换之前执行任何类似读取的操作,找出哪8条线是DAT0很容易:那时只有一条数据线活跃,而切换后8条都会活跃。您还可以将CMD和CLK连接到您的1位接口设备,看看会发生什么。由于不应该有从1位到更高宽度的总线宽度切换,8条候选线中只有一条应该显示任何活动。然而,这需要能够为eMMC芯片供电并使系统的其余部分不干扰。

问题#2:为eMMC芯片供电

当然,您的eMMC芯片需要供电,然后您才能对其执行任何操作。这种电源可以由被黑设备本身提供,也可以外部提供。两种方法各有优缺点。

最简单的方法是让设备做它的事情。但是,可能会有麻烦,因为您将让整个系统启动,并且,举例来说,可能有某种看门狗电路期望从主SoC收到信号以显示它实际上已经启动。如果在短时间内未检测到该信号,则看门狗将重新启动系统。然后您将不得不找到该电路并绕过它,这可能比值得的麻烦更多。

另一方面,您可以通过在芯片下方的某些电容器上连接电源(或多个电源,见下文)来仅为eMMC芯片供电。这绕过了电源循环问题,但也需要连接额外的电线。这种方法并非没有缺点:以不受控制的方式提供电源可能会损坏板,因此强烈建议某种形式的电流限制——监视电流消耗,如果太高则中止操作以避免永久损坏。

无论选择哪种选项,请注意这些电源线上可能会有相当大的电流消耗,因为可能连接到VDD电源轨的东西不仅仅是感兴趣的eMMC。使用您的台式电源提供电源是个好主意。在继续之前,我们应该弄清楚系统是使用单个电源还是分开的电源用于VDD和VDDQ电源轨,以及每个所需的电压。在分开电源的情况下,我们可能不知道其他什么东西连接到可能较低电压的VDDQ电源,以及如果我们决定通过连接VDD和VDDQ在一起只使用该电源,它是否会容忍VDD电源;它可能工作正常,或者可能迫使一些魔法烟雾从1000美元以上的被黑设备中逸出。是否接受这种风险取决于个人判断。下面的文本假设风险太高,我们将希望提供两个独立的电源轨。

如图6所示,有几个金属浇注区域(浅绿色区域),较大的区域是地,较小的区域是VDD和VDDQ——在这种情况下连接在一起。

由于VDDQ电压可以通过在系统启动时探测CMD和CLK信号并注意显示的值轻松确定,唯一要做的真正事情是探测eMMC下方的去耦电容器,试图找到不同的、更高的电压,那必须是VDD。或者,如上述情况,您可以目测并用万用表双重检查。

分开的电源和较低的电压也提出了另一个问题。无论使用什么接口设备,都需要适应正在进行的黑客攻击。具体来说,您的接口设备可能支持或不支持被黑设备中使用的较低信号电压。例如,我掌握的接口仅支持3.3V。所有这一切意味着必须使用双向电压电平转换器。

市场上有一些设备可供选择。不幸的是,TI的广泛使用的TXB系列转换器不能使用,因为当信号在任一侧上拉时它们不工作。相反,可以使用TXS系列设备;这已通过实验确认。它们可以以安装在小型PCB上的黑客友好形式购买。然后只是将适配器PCB连接到您的接口和eMMC芯片之间的问题。

问题#3:保持系统其余部分安静

无论您选择哪种方式为eMMC芯片供电,系统的其余部分也可能想要启动行动,无论是全部还是部分,并且可能需要安抚。如果连接到eMMC的任何设备变得通电和活跃,这一点尤其重要。如果您选择启动整个系统而不是仅eMMC,这自然是预期的。仅对eMMC供电可能或可能导致eMMC总线上的活动。这可以通过为eMMC通电并观察CMD线上是否有任何活动来轻松验证;通常它应该上拉到VDDQ并保持那样。

如果被黑系统过于活跃,根据所述系统的设计,可能有几个选项可供选择。

  • 如果还没有,尝试仅通过其下方的电源连接为eMMC供电,而不是整个系统。
  • 如果有丝印信号标签,寻找任何类似于想要与eMMC通信的设备的复位信号。强制断言该信号应保持该设备在复位状态——但其他部分可能对此不满意(参见上文关于看门狗的文本)。复位信号也可以在各种调试连接器甚至硬件复位按钮上找到。
  • 如果与eMMC通信的SoC将此eMMC作为链中的辅助启动设备,例如与串行闪存芯片,看看如何“禁用”该主设备以使系统不启动并陷入循环,而不是触摸eMMC接口。
  • 或者,可以尝试通过篡改晶体来禁用时钟源,例如从板上移除它或将SoC振荡器输入通过低值电阻连接到电源轨。这是否有效可以通过示波器探测来确认。

您的被黑设备上可能还有其他选项;进行实验,看看什么有效!

一旦这个问题解决,您应该搜索DAT0,如果尚未发现,因为一切就绪以促进该努力。之后,好吧,取决于您使用哪种接口,您应该能够自由地与eMMC交互,就像它是您自己机器的一部分:您可以转储它,您可以挂载它,等等。这里唯一的缺点是,如果使用非专用接口,转储非用户区域可能不可能,因为它们不提供切换区域的手段。一旦通过对eMMC用户区域中找到的任何软件的研究和分析获得对被黑实时设备的初始访问,就可以克服这一点。

在我们结束之前,应该提到一些注意事项。最重要的是,记住eMMC芯片是高速设备,因此电线长度应保持在实际最小值。即使这样,由于信号完整性问题,被黑设备可能无法正常工作。在这种情况下,所有信号线需要在您完成对eMMC的篡改后移除,并且您想再次观察设备作为整体的操作。自然,如果需要更多工作,您将不得不重新焊接它们,但这仍然比移除和放回芯片本身容易得多。其次,取决于您的接口,启动和RPMB分区可能无法访问。幸运的是,启动分区通常包含引导程序——可能是U-Boot——并且如果您的研究不旨在绕过安全启动,通常不那么有趣。这些非用户分区的内容可以在获得对OS的访问后稍后获取。

结论

虽然这绝不是与eMMC存储器接口的详尽指南,但我试图纳入工作中迄今为止遇到的所有真实案例。任何问题、补充、更正和其他反馈总是受欢迎的,谁知道呢,也许我们很快就会看到本指南的第二版。同时,我可以提供关于更侵入性技术的进一步阅读的好材料。

您可以在Mastodon上通过@InfoSecDJ联系我,并务必在Twitter、Mastodon、LinkedIn或Bluesky上关注团队,以获取最新的漏洞利用技术和安全补丁。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计