基于DMA的fps外挂原理解析
自从昨天发了一篇基于AI的锁头解析以后,有不少资深FPS盒友评论说DMA(Direct Memory Access,直接内存访问)才是最难防的,所以顺路查了一下这一类外挂的原理,恰好发现了一个基于FPGA的DMA项目pcileech,计算机组成课和FPGA这个家伙相爱相杀了一个学期,正好顺路分析一下它的修改内存原理。
DMA技术允许外置硬件设备(如网卡、显卡等)直接访问系统内存,而不需要通过中央处理器(CPU)进行数据传输,利用这种技术,可以使用特殊的软硬件工具(比如今天要讲的FPGA)来读取和修改游戏内存中的数据。例如,玩家可以使用DMA作弊工具来修改游戏中的角色属性、游戏物品数量、游戏金币数量、获取敌人坐标等 。
传统外挂一般会有外挂程序运行于作弊机器上读写游戏客户端关键数据或代码,而DMA作弊则是以硬件替代了外挂软件读写游戏数据,物理隐藏了外挂程序,对以外挂样本对抗为主的反外挂系统是个比较大的威胁。
那么什么是FPGA?FPGA 的全称为 Field-Programmable Gate Array,即现场可编程门阵列。 是作为专用集成电路( ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
简而言之, FPGA 就是一个可以通过编程来改变内部结构的芯片。通过编程即设计硬件描述语言,经过 EDA 工具编译、综合、布局布线成后转换为可烧录的文件,最终加载到 FPGA 器件中去,改变 FPGA 内部的连线,最终完成所实现的功能,所以可以利用FPGA来实现DMA外挂。
开头提到的PCILeech FPGA 项目包含基于 FPGA 的 HDL 代码,可以通过FPGA直接访问计算机内存中的数据,那么进一步编程并烧录修改代码,就可以进行数据修改(血量,金币等),或者将数据导出来到其他设备上显示(对手位置),下图是该项目提供的win平台上UI:
由于在DMA和CPU同时进行内存访问的情况下,DMA的优先级会更高,利用这个特定,就可以使用FPGA模拟DMA请求来进行内存访问,在windows系统上挂载内存到本地的K盘
读取内存中数据,获取系统进程信息
还可以获取SAM哈希存储信息
基于DMA的外挂则在读取内存信息的基础上更进一步,在访问内存的同时对其进行修改,以达到锁血,透视等作弊效果,又因为后台无法检测到这类DMA行为,所以反作弊非常困难。