经历了多年的DMA热潮终于落下帷幕,如今DMA作弊已经形成了相当大的产业链,时过境迁,曾经的最强现在到底是不是入国军呢?
正好最近真正在做一些相关探索,于是乎水一篇大粪在这,本人水平低下还望大佬指正。
本来大家都对抗的好好的你突然用硬件酱味打击这不胡闹吗?galgame里不是这样的,你应该先和我在R3上一决高下最后再在R0打的难舍难分... 相信大家对DMA的工作原理早就有过充分了解所以也不再赘述,非要说就是:
是的就这样,使用DMA可以很轻松的做到任意物理内存读取,写入,更重要的是它不会留下痕迹。和很多的技术手段一样,本来DMA是老老实实作研究用的,可是君子无罪怀璧其罪。
总而言之,DMA刚出来的时候确实是完完全全的碾压了市面上所有的反作弊,没有人使用DMA去对抗反作弊,反作弊也就没有对应的需求,自然而然更加的海阔天空,第一批DMA使用者也就切切实实享受到了新世界。
2016年左右,PCILeech发布 (DMA读写从未如此简单):) DMA读写从此工程化
19-21年这个时间段就依旧开始出现咋混共作弊的DMA作弊硬件流入市场,配套服务也非常好,固件配套服务也开始出现,逐渐成熟化了,对抗也进入了下一阶段。
总所周知,追求小众是一件非常大众的事情,而在反作弊对抗这块可以说大众了,就再也没有翻身的余地了,技术的泛滥与不断迭代,让旧技术狠狠的被碾压过去,不幸的,很显然DMA也没有逃过时代车轮的碾压,就在某个时间节点,DMA的用户迎来了大爆发,有人赚的盆满钵满,固件,教学等等雨后春笋一般冒出,设备成本的降低和名色大噪又反向助推用户数量的增长,于是肉眼可见的,DMA被盯上了。
另一边,反作弊厂商可以说是亚历山大了,于是正式打响对抗战争。
反作弊厂商首先想到的对抗方法是什么呢?既然DMA是设备那显然他们可以先遍历检查一下:
那么这几个case 的十六进制常量是什么呢? 通过查看PCI ID Repository我们可以看到
那就会有人问了,反作弊拿这个elem 0x158-257又是干什么呢?难道里面有什么可以判断是不是DMA的信息吗。
于是我们就查一查
直接查资料看看他都收集了哪些东西吧,忘了说了这么多还没贴出来资料:


系统给这段空间分配物理地址后把基址写回 BAR;之后 CPU 访问这段物理地址,就是访问设备的板载寄存器。
设备内部的寄存器里,包含 DMA 引擎的描述符地址、长度、启动位、完成状态。这些寄存器通常映射在 BAR 里,CPU 只能通过这段 MMIO 去操作 DMA 。
当 PCI_ENABLE_BUS_MASTER = 1 时,该 Function 可以主动向总线发起 Memory Read / Write Request(即 DMA 操作)。
当 PCI_ENABLE_BUS_MASTER = 0 时,该 Function 不允许发起任何 DMA 请求,只能被动响应 CPU 的访问。
这里也有一些被拉黑的数据,收集数据,建立数据库狠狠的拉黑这些板子使用者。
校验方案:
这里给出参考表也不再赘述了,核心对抗就是你伪造的我就校验,这也是为什么某些垃圾固件确实会拉闸。
难道说DMA不小众了我就不玩了吗,但那是弱者的思维。哪怕是在VTD大清洗后,还是有相当数量的八旗子弟仍旧抱着DMA四死死不放手,这也能理解,毕竟双机硬件搭配依旧能解决很多问题,比如签名,软件特征等等。
DMA为了应对反作弊厂商的严肃进攻,也是做出了努力,比如他们尝试伪装固件,把收集到的公开的固件刷到自己这里,或者伪装自己的ID用于对抗反作弊的黑固件数据库,甚至是自己实现一个协议去对抗反作弊的行为检测。
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
最后于 2026-9-29 12:56
被n013ody编辑
,原因: