这个和开不开源什么的没什么关系,很多安全机制都是开源的,但不意味着它们就可以被攻陷
DMA外挂的原理是这样的:DMA卡可以直接扫描和修改存放在内存里的数据。
Windows上的基于虚拟化的反外挂原理是这样的:你的电脑首先是跑了一个hypervisor(虚拟机控制器,对应的就是windows的hyper-v),hypervisor创建了一个虚拟机,把大部分的硬件设备都直通进去,然后在里面跑windows系统。你平时用电脑就是在用这个虚拟机里的系统。然后,hypervisor可以管理你的电脑上一个叫IOMMU的玩意,IOMMU可以控制你的板卡设备能够访问哪些内存区域。通过硬件白名单之类的方式,hypervisor通过管理IOMMU禁止DMA卡读取运行windows的虚拟机的内存
这些基础设施在linux上都是现成的(KVM)。写一个IOMMU管理内核模块或者ebpf模块然后开源也没什么大不了的。
但是Linux上跑windows游戏,你的游戏是跑在一个兼容层上的。这个兼容层的代码跟你的游戏的代码和数据处在同一个进程地址空间里面。攻击者只要给兼容层做手脚,直接就可以读你的游戏数据了,压根都用不上DMA卡。
游戏公司想要解决这个问题也不是没有办法,那就是自己提供一个兼容层,然后给这个兼容层签名。问题是……对于游戏公司来说,这值得吗?