[控场AI]
· 6 分钟阅读· 3,135 字

AI用15分钟破解戴尔显示器固件:逆向工程门槛正在消失

AI用15分钟破解戴尔显示器固件:逆向工程门槛正在消失

AI在15分钟内完成戴尔显示器固件的定位、密钥提取与解密,揭示固件安全根本缺陷。

一位漏洞研究员用AI分析戴尔S34R显示器固件升级包,AI在约15分钟内完成了传统人工需一周的逆向工程:从DLL虚函数表中提取密钥,编写Python脚本解密固件,并通过MD5校验、熵分析和复位向量验证结果正确。实验表明,AI能高效压缩逆向工程中的假设生成与验证循环,且根本缺陷在于厂商将加密固件与解密DLL一同分发给用户。作者认为,固件逆向能力正被商品化,漏洞发现门槛降低,硬件安全需从软件混淆转向芯片级密钥保护。

一位底层漏洞研究员最近做了一次实验:用AI分析戴尔S34R 34英寸显示器的固件升级包,从中定位并解密固件镜像。这个流程过去需要他全职投入一周左右,而AI在约15分钟内跑完了全程——包括识别加密库、还原C代码、提取密钥、编写解密脚本,以及用MD5自校验证明解密正确。据B站原视频作者自述,他长期对AI持怀疑态度,但这次实验让他"有点害怕"。

显示器固件里藏着什么

显示器不只是输出画面。它内部有一块固件,负责处理HDMI指令解析、视频处理,以及部分型号的无线功能。作者的目标是从戴尔官网下载的固件升级工具(一个自解压exe)中,反向找到真正刷入显示器的固件镜像,进而发现可被利用的漏洞,最终在显示器上实现代码执行。

传统流程依赖binwalk这类工具对二进制做递归提取,从exe中拆出升级文件(按型号编号命名)和一个名为Dell ISP Library的DLL。这个DLL负责上传和下载固件,也会告诉研究者真正的代码藏在升级文件的哪个偏移位置。

固件加密的熵分析可视化

问题在于固件通常被加密。作者用binwalk的熵分析功能生成分布图,看到所有边缘都接近0.96——数据足够随机,说明文件已加密。没有密钥,逆向就卡在这里。

密钥藏在DLL的虚函数表里

突破口是Dell ISP Library。作者在NSA开源的逆向工程框架Ghidra中打开这个DLL,找到一个名为EncryptDecryptMethod的函数,其虚函数表下有九个函数,各自执行不同操作。其中一些处理看似随机的数据,作者凭经验认出这是密钥特征的信号。

EncryptDecryptMethod虚函数表中的九个函数

但继续往下看,大量for循环、用其他结构体字段填充随机结构体的操作,让整个逻辑变得难以维持清晰的认知模型。这正是传统逆向工程的代价:逐个函数推演、猜测、提出假设并验证,压缩对程序行为的不确定性。作者说,这种工作"不会凭空发生",需要数天甚至数周的反复试探。

虚函数表(vtable) 是C++实现运行时多态的核心机制。当一个类包含虚函数时,编译器会为该类生成一张函数指针数组,即虚函数表,每个虚函数占据表中的一个槽位。对象实例的内存布局中,起始位置通常存放一个指向该表的指针(vptr)。通过虚函数表,程序可以在运行时根据对象的实际类型调用对应的函数实现,而无需在编译期确定。在逆向工程中,虚函数表是定位关键逻辑的重要线索:攻击者或研究者可以通过分析vptr找到虚函数表,进而枚举出所有虚函数地址,快速梳理出类的行为轮廓。文中提到的EncryptDecryptMethod函数,其虚函数表下包含九个函数指针,分别指向不同的加密或解密操作。这种设计常见于策略模式或命令模式,将算法族封装为独立的类,通过虚函数表实现动态切换。逆向时,识别虚函数表可以帮助研究者跳过大量样板代码,直接聚焦于核心算法,从而加速密钥提取或漏洞定位。

熵分析 是评估数据随机性的统计方法,常用于判断文件是否被加密或压缩。熵值越高,数据越随机;对于完全随机的字节流,熵接近8比特/字节。在固件分析中,研究者常使用binwalk等工具的熵分析功能生成可视化图表,展示文件中各区域的熵分布。如果某区域熵值接近最大值(如图中边缘接近0.96),则强烈暗示该区域数据已加密或压缩,因为明文代码或结构化数据通常具有较低的熵。熵分析不仅用于识别加密边界,还可辅助定位压缩数据块或隐藏的嵌入文件。然而,熵分析只能提供概率性指示,无法区分加密与压缩,需结合其他手段(如文件头识别、密钥搜索)进一步确认。文中作者通过熵分析快速判断固件被加密,为后续逆向指明了方向。

AI的15分钟:从识别到自校验

作者给AI的指令极简:在这个镜像里找到固件,识别固件中的HDMI命令解析器,固件可能是加密的。就这些。

AI的推进过程被作者完整记录。在约13分51秒的节点,它把二进制文件提升为类C代码——在缺少源码的情况下推测厂商原本的写法,并识别出与DLL中相同的函数。它注意到某个函数里存在创建密钥块的构造函数,另一个函数则用密钥块数据执行密码运算,于是提取出密钥,用Python在不到一分钟内写出解密UPG文件的脚本,随后不到40秒完成首次解密并报告"解密已确认"。

AI提取密钥并编写解密脚本的过程

作者的第一反应是怀疑:怎么确定真的解密成功,而不是模型在编造函数?AI接着做了决定性检查——解密后的镜像在偏移量ECD处带有MD5,相关字段清零后由DLL对明文计算得出。它写脚本定位该字段、清零、对整个镜像做MD5并比对,结果一致。它还做了统计熵分析,确认某些模式包含0和FF,符合固件刷写明文的语义预期;判断反汇编代码与显示器内部微控制器MSP430(原文口播为"MSAR8051",应为口误)相符;并确认镜像开头的正确偏移处有有效的复位向量。

验证结果:不是幻觉

作者强调这些结果可以人工复核。进入解密后的镜像,能看到显示器的有效型号、具体构建版本和元数据;在原本非重复的镜像中出现0208之类的重复模式,提示函数指针表等结构性内容;镜像末尾的FF模式则符合闪存空闲态为高电平的特征。他判断GLM-5.3(原文口播)只用了3分15秒完成这一轮,结果看起来正确。

镜像中出现的重复模式与闪存结构特征

MD5自校验 是一种利用MD5哈希函数验证数据完整性的机制。MD5将任意长度输入映射为128位(16字节)固定输出,通常以32位十六进制字符串表示。在固件更新流程中,厂商常在镜像的特定偏移处存放MD5值,用于刷写前验证解密或传输后的数据是否正确。验证时,需将存储的MD5字段清零(避免自包含影响),然后对剩余数据计算MD5,并与存储值比对。文中AI在偏移量ECD处发现MD5字段,通过清零、计算、比对,确认解密后的镜像与预期明文一致。这一步骤至关重要,因为它提供了密码学层面的证据,排除了模型“编造”函数或输出错误结果的可能性。MD5虽已不适用于安全敏感场景(存在碰撞攻击),但在完整性校验中仍广泛使用,尤其在对实时性要求不高的固件更新中。

真正的缺陷:密钥被交给了用户

作者指出,问题的根源不在AI,而在设计。如果目的是保护戴尔的知识产权,那么把加密内容和负责解密的DLL一起交给用户,本身就是架构上的缺陷——密钥虽被加密藏匿,却随软件包分发给任何人。正确做法应是将解密密钥固化在主板微控制器的ROM中,让固件刷写后仍在芯片内部完成解密,且密钥无法从MCU提取。

这次实验的意义在于:去混淆、拆解设计不良的二进制、定位漏洞的能力,正在被商品化。过去需要高技能研究者数天到一周完成的工作,现在任何人都可能做到。作者的结论很直接——会有更多漏洞被发现,因为发现漏洞的人变多了。

对安全行业的含义

AI在这里扮演的角色类似计算器之于算术:它不替代判断,但把假设生成和验证的循环压缩到人类跟不上的速度。当模型能以分钟级完成符号还原、密钥提取和自校验,固件安全将更依赖芯片级密钥保护而不是软件层的混淆。对于硬件厂商,这意味着"把加密包发给用户"的策略需要重新评估;对于安全从业者,这意味着漏洞研究的产能瓶颈正在从技能转向创意与目标选择。

#AI逆向工程#固件安全#戴尔显示器固件#固件解密#漏洞研究#Ghidra#AI安全
分享:

相关推荐