嵌入式多媒体卡(eMMC)系统内数据提取技术解析

本文详细介绍了如何在无需移除芯片的情况下,通过硬件接口和信号分析技术,提取嵌入式多媒体卡(eMMC)中的数据。内容包括信号定位、电源管理、系统隔离等关键技术步骤。

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

2025年6月20日 | Dmitry Janushkevich

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

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

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

先决条件

首先,基础知识。以下是为了能够完成任何任务所必需的:

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

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位。

更高的速度 often necessitate eMMC总线所有信号的串联电阻。这导致eMMC设备被8个或更多电阻 closely surrounded,这些电阻是极好的接触点。eMMC标准还建议所有线通过电阻上拉到VDDQ,以确保信号水平 well defined。

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

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

在我们连接到任何东西之前,我们需要理解 exactly 连接什么。如果你幸运,设备PCB有丝印标记,注明一些或所有eMMC信号位置。

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

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

一个人也可以将封装引脚覆盖在板照片上,以 approximately identify 感兴趣信号的位置。

这个调查练习应该留给你一组eMMC信号的潜在候选。现在我们需要淘汰它们。最简单的方法可能是用一些磁线 tap 所有候选,并使用逻辑分析仪观察被黑设备启动时的活动。

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

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

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

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

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

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

问题#2:为eMMC芯片供电

当然,你的eMMC芯片需要供电 before 你可以做任何事情。这个电源可以由被黑设备本身提供,也可以外部提供。两种方法都有其优缺点。

最简单的方法是让设备做它的事情。然而,可能会有麻烦,因为你将让整个系统启动,并且,举个例子,可能有某种看门狗电路期望从主SoC收到信号以显示它实际上已经启动。如果这个信号在短时间内没有被检测到,那么看门狗将电源循环系统。你将不得不找到那个电路并绕过它,这可能比它的价值更麻烦。

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

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

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

由于VDDQ电压可以通过在系统启动时探测CMD和CLK信号并注意显示的值 easily determined,唯一真正要做的是探测eMMC下的去耦电容器,试图找到一个不同的、更高的电压,那 then 必须是VDD。或者,如上述情况,你可以 eyeball 它并用万用表 double check。

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

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

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

无论你选择哪种方式为eMMC芯片供电,系统的其余部分也可能想要启动行动,无论是全部还是部分,并且它可能必须被安抚。如果连接到eMMC的任何设备将变得供电和活跃,这一点尤其重要。这 naturally expected 如果你选择启动整个系统而不是只启动eMMC。只启动eMMC may or may not 导致eMMC总线上的活动。这可以通过启动eMMC并观察CMD线上是否有任何活动 easily verified;通常它应该上拉到VDDQ并保持那样。

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

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

你的被黑设备上也可能存在其他选项;做实验,看看什么有效!

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

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

结论

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

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

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