DMA攻击技术Skill dma-attack-techniques

这个技能提供了直接内存访问(DMA)攻击技术的全面指南,专注于使用FPGA硬件进行PCIe DMA攻击,包括pcileech框架的应用、FPGA固件开发和硬件级内存访问方法。适用于游戏安全研究、反作弊绕过和网络安全测试,帮助研究人员理解DMA攻击原理、工具使用和实现技术。关键词:DMA攻击、FPGA、pcileech、游戏安全、内存访问、反作弊、网络安全、硬件攻击。

逆向工程 0 次安装 0 次浏览 更新于 3/13/2026

名称: dma-attack-techniques 描述: 使用FPGA硬件进行直接内存访问(DMA)攻击技术的指南。在研究PCIe DMA攻击、pcileech、FPGA固件开发或游戏安全研究的硬件级内存访问时使用此技能。

DMA攻击技术

概述

这个技能涵盖了来自awesome-game-security集合的直接内存访问(DMA)攻击资源,重点关注基于FPGA的PCIe攻击、pcileech使用和硬件级内存访问技术。

DMA基础知识

什么是DMA攻击?

DMA攻击利用PCIe设备直接访问系统内存而无需CPU参与的能力。攻击者可以:
- 读取任意物理内存
- 写入物理内存
- 绕过基于软件的保护
- 对操作系统级检测保持不可见

硬件要求

- FPGA开发板(Xilinx/Altera)
- PCIe接口能力
- 足够的逻辑资源
- 开发环境

pcileech框架

概述

pcileech是用于基于DMA的内存访问的主要框架:

  • 开源内存取证工具
  • 支持多种FPGA板
  • 广泛的插件生态系统
  • 活跃的开发社区

支持的硬件

- Screamer PCIe(Xilinx Artix-7)
- PCIe Squirrel
- AC701(Xilinx Artix-7)
- SP605(Xilinx Spartan-6)
- 自定义FPGA板

基本用法

# 内存转储
pcileech dump -out memory.raw -min 0 -max 0x200000000

# 进程列表
pcileech pslist

# 读取特定地址
pcileech read -a 0x12345000 -l 0x1000

# 写入地址
pcileech write -a 0x12345000 -v 0x41414141

FPGA固件

开发工具

- Vivado(Xilinx)
- Quartus(Intel/Altera)
- 开源工具链

固件特性

- TLP数据包生成
- 配置空间模拟
- MSI/MSI-X中断处理
- DMA读/写实现

反检测特性

- 设备ID欺骗
- 供应商ID伪装
- 序列号随机化
- 能力结构模拟

设备模拟

常见模拟目标

- 网络适配器(Intel I210/I226)
- 存储控制器
- USB控制器
- 声卡

模拟要求

1. 正确的PCI配置空间
2. 适当的能力结构
3. BAR(基地址寄存器)设置
4. 中断处理

示例:网络适配器模拟

- 模拟Intel I210网卡
- 正确的设备/供应商ID
- PHY寄存器模拟
- 最小功能以实现检测规避

内存访问技术

物理内存读取

// 典型的pcileech API用法
HANDLE hDevice;
BYTE buffer[0x1000];

// 读取物理内存
pcileech_read_phys(hDevice, physAddr, buffer, sizeof(buffer));

虚拟地址翻译

// 遍历页表以将虚拟地址转换为物理地址
PHYSICAL_ADDRESS TranslateVA(UINT64 cr3, UINT64 virtualAddr) {
    // PML4 -> PDPT -> PD -> PT -> 物理
    UINT64 pml4e = ReadPhys(cr3 + PML4_INDEX(virtualAddr) * 8);
    UINT64 pdpte = ReadPhys(PFN(pml4e) + PDPT_INDEX(virtualAddr) * 8);
    UINT64 pde = ReadPhys(PFN(pdpte) + PD_INDEX(virtualAddr) * 8);
    UINT64 pte = ReadPhys(PFN(pde) + PT_INDEX(virtualAddr) * 8);
    return PFN(pte) + PAGE_OFFSET(virtualAddr);
}

DTB(目录表基址)查找

- 扫描物理内存以查找有效的CR3值
- 查找内核结构
- 使用签名扫描
- 验证页表条目

工具集成

Cheat Engine DMA插件

- 用于DMA访问的CE服务器
- 通过DMA读取进程内存
- 远程调试能力

ReClass DMA

- 结构重建
- 实时内存查看
- 指针扫描

自定义实现

- DMA库(DMALib)
- 最小虚拟机库
- 游戏特定作弊

反作弊绕过

为什么DMA能绕过反作弊

1. 无需进程附加
2. 无可疑API调用
3. 无需内核驱动程序
4. 无代码注入
5. 在操作系统级别以下操作

限制

- 某些实现仅支持读取
- 可能基于时序检测
- 硬件指纹识别
- 内存加密(在较新系统上)

检测方法

- PCIe设备枚举
- IOMMU/VT-d监控
- DMA缓冲区分析
- 性能计数器异常

高级技术

无线DMA

- pcileech-wifi:无线网卡模拟
- 远程内存访问
- 扩展范围操作

SMM(系统管理模式)

- Ring -2执行
- 最高特权级别
- 极其隐秘
- 复杂实现

VMD控制器模拟

- 虚拟管理设备
- 隐藏在Intel VMD后面
- 复杂的检测规避

固件开发指南

项目结构

/firmware
├── src/
│   ├── pcie_core.v       # PCIe核心
│   ├── tlp_handler.v     # TLP处理
│   ├── dma_engine.v      # DMA实现
│   └── config_space.v    # 配置模拟
├── constraints/
│   └── board.xdc         # 引脚约束
└── scripts/
    └── build.tcl         # 构建脚本

关键组件

// TLP数据包处理
module tlp_handler (
    input wire clk,
    input wire [127:0] rx_data,
    output reg [127:0] tx_data,
    // DMA接口
    output reg [63:0] dma_addr,
    output reg [31:0] dma_data,
    output reg dma_read,
    output reg dma_write
);

安全注意事项

道德使用

- 仅用于安全研究
- 授权测试环境
- 负责任披露
- 法律合规

风险意识

- 需要物理硬件访问
- 可能导致系统不稳定
- 可能被高级反作弊检测
- 法律影响

资源组织

README包含:

  • pcileech及其衍生工具
  • FPGA固件项目
  • DMA库
  • 集成工具
  • 设备模拟固件
  • 反检测实现

数据源

重要:此技能提供概念指导和概述信息。对于详细信息,包括:

  • 特定的GitHub仓库链接
  • 完整项目列表及描述
  • 最新工具和资源
  • 代码示例和实现

请从主仓库获取完整数据

https://raw.githubusercontent.com/gmh5225/awesome-game-security/refs/heads/main/README.md

主README包含数千个按类别组织的精选链接。当用户请求特定工具、项目或实现时,从此源检索并参考适当部分。