如何转储SMRAMSmmBackdoor内存区域dump技术全解【免费下载链接】SmmBackdoorFirst open source and publicly available System Management Mode backdoor for UEFI based platforms. Good as general purpose playground for various SMM experiments.项目地址: https://gitcode.com/gh_mirrors/smm/SmmBackdoorSmmBackdoor 是首个面向 UEFI 平台的开源 SMM 后门工具它能帮你一键转储dumpSMRAM 内存区域是研究 System Management ModeSMM的绝佳实验场。本文将带你从零基础理解 SMRAM 为什么难读到掌握--dump-smram命令的完整操作流程再到剖析其SW SMI 页搬运的底层原理。一、先搞懂为什么 SMRAM 读不出来SMRAMSystem Management RAM是存放 SMM 代码和数据的高速内存。与普通内存不同CPU 专属只有在 SMM 环ring -2才能访问操作系统内核和普通程序一律读不到受锁保护通过 MSR_SMM_MCA_CAP、MSR_SMM_FEATURE_CONTROL 等寄存器锁定常规读内存接口如 chipsec 的 PCI 配置通道对它无效安全边界厂商用它隐藏固件逻辑普通 dump 工具根本看不见所以想拿到 SMRAM 内容唯一的办法就是让机器自己以 SMM 身份去读——这正是 SmmBackdoor 做的事。二、SmmBackdoor 由什么组成项目结构非常清晰三大组件各司其职组件路径作用UEFI 后门本体SmmBackdoor/目录入口 SmmBackdoor.c驻留在 SMM 中接收 SMI 请求并搬数据预编译驱动SmmBackdoor_X64.efi可直接用作感染负载无需自己编译Python 工具SmmBackdoor.py命令行控制中心感染、检测、转储 SMRAM提权演示程序smm_call/ 目录Linux 下与后门交互获取 root 权限的 PoC整个工具链基于 chipsec 框架用SmmBackdoor.py作为统一入口。三、SMRAM dump 完整操作步骤 ✅⚠️ 请先阅读项目 README.TXT本项目为遗留版本仅在 Intel DQ77KB 主板上实测过请在自己的实验机或虚拟机上操作。步骤 1确认后门已安装并存活如果机器尚未被感染需先按 README 中的Build Infect流程把后门代码注入主板固件通过 SPI 烧录器写入。已安装的情况下先运行检测命令python SmmBackdoor.py --test正常会看到类似这样的回显struct _BACKDOOR_INFO physical address is 0x...后门信息结构体地址SMRAM map:下每一行一个内存区域address / size / state步骤 2一键转储全部 SMRAM 区域核心就一条命令python SmmBackdoor.py --dump-smram工具会自动枚举BACKDOOR_INFO结构体中的EFI_SMRAM_DESCRIPTOR区域描述表合并相邻区域减少 SMI 次数逐页读取并落盘为SMRAM_dump_起始地址_结束地址.bin文件生成的 bin 文件可直接丢进 UEFITool 或 IDA 中分析。步骤 3精读任意物理/虚拟页dump 完整区域后还可以定点查看单个内存页十六进制格式输出python SmmBackdoor.py --read-phys 0x40000000 # 读物理内存页 python SmmBackdoor.py --read-virt 0xffff880000000000 # 读虚拟内存页-s参数可调读取大小默认 0x1000。四、底层原理一页一页搬出来 理解原理才能真正用好这个工具。4.1 数据通道SW SMI 触发 共享缓冲区Python 侧通过 chipsec 发送软件 SMISMI 值0xCC附带控制码如BACKDOOR_SW_DATA_READ_PHYS_PAGE和参数SMM 侧的定时器分发回调PeriodicTimerDispatch2Handler轮询保存的寄存器上下文识别出后门协议包后调用 SmmCallHandle() 处理请求读出的页数据先放进BACKDOOR_INFO结构体后面预留的 4K 缓冲区EfiRuntimeServicesData页操作系统再经由普通物理内存通道把它取走这套页搬运设计的好处是操作系统只读写普通内存完全绕开了 SMRAM 的保护边界。4.2 关键结构体 BACKDOOR_INFO定义在 SmmBackdoor.h 中是双方通信的公告板CallsCount // 已处理的 SMI 次数 TicksCount // 定时器心跳数 BackdoorStatus // 最后一次操作的状态码 SmmMcaCap // MSR_SMM_MCA_CAP 值 SmmFeatureControl // MSR_SMM_FEATURE_CONTROL 值 SmramMap[] // SMRAM 区域描述链表起始地址/大小/状态其物理地址保存在 EFI 变量SmmBackdoorInfo中Python 工具启动时先读变量、再读内存。4.3 虚拟地址的障眼法页表重映射读物理页时SMM 侧无法直接访问 OS 的缓冲区地址不同页表于是 virtmem.c 里的VirtualAddrRemap()登场它把一块哑页的 4K/2M 页表项临时改指向目标物理页拷贝完数据再还原映射并刷新 TLB。整个过程对操作系统完全透明——这是能跨页表搬数据的精髓所在。4.4 两种 dump 模式模式触发条件数据路径快速模式状态码为0xFFFFFFFFBACKDOOR_INFO_FULL数据已预存于结构体直接整块读取常规模式状态码为其他值每页发一次 SW SMI 命令实时搬运五、命令速查表 ⚡命令说明--infect 文件 --payload efi --output 输出用后门代码感染 DXE 驱动 PE 镜像--test检测后门是否存在并打印状态--dump-smram转储全部 SMRAM 区域到文件本文主角--read-phys 地址/--read-virt 地址十六进制打印指定内存页--timer-enable/--timer-disable开关周期性 SMI 定时器六、常见问题与注意事项只测试于 Intel DQ77KB其他 UEFI 硬件上部分特性尤其 smm_call 提权可能失效需要 chipsec pefilePython 环境须安装这两个库才能运行构建需要 Windows VS2008 EDK2想修改后门代码按 README 的 6 步流程编译安全提醒修改固件有变砖风险务必保留原始 SPI 备份请在自有设备上实验结语SmmBackdoor 用不到 2000 行 C 代码就实现了OS 请求 → SMI 唤醒 → SMM 搬运 → 普通内存取回这条 SMRAM dump 全链路配合SmmBackdoor.py --dump-smram一条命令即可完成转储。对于想深入 SMM 攻防、UEFI 固件分析的研究者这个项目是最直观、最完整的开源教学样本。【免费下载链接】SmmBackdoorFirst open source and publicly available System Management Mode backdoor for UEFI based platforms. Good as general purpose playground for various SMM experiments.项目地址: https://gitcode.com/gh_mirrors/smm/SmmBackdoor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考