acageduser/DMA-Attack-Firmware-Customization

GitHub: acageduser/DMA-Attack-Firmware-Customization

Stars: 177 | Forks: 23

# DMA-Attack-Firmware-Customization ### 执行摘要 本指南提供了一种使用 [LambdaConcept 的 PCIe Screamer Squirrel DMA 板](https://shop.lambdaconcept.com/home/50-screamer-pcie-squirrel.html) 进行 **硬件混淆的综合方法**。该项目涉及模拟 DMA 卡以避免被反作弊系统检测,将其伪装成 [Realtek RTL8111](https://www.aliexpress.us/item/3256805896010027.html) PCIe 以太网卡。这是网络安全中的一项关键技术,为保护高价值硬件免受自动检测系统的侵害提供了创新方法。 # 展示的关键技能 - **Firmware 开发:** 定制和修改 Firmware 以实现特定目标。 - **硬件操控:** 利用 FPGA 技术模拟不同的硬件配置。 - **网络安全:** 实施先进技术以防止被复杂的反作弊系统检测。 - **项目管理:** 全面记录项目,确保可复现性和清晰度。 # # ## 目的 #### 战略基本原理 专注于规避像 BattleEye (BE) 和 Easy Anti-Cheat (EAC) 这样的反作弊系统,反映了复杂黑客组织的复杂性和组织性。这些系统由聪明的专业人员开发,资金充足,是测试先进规避技术的理想场所。成功绕过如此强大的检测机制不仅突显了技术专长,还提供了可应用于更广泛网络安全领域的宝贵见解。通过应对这些挑战,本项目展示了 DMA Firmware 的定制、硬件操控的专业知识以及先进的网络安全技能——这些在科技行业非常有价值,并且与防御同等资金充足、恶意的实体相关。 ![Anti-Cheat Company](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7b73227ebc215344.png) ## 软件和硬件列表 - 硬件: - [LabmdaConcept 的 PCIe Screamer Squirrel DMA 板](https://shop.lambdaconcept.com/home/50-screamer-pcie-squirrel.html) - [Realtek 的 RTL8111 - 瑞昱半导体公司的集成千兆以太网控制器](https://www.aliexpress.us/item/3256805896010027.html) - 软件: - [MindShare - Arbor](https://www.mindshare.com/software/Arbor) - PCILeech-FPGA [源代码](https://github.com/ufrisk/pcileech-fpga) - [Visual Studio Community](https://visualstudio.microsoft.com/vs/community/) - [Xilinx Vivado](https://www.xilinx.com/support/download.html) ## 项目详情 ### 项目是什么? 本项目是一个硬件混淆模拟。硬件混淆是一种有效的网络安全技术,通过将高优先级硬件伪装成低优先级硬件来隐藏其真实性质。 ### 为什么硬件混淆在网络安全中有效? 攻击者通常优先针对高价值硬件。通过将此类硬件伪装成低价值硬件,可以降低被检测的可能性,从而有效地拖延攻击者。 #### 高价值硬件示例: - **服务器:** 对托管应用程序、数据库和敏感信息至关重要。针对这些可能导致重大数据泄露和中断。 - **网络路由器和交换机:** 基础设施的核心, compromised 这些可以提供对大量网络流量和控制的访问。 #### 低价值硬件示例: - **打印机:** 普通且常被忽视,使其成为伪装高价值资产的理想选择。 - **扫描仪:** 与打印机类似,这些通常不被视为高价值目标,但在许多环境中很普遍。 ### 硬件混淆的优势: - **降低检测风险:** 通过掩盖高价值资产,显著降低它们被针对的几率。 - **增加攻击复杂性:** 攻击者必须花费更多时间和资源来识别和针对有价值资产,增加了检测和干预的可能性。 - **战略欺骗:** 为攻击者制造虚假的安全感,可将他们引入陷阱,例如蜜罐,在那里可以监控和分析他们的活动。 ### 潜在应用: - **企业网络:** 通过将关键服务器和数据库伪装成不太关键的设备来保护它们。 - **工业系统:** 通过将工业控制系统和关键基础设施掩盖为标准 IT 设备来保护它们。 - **金融机构:** 通过使交易处理系统看起来像非必要的办公设备来保护它们。 - **政府和国防:** 通过使用硬件混淆技术增强敏感系统和通信网络的安全性。 # # # 项目 ## 1. 介绍信息: #### 35T 本项目将使用 ```35T: Squirrel``` 设备。75T 和 100T 设备将有所不同! #### 为什么选择 RTL8111? 我还将使用 RTL8111 作为“donor card”(捐赠卡)。Donor card 指的是我将从中提取合法 ID 的物理设备。Donor card 的信息将被放到 DMA 卡上。使用真正的网卡将确保我的所有 ID 都是准确的。 #### 我选择 RTL8111 是因为其驱动程序都有完善的文档。在选择合适的 donor card 时,这是一个需要牢记的重要步骤。开源驱动程序是最好的。可以在 [此 wiki](https://en.wikipedia.org/wiki/Comparison_of_open-source_wireless_drivers) 上的 [开源无线驱动程序比较](https://en.wikipedia.org/wiki/Comparison_of_open-source_wireless_drivers) 中找到开源驱动程序列表。 ## 2. 捐赠卡 ID 从 donor card 收集 ID 是项目的第一部分。我将使用 [MindShare 的 Arbor](https://www.mindshare.com/software/Arbor) 获取我的 donor card 的硬件 ID。我将在这里执行 PCI 扫描: ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/cdfd290a32215411.png) 我们可以在 PCI Map 选项卡中识别出 RTL8111 位于 Bus 5: ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0ba43f5c26215420.png) 在 PCI Config 选项卡内,我们可以识别 RTL8111 中的许多值,例如 ```B:D:F```、```Class```、```Device Description```、```Device Type```、```Capabilities```。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5292574e17215427.png) 我们还可以识别 RTL8111 的标头: ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/c7494d6672215432.png) RTL8111 上没有什么异常。我们必须从 RTL8111 收集一些值。 #### Base Registry Address (BAR) 通过单击 BAR0 到 BAR5,记下你的 Base Registry Address (BAR) 的大小。设置为“00 00 00 00”的 BAR 是一个特殊的 BAR。0 表示 RTL8111 上未使用此特定 BAR。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1dcc8d6f8a215436.png) ```BAR0``` 是 ```256 bytes```。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5fe23c3505215439.png) ```BAR1``` 未使用。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/edf94277b2215445.png) ```BAR2``` 和 ```BAR3``` 是一对。它们的大小是 ```4KB```。 ![image](https://github.com/user-attachments/assets/8bc86fd9-3bcf-4036-b7db-260bfd4783eb) BAR4 和 BAR5 是一对。它们的大小是 ```16KB```。 #### Device Serial Number (DSN) Capability Structure ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/36ef99972d215451.png) #### Advanced Error Reporting (AER) Capability Structure ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d3e6b9d2a9215530.png) #### Power Management (PM) Capability Structure ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7e759b4f65215536.png) ### MSI-X Capability Structure ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0753b04e1c215542.png) #### Virtual Channel (VC) Capability Structure ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6483bbc948215546.png) #### Message Signaled Innterrupt (MSI) Capability Structure ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6d4940204a215552.png) ## 3. 启用 Master Abort 处理以增强错误检测 在 ```pcileech_pcie_cfg_a7.sv``` 文件(位于 ```pcileech-fpga-4.15\PCIeSquirrel\src```)中将 master abort flag 设置为 ```1```,因为它有助于在 DMA 事务期间捕获无效的内存访问,如果设置为 0,这些访问 otherwise 不会被注意到。如果自定义 Firmware 出现问题,这可以更轻松地进行调试。检测和解决稍后可能出现的任何配置错误或失败事务(如果有)将更容易管理。如果没有此更改,你就有可能错过可能损害 DMA Firmware 功能的关键错误。这是一个保障措施。不要跳过此步骤。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5fe68ac367215557.png) 我用 ```CTRL + F``` 功能和字符串“```master abort flag```”很容易地找到了它。整个文件中只有 1 处提到这一点。使该行完全如下所示: ``` rw[20] <= 1; // CFGSPACE_STATUS_REGISTER_AUTO_CLEAR [master abort flag] ``` Read/Write (rw) ```rw[20]``` 是正确的行。 ## 4. 设置 DSN 在同一个文件中,将 DSN 值复制到 ```rw[127:64]``` 行。此行用于 cfg_dsn。此部分中有 16 个可用字符。确保将 ```Lower DW``` 复制到前 8 个数字上,并将 ```Upper DW``` 复制到后 8 个数字中,如下所示: ``` rw[127:64] <= 64'h684CE00051140000; // +008: cfg_dsn ``` ```684CE000``` 和 ```51140000``` 是我们的 Lower 和 Upper DW。 保存 ```pcieleech_pcie_cfg_a7.sv```。 ## 5. Vivado #### 打开 Vivado 是我将用来创建 ```pcileech_squirrel.xpr``` 文件的工具。请务必确切知道你的 ```PCIeSquirrel``` 文件夹在哪里。我的在 ```M:\CUSTOM FW\pcileech-fpga-4.15\PCIeSquirrel```,所以我将 ```cd``` 到该位置并运行 ```source vivado_generate_project.tcl -notrace``` 来构建。 ```cd``` 进入你的 ```PCIeSquirrel```: ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/c554ac77ba215605.png) ``` source vivado_generate_project.tcl -notrace ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3dcaa03a23215609.png) 创建 ```.xpr``` 文件时确保没有错误。打开 ```Sources``` 框内的文件 ```i_pcie_7x_0 : pcie_7x_0 (pcie_7x_0.xci)```。展开 ```pcileech_squirrel_top``` 和 ```i_pcileech_tlps128_dst64 : pcileech_tlps128_dst64```,直到找到 ```i_pcie_7x_0 : pcie_7x_0 (pcie_7x_0.xci)```。打开 ```i_pcie_7x_0 : pcie_7x_0 (pcie_7x_0.xci)```。 #### ID 我们现在将把之前保存的 ID 写入 ```IDs``` 选项卡。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3ff6bc718b215618.png) 我已经更新了 ```Vendor ID```、```Device ID```、```Revision ID```、```Subsystem Vendor ID``` 和 ```Subsystem ID```。无需更新 ```Class Code``` 中的任何值,因为 RTL8111 已经是 ```02 00 00```: ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/24b1af5973215623.png) #### BAR 导航到 BARs 选项卡。BARs ```0``` 和 ```1``` 各自是 32 位 BAR,因为它们各包含一个 BAR。BARs ```2``` 和 ```4``` 是 64 位 BAR,因为它们各包含两个 BAR。I/O BAR 始终是 32 位。不要启用 BARs ```1```、```3``` 和 ```5```,因为它们是未使用的 BAR。我们知道这一点是因为它们被硬编码为全 ```0```。BAR ```3``` 是 BAR ```2``` 的一部分,所以不要启用 BAR ``````。同样,BAR ```5``` 是 BAR ```4``` 的一部分,所以不要启用 BAR ```5```。所有 64 位 BAR 都会进位到下一个 BAR,因此不要启用每个 64 位 BAR 的后半部分。更新 BAR: ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/24e6c8125b215627.png) 我们应该保留其他选项卡,因为 DMA 设备需要在底层正常运行。更改其他选项卡(如 ```Power Management```)中的值可能会导致 DMA 卡过压或欠压。**不要**更改这些选项卡,否则你有硬件故障的风险!相反,点击屏幕底部的 ```OK```,然后在弹出框中不更改任何默认设置的情况下点击 ```Generate```。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b114926992215631.png) # 找到 ```inst : pcie_7x_0_core_top (pcie_7x_0_core_top.v) (2)``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/8061243a75215654.png) 我们现在将手动编辑这些值。不再有像以前那样的友好 GUI 来帮助我们。你(通常)通过 ```__``` 读取参数名称。例如,```MSI_CAP_64_BIT_ADDR_CAPABLE``` 位于 ```MSI``` Structure 中,```CAP```(capabilities 的缩写)是 Capability 的名称,```64_BIT_ADDR_CAPABLE``` 是描述的名称。我在下面包含了有关如何读取 MSI capability 的屏幕截图。他们喜欢缩写名称,因此请仔细阅读。我将在下面列出要更改的行号和值: #### Message Signaled Interrupt (真实示例) ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/221bb2573d215700.png) 第 154 行: ``` parameter MSI_CAP_64_BIT_ADDR_CAPABLE = "TRUE", ``` ### PCIe ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4f624bc6ee215704.png) 第 101 行: ``` parameter integer DEV_CAP_ENDPOINT_L0S_LATENCY = 3, ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3f40460c15215708.png) 如何读取: ```3``` 是 ```[8:6]``` 处的 Endpoint L0s Latency 的值 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3ba5654eba215710.png) 第 102 行: ``` parameter integer DEV_CAP_ENDPOINT_L1_LATENCY = 6, ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/2c880d94de215716.png) 第 103 行: ``` parameter DEV_CAP_EXT_TAG_SUPPORTED = "TRUE", ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/2f489bd514215720.png) 第 104 行: ``` parameter integer DEV_CAP_MAX_PAYLOAD_SUPPORTED = 2, ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/72a673ff6e215723.png) 第 105 行: ``` parameter integer DEV_CAP_PHANTOM_FUNCTIONS_SUPPORT = 0, ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/10e1dc8eac215730.png) 第 134 行: ``` parameter [3:0] LINK_CAP_MAX_LINK_SPEED = 4'h1, ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/c7527c43c6215734.png) 第 135 行: ``` parameter [5:0] LINK_CAP_MAX_LINK_WIDTH = 6'h1, ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/ba7ce736cb215738.png) 第 139 行: ``` parameter [3:0] LINK_CTRL2_TARGET_LINK_SPEED = 4'h0, ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4b6373ded8215744.png) 第 163 行: ``` parameter [3:0] PCIE_CAP_DEVICE_PORT_TYPE = 4'h0, ``` 如何读取: ```4'``` 表示该值宽 4 位。此处分配的值必须适合 4 位。 ```h``` 表示数字的基数。```h``` 代表十六进制(基数为 16) ```0``` 是分配的实际值 ```4'h0``` 表示它是一个设置为 0 的 4 位十六进制值。我们可以看到 ```0000b``` 是为 ```Device/Port Type``` 分配的值。吻合。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/971d995a0a215748.png) 第 267 行: ``` parameter LINK_CAP_ASPM_SUPPORT = 3, ``` #### Power Management Capability Structure ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/eca41b0153215751.png) 第 167 行: ``` parameter PM_CAP_D1SUPPORT = "TRUE", ``` 第 168 行: ``` parameter PM_CAP_D2SUPPORT = "FALSE", ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/f7c9719114215754.png) 第 171 行: ``` parameter PM_CSR_NOSOFTRST = "TRUE", ``` ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/9f26cd4ab1215758.png) 第 310 行: parameter PM_CAP_AUXCURRENT = 4, ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6a41f1cb63215834.png) 第 315 行: ``` parameter PM_CAP_VERSION = 3, ``` #### MSI-X Capability Structure 这部分略有不同。 1. PCIE_BASE_PTR:设置为 0x40,这是 PCI Express capability structure 所在的位置。 第 292 行: ``` parameter [7:0] PCIE_BASE_PTR = 8'h40, ``` 2. PCIE_CAP_NEXTPTR:设置为 0xC8,这是下一个 capability(Power Management)所在的位置。 第 164 行: ``` parameter [7:0] PCIE_CAP_NEXTPTR = 8'hC8, ``` 3. PM_BASE_PTR:设置为 0xC8,这是 Power Management capability 的偏移量。 第 309 行: ``` parameter [7:0] PM_BASE_PTR = 8'hC8, ``` 4. PM_CAP_NEXTPTR:设置为 0xD0,指向偏移量 0xD0 处的 MSI-X structure。 第 169 行: ``` parameter [7:0] PM_CAP_NEXTPTR = 8'hD0, ``` 5. MSI_BASE_PTR:设置为 0xD0,MSI-X capability 的位置。 第 280 行: ``` parameter [7:0] MSI_BASE_PTR = 8'hD0, ``` 6. MSI_CAP_NEXTPTR:设置为 0x00,指示 capability 链的结束。 第 282 行: ``` parameter [7:0] MSI_CAP_NEXTPTR = 8'h00, ``` 7. CAPABILITIES_PTR:capabilities 列表的起始点设置为 0x40,这是 PCIe capability 的偏移量 第 359 行: ``` parameter [7:0] CAPABILITIES_PTR = PCIE_BASE_PTR, ``` 这将根据偏移量和指针链接配置空间中的 capability 结构。 保存你目前的工作。 ## 6. 构建 这将需要一段时间运行。在我的 10600KF + 3070 PC 上大约花了 10 分钟。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0d93d188f2215837.png) 在控制台中再次运行 ```source vivado_build.tcl -notrace```。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/fed3deb8d4215840.png) 它将生成 ```pchileech_squirrel_top.bin```。将其刷入你的 DMA 卡。本项目不会介绍如何将 Firmware 刷入 DMA 卡,因为这超出了本项目的范围。本项目仅用于构建自定义 Firmware。 ## 7. 测试 #### DMA 卡功能检查 将你的第二台 PC(Attack PC)连接到安装了 DMA 卡的 PC。 插入我的 DMA 卡的图片 插入连接了我的笔记本电脑的图片 我可以使用 [Lone DMA Test Tool](https://phoenixlabstore.com/lone-dma-test-tool/) 验证我的 Firmware 是否正常工作。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b75c052331215843.png) ## 8. 针对 BattleEye Anti Cheat 测试我的 Firmware 当启动配备了 BattleEye Anti Cheat 的游戏时,禁止将 DMA 卡插入你的计算机。你将立即被禁止,并且你的硬件 ID 将被记录在黑名单上。除非你的 Firmware 配置空间**不**类似于你的普通卡,否则不要尝试本指南的这一部分。我已经更改了我的配置空间,但这超出了本项目的范围。我稍后可能会介绍这一点,但是,如果你正在阅读此说明,它目前尚未写入本指南。下一部分风险自负。 我将在 PlayerUnknown's Battlegrounds 上进行测试,因为它是一款使用 BattleEye anti cheat 的免费在线游戏。 #### Firmware 通过检查 我登录游戏没有问题。 ![image](https://github.com/user-attachments/assets/cbbaae37-bc14-43d6-8905-3075185f670c) # # 结论 这个项目很成功。我将在这里保持我的 Firmware 状态最新。当此方法不再有效时,我将更新此部分。 截至我最后一次检查 03/03/2026,此方法通过并且有效。 # ## 使用的文档和驱动程序 #### 文档 - [RTL8111](https://pdf1.alldatasheet.co.kr/datasheet-pdf/view/1253500/REALTEK/RTL8111.html) #### 驱动程序 - [RTL8111](https://pdf1.alldatasheet.co.kr/datasheet-pdf/download/1253500/REALTEK/RTL8111.html) ## 延伸阅读 - PCILeech [capabilities](https://github.com/ufrisk/pcileech) - PCILeech 利用 PCIe 硬件设备通过 DMA 读写系统内存,无需在目标系统上安装驱动程序,支持各种硬件和软件内存获取方法,包括基于 FPGA 的设备用于完全内存访问和插入 kernel implants 以实现高级内存和文件系统访问,在 Windows 和 Linux 上运行。 ## 词汇表 - **DMA (Direct Memory Access)**:一种允许硬件设备直接访问系统内存的方法,绕过 CPU,使数据传输更快。 - **FPGA (Field-Programmable Gate Array)**:一种用于各种任务的可编程硬件,包括模拟不同的硬件配置,如本项目中的网卡。 - **PCIe (Peripheral Component Interconnect Express)**:一种高速接口标准,用于将硬件设备(如 GPU 或网卡)连接到主板。 - **BAR (Base Address Register)**:一个寄存器,保存分配给设备的内存或 I/O 地址空间,对于 PCIe 事务期间与设备交互至关重要。 - **DSN (Device Serial Number)**:分配给硬件设备的唯一标识符,用于 PCIe 事务期间的识别。 - **TLP (Transaction Layer Packet)**:PCIe 通信中使用的一种数据包,用于在设备和内存之间传输数据。 - **AER (Advanced Error Reporting)**:一项 PCIe 功能,提供有关错误的详细信息,改进诊断和故障排除。 - **VC (Virtual Channel)**:PCIe 中的一种 capability structure,允许多个独立的数据路径或虚拟通道共享同一物理链路。 - **Master Abort**:当设备尝试访问无效的内存位置或未响应的设备时发生的错误情况。启用 master abort handling 允许检测和记录这些错误。 - **BE (BattleEye)**:游戏中使用的一种反作弊软件,用于检测未经授权的修改,包括基于 DMA 的作弊方法。 - **EAC (Easy Anti-Cheat)**:另一种流行的反作弊系统,旨在防止在线游戏中的黑客攻击和作弊。 - **Donor Card**:用于提取 ID 和配置数据以创建修改后的 Firmware 来模拟另一个设备的物理硬件设备。 # 注意 本项目仅供**教育目的**。不允许在纯教育环境之外使用本项目。本项目仅用于向我教授一种用于检测预防的网络安全策略。遵循本指南即表示你了解所涉及的风险,因为它包括重写可能导致硬件变砖的关键 Firmware 文件。任何 Firmware 篡改都可能导致变砖。以此为戒!仅按出现的步骤操作。
标签:BattlEye, DMA攻击, DMA板卡, DNS 解析, Easy Anti-Cheat, FPGA开发, PCIe Screamer, PCIe设备, PCILeech, RTL8111, Squirrel, 反作弊绕过, 固件修改, 固件定制, 模拟伪装, 游戏安全, 硬件安全, 硬件混淆, 红队战术, 网卡模拟, 网络安全, 隐私保护