首页
社区
课程
招聘
[原创] Intel 酷睿 CPU Management Engine 固件研究与分析逆向 (一) 前置准备与解包
发表于: 2026-5-22 00:40 12567

[原创] Intel 酷睿 CPU Management Engine 固件研究与分析逆向 (一) 前置准备与解包

2026-5-22 00:40
12567

此帖是记录笔者研究Intel Management Engine 以及 Intel-SA-00086 安全漏洞的记录笔记。笔者也不知道能研究多深入,所以研究一点是一点,顺便发出来也给各位大佬参考以及讨论。(也是下班给自己找点事做,上班一直做Agent开发太无聊了)

基于之前Kaokao那篇文章(具体可以去看github或者其他平台由相关参考)。Github仓公开爆料的是TXE平台,并没有我们常规的酷睿平台。由于在国内外网站没找到一模一样的硬件并且Intel和华硕官网都找不到相关硬件的固件和资料想要复现极难。
我的平台的选择:
主板:华硕 Rog Z370 -F Game
Cpu:i7 8700k
Management Engine 版本:11.7.4 (根据Intel-SA-00086 说明影响最后一个版本是 11.8.50.3399)
CH341A Pro编程器(华硕有8Ping接口可以不用买夹子)
线缆:Usb3.0 A to A 线 或 Intel SVT DCI DbC2/3 A-to-A
展示一下我的硬件平台实验台:
图片描述
AMD散热器散热Intel CPU HHH:
图片描述

图片描述
抬起拉杆把转接器按照顺序插入最后压下压杆就行了,非常简单。

首先我们需要找到SPI芯片,并且Dump当前Bios中的数据。
图片描述
这里需要注意的是,如果是华硕的主板是自带8PING接口的,所以可以直接使用转8Pin线来dump。如果是其他匹配则需要夹子夹在主板上。华硕主板接口顺序0号位是有一个白色角的,这一点要注意别接反了烧。
图片描述

使用我们的NeoProgrammer工具Dump下来我们的文件
图片描述
点击这个位置进行时保存就可以保存

首先我们需要对dump数据进行解包,并且拿到我们的bios分区。在主板中并没有开启DCI接口的选项,所以我们需要通过魔改Bios来做到。
首先根据 Intel SPI Flash 规范可以写一个检查脚本。规范可以查询文档:Intel® 100 Series and Intel® C230
Series Chipset Family Platform Controller Hub (PCH)。这里我用AI和我自己写的PDF MCP 让AI扫描了一下快速了解了一下内存布局。

整理一下就如上表格,主要有魔术字段和FLMAP0偏移以及Region Table组成。有这些才能把Bios从Bin中切出来。
解析一下拷贝出来的固件:
魔术字:
图片描述
FLMAP0:
图片描述
说一下如何解析:

注意这个04实际上就是Offset指向 Region Table表。算法就是 0x04 << 4 = 0x40
图片描述
根据顺序来说第一个是FD,从00开始,第二个是Bios区域,第三个是ME, 第四个是GbE。在白皮书中可以找到对应的解释:
图片描述
Region Table 解析规则如下:

所以地址就是0X280000,范围是 0XFFFFFF:
图片描述
图片描述
接下来使用 uefi-firmware-parser 将 我们的固件进行解包,注意是整个固件,不需要手动切块:
图片描述
图片描述
ME和Bios区:
图片描述
FFS介绍:

解包出来就是这个:
图片描述
FFS的命名是GUID标注,也就是不同厂家里面的GUID都是一样的属于标准了。FFS说白了就是Bios的各种模块的标准,主板厂太多了,标准必须要统一。
899407d7-99fe-43d8-9a21-79ec328cac21 这个GUID 是 AMI Setup FFS的,我们需要的DCI的选项就在这个里面。
AMI FFS结构如下:

图片描述
图片描述
FFS 里有 2 个 section:

核心实际上就是这个:section0.pe
图片描述
标准的4D5A PE头。

我们的核心就是解析 String Package 和 Forms Package 并且将他们映射起来,就能找到我们想要的开关。
解析所有字符串找到和DCI有关系的字符串:
这里就让Ai给我写了一个解析脚本:

找到对应的dci的偏移值:

图片描述
具体如何解析的可以看代码。
接下来就需要找到 0x904 在哪,这个解析出来的不是 文件office,是NVRAM容器格式的偏移。
NVRAM 容器的Guid是: cef5b9a3-476d-497f-9fdc-e98143e0422c。而我们需要修改的是他出厂的默认设置:

首先需要解析 AMI NVAR 的私有格式。好在通过Ai搜寻 UEFITool 源码中是有参考的。这里写了一个脚本来寻找并且Patch一下:
图片描述
解析代码如下:

这里已经解析并且计算出真实的偏移是多少,由于NVRAM 容器是没有被压缩,就可以在对应文件中进行patch就完事了这里具体不展开了。
接下来就是刷入固件然后启动。到现在为止,我们才有资格调试ME.在KAOKAO中由于他那个设备是默认就开启了这些接口所以不需要任何Patch技术就可以解锁了。
刷入:
图片描述

两个方案:

因为uefi-firmware-parser 解包出来得缺少body(说白了切得时候少切了内容,这也是我遇到的一个坑)。我们需要使用UEFIExtract 进行解包:
图片描述
body本身是压缩算法处理过的,这里写一个解密脚本用来解密一下body,代码如下:

字典参考:57dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6H3N6s2u0W2M7$3g2S2M7X3y4Z5i4K6u0r3N6h3&6y4c8e0p5I4 这个项目。


[内核课程]《Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

收藏
免费 0
打赏
分享
最新回复 (11)
雪    币: 121
活跃值: (1385)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大佬加个联系方式
2026-5-22 10:21
0
雪    币: 1342
活跃值: (6785)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
大佬是搞出了ME调试能力,还是用的硬件仿真,还是只静态分析?
2026-5-25 16:26
0
雪    币: 2461
活跃值: (1595)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
qj111111 大佬是搞出了ME调试能力,还是用的硬件仿真,还是只静态分析?
对方向就是 搞ME调试,真机玩
2026-5-25 17:26
0
雪    币: 5153
活跃值: (5897)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
感谢分享。
2026-5-25 17:33
0
雪    币: 208
活跃值: (3089)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不是 大佬 我有个问题 你把dci打开之后回刷回去 固件签名不通过是咋启动的啊
2026-5-29 15:00
0
雪    币: 1342
活跃值: (6785)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
BitWarden 对方向就是 搞ME调试,真机玩
太牛了,我想搞Dci,买了线实在找不到软件授权,到处找,最后在52pojie论坛找到一款主板授权,可惜那位也没搞出来DCI真机调试
2026-5-30 11:50
0
雪    币: 2461
活跃值: (1595)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
华硕的设备简单点 我买了好多设备一点一点尝试 目前找到z270是可以完美复现kaokao的那个文章的
2026-5-30 15:00
0
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
...
2026-6-4 03:52
0
雪    币: 2461
活跃值: (1595)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
10
wx_0xC05StackOver 不是 大佬 我有个问题 你把dci打开之后回刷回去 固件签名不通过是咋启动的啊
我只是修改了dci的开关的默认预设标志位,这个没有签名保护。
2026-7-3 11:44
0
雪    币: 2461
活跃值: (1595)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
11
wx_0xC05StackOver 不是 大佬 我有个问题 你把dci打开之后回刷回去 固件签名不通过是咋启动的啊

之前我还特意去逆向分析了一下,me以及bios的签名的位置,确认了。所以才这么搞。在还有个思路就是修改bios中本身dci的变量的值,本身就是dump出来的,是可以强刷的。这一带主板本身就是自带dci,只是华硕在ui上不显示,这个国外社区也有讨论和复现。用设备强刷进去就行了。而且z270这一带还可以强制降低版本.后续测试中usb的设备管理器以及弹出来了。最近比较忙,没接着玩下去了hh。

再补充一下:

再就是我记得kaokao好像也是改了bios,还是主板自带开关。受保护的就是me自身的代码区还有bios中各个模块的代码区。后续我可以把这部分放出来。整个me的bup和reb都分析完了。me的固件校验是在reb中。reb大概流程是这样的:

1. 初始化 SRAM 工作区 + 建立 ME MMU 页表

2. 写入 PCH MMIO 寄存器初始配置(27 对 addr/value)

3. 检测启动模式(正常 / S3 / S4 / MFG)

4. 从内存目录定位 `bootpart` / `ftpr.mft` / `boot_fpt` 三个关键引导数据源

5. DMA 加载引导数据(SPI flash → SRAM,通过 ROM 服务 `0xFFFC9064`)

6. 等待 PCH GPIO 握手信号(`0xF5038008`)

7. 把 PCH Device ID 写入内存目录

8. 验证 boot manifest(magic `"Boot"` / `0x426F6F74`,版本校验)

9. 遍历模块加载表(`0x42ABC`),为每个模块分配槽位

10. 把 `boot_cfg` 发布到内存目录

11. 校验已加载模块注册表

12. 跳入 BUP(写 `0x08000328` handoff target,JMP 到 `0x400CD` 共享尾部)


最后于 2026-7-3 11:55 被BitWarden编辑 ,原因:
2026-7-3 11:48
0
雪    币: 2461
活跃值: (1595)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
12


1

最后于 2026-7-3 11:54 被BitWarden编辑 ,原因:
2026-7-3 11:53
0
游客
登录 | 注册 方可回帖
返回