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工具, 固件研究, 客户端加密, 底层硬件