ccc007ccc/MECHREVO-WUJIE15-Pro-UMA-Tool
GitHub: ccc007ccc/MECHREVO-WUJIE15-Pro-UMA-Tool
该工具用于机械革命无界 15 Pro 笔记本的 AMD UMA/核显预留显存 NVRAM 变量的只读检查与安全恢复。
Stars: 0 | Forks: 0
# 机械革命无界 15 Pro UMA 变量研究与恢复工具
[English](README_EN.md)
面向中国市场机械革命无界 15 Pro 的 AMD UMA/核显预留显存变量研究项目。当前版本提供只读检查、保护变量认证删除测试、8 GiB 恢复,以及 10/12/14/15.5/16 GiB 的实验性请求值写入器。
## 已验证机器
| 项目 | 值 |
| --- | --- |
| 机型 | 机械革命无界 15 Pro(中国市场核显版) |
| CPU / iGPU | AMD Ryzen 7 8845HS / Radeon 780M |
| 内存 | 32 GiB |
| BIOS | `T153_HPT_V05` |
| BIOS 日期 | `2024-09-25`(BIOS 页面;系统 DMI 可能显示前一天) |
| EC | `EC.05` |
| 已确认恢复值 | `0x2000` MiB,即 8 GiB |
只在上述固件布局上完成真机验证。即使机型名称相同,其他 BIOS/EC 版本也应先做只读检查和独立分析。
## 当前状态
| 请求值 | NVRAM 写入/读回 | 重启后实际 VRAM | 定位 |
| ---: | --- | ---: | --- |
| 8 GiB (`0x2000`) | 已验证 | 8 GiB | 恢复档 |
| 10 GiB (`0x2800`) | 已验证 | 8 GiB | 实验档,无实际增益 |
| 16 GiB (`0x4000`) | 已验证 | 8 GiB | 实验档,无实际增益 |
| 12/14/15.5 GiB | 已生成,未逐项验证 | 预计受同一固件逻辑钳制 | 仅研究 |
## 快速使用
先阅读 [安全说明](docs/SAFETY_ZH.md)。推荐只执行只读检查;仅当你确实需要把之前的实验值恢复为 8 GiB 时才执行恢复档。
1. 准备可进入 UEFI Shell 的 FAT32 U 盘,并按需关闭 Secure Boot。
2. 把 `dist/` 中的 `.efi`、`.nsh` 和 `SHA256SUMS` 复制到 U 盘同一目录。
3. 进入 UEFI Shell,切换到 U 盘文件系统,例如 `fs0:`。
4. 运行只读检查:
r.nsh
5. 只有在输出与本文的 GUID、大小、属性和布局完全一致,且需要恢复时,运行:
restore.nsh
6. 工具显示 `WRITE PASS` 后重启。回到 Linux 执行:
./scripts/linux/inspect-current.sh
`restore.efi` 会在同一次启动中完成认证删除保护、写入 `0x2000`、读回校验。不要先运行 `u.nsh` 再运行恢复档;`u.nsh` 只是单独验证保护机制,运行后应直接重启。
## 文件说明
| 文件 | 行为 |
| --- | --- |
| `r.efi` / `r.nsh` | 只读 `AmdVariableProtection` 与 `AmdSetupPHX`,程序中没有 `SetVariable` 调用 |
| `u.efi` / `u.nsh` | 只认证删除保护变量,不写 UMA;仅用于研究 |
| `restore.efi` / `restore.nsh` | 恢复 UMA 请求值为 8 GiB,推荐的唯一写入档 |
| `w10`…`w16` | 实验性请求值;不代表实际 VRAM 会增加 |
| `startup.nsh` | 只显示帮助,不自动执行任何写入 |
## 写入器的安全检查
写入前必须同时满足:
- `AmdVariableProtection` GUID、大小、属性和值完全匹配;
- `AmdSetupPHX` GUID 为 `3A997502-647A-4C82-998E-52EF9486A247`;
- 数据大小为 `0x67F`,属性为 `0x07`;
- `0x17C == 0x01`,`0x17D == 0x0F`;
- 当前值和目标值都在项目白名单内;
- 内嵌认证包大小为 `0x398`,构建时 SHA-256 必须匹配。
任意一项不符都会显示 `PRECHECK FAILED`,并且不改变量。写入后会立即重新读取整个变量;验证失败时会尝试写回本次操作前的原值。
## 构建
在 Arch Linux/SteamOS 的开发容器中安装 `clang`、`lld`、`gnu-efi`、`make` 和 `coreutils`,然后:
make clean
make
file dist/*.efi
(cd dist && sha256sum -c SHA256SUMS)
产物是 Clang MSVC 目标加 `lld-link` 生成的原生 x86-64 PE/COFF EFI Application,不依赖 GNU-EFI 启动包装。详细步骤见 [构建文档](docs/BUILD_ZH.md)。
## 技术结论
`AmdSetupPHX` 的相关布局:
| 偏移 | 长度 | 已观察值 | 含义 |
| ---: | ---: | ---: | --- |
| `0x17C` | 1 | `0x01` | `UMA_SPECIFIED` |
| `0x17D` | 1 | `0x0F` | UMA 版本选择 |
| `0x17E` | 4 | little-endian MiB | Framebuffer 请求值 |
参考固件 IFR 的帮助文本明确说明:如果请求的 UMA carveout 无法满足,算法会不断尝试请求值的一半。真机结果进一步说明,本机固件还会把非菜单/超上限请求归入最高 8 GiB 的有效档位。完整过程见 [研究记录](docs/RESEARCH_ZH.md)。
## Linux 下的 BIOS 读取结论
Linux 可以导出 EFI 变量、ACPI、VBIOS 和当前加载的固件模块,但本机内部整颗 SPI 读取未成功:
- `flashrom 1.7.0` 识别到 `AMD FP4`,随后报告 SPI BAR 无效、可能启用 ROM Armor、找不到闪存芯片;
- AMD PSP debugfs 的 `psp_spirom_dump` 返回 `EINVAL`,内核记录 `Trying IFWI dump fails, err = -22`。
因此本项目不声称能够在 Linux 下导出或安全回刷完整 BIOS。需要完整 SPI 备份时,应使用外置编程器和正确电气连接,或继续研究该平台的 IHISI/SMM 路径。
## 来源与许可
项目原创源码、脚本和文档使用 MIT License。构建所需的 920 字节厂商签名认证载荷不属于原创代码,不由 MIT 重新授权;详见 [NOTICE](NOTICE) 与 [payloads/README.md](payloads/README.md)。仓库不包含任何完整宏碁/机械革命 BIOS、更新程序、驱动、运行时内存转储、序列号或个人图片。
本项目与机械革命、宏碁、AMD、Insyde 无隶属或背书关系。
标签:AMD核显, BIOS修改, NVRAM, UEFI工具, 固件研究, 客户端加密, 底层硬件