用CPU虚拟化来防止DMA外挂的原理是啥?
https://www.chiphell.com/thread-2730619-1-1.html意思通过CPU虚拟化功能,游戏自己就是个虚拟机+简易操作系统+游戏?
然后通过定制虚拟机的硬件,阻止不明设备,从而杜绝了DMA设备? 其实是 IOMMU.
具体的机制 wiki 解释地很好. 大概是微软的Virtualization-Based Security (VBS) Enclaves技术
https://github.com/microsoft/VbsEnclaveTooling 好像docker一样么 pcie控制器是在cpu的 没有主板什么事 虚拟化还可以用来这么玩儿,[傻笑][傻笑][傻笑] 超频仔的噩梦 就是把游戏运行在虚拟机上,DMA直接通过PCI-E总线读取内存,可以不在主机上安装任何软件,不在内存里写入任何数据,如果游戏运行在虚拟机上,要读取虚拟机的内存数据,那就必须得安装程序穿透,或者在虚拟机里安装驱动,那就能被检测到了。 并不是把游戏运行在虚拟机里面。
只用了一个IOMMU的内存地址切割功能,把游戏的核心内存,使用虚拟化指令强制切割了。
外面的硬件无法访问那个内存地址,包括DMA硬件也无法访问。
有点类似于你在ESXi里面把磁盘阵列卡直通给一个虚拟机,需要勾选强制预留全部内存才能直通。
此时那一部分内存就被强制分配给虚拟机了,连ESXi自己都不会去用它。
物理硬件,只有那个磁盘阵列卡能够访问那一段特殊内存;母鸡的其他物理硬件还是归ESXi管理,虚拟机看不到。
游戏没有那么绝对,它没有独占物理硬件,但确实切割了内存地址。
只有支持VT-d和IOMMU的CPU才能开启这种功能。
好消息是现在的CPU基本都支持。 之前DMA硬件可以畅通无阻的访问几乎全部内存地址,游戏的安全程序无法探测。
现在使用IOMMU内存切割,DMA无需授权能访问的普通内存地址,没有游戏数据,等于白搭。
DMA想要访问那一段特殊内存地址,必须报上名号,设备ID,中断,内存地址范围,等等。
只要让安全程序接管这一控制过程,就可以轻松的知道,哪些设备跑来访问了不该访问的内容。
再结合游戏服务端的数据分析(异常的高胜率),两者都对得上,直接封号。
页:
[1]