QEMU/KVM + moonlight实现串流游戏作弊
GitHub:
有些代码是好久之前写的C代码缝合起来的,内存搜索,GameParser这种,因为实在不想重写一遍,看不懂就gdb调起来逆向呗
还有些代码是初学c++的时候写的,绘制这块,render模块其实可以用weak_ptr拿共享内存的,有空安排一个C SDK出来
本文中涉及到的源码和技术仅限交流学习,不得用于非法用途
已经做到
- 绘制和读写都在虚拟机外部实现,绕过一切反作弊外挂检测(云游戏厂商都用的KVM虚拟机)
- 修改moonlight源码实现imgui绘制,兼容vaapi(opengl),vdpau(sdlrender)
- 利用NAT网络通信以做到超低延迟的moonlight串流画面
- 通过对moonlight发送SDL_Event实现键鼠模拟
- 模拟100hz回报率的鼠标进行自瞄以做到丝滑的自瞄效果
- 屏蔽鼠标侧键(触发自瞄的按键)输入虚拟机以做到更隐蔽的自瞄
接下来可能会实现的功能:
- UE引擎外部光线追踪: kvm外部读写速度非常快,而且作弊有一个Linux作为运行环境,拿到周围所有的可碰撞物体的空间信息,跑一个光追算法就可以了
- Ept断点: 利用vt的MTF,一核一个eptp,eptp的读写执行属性每个都能单独存在的特性,处理好cow(也可以不处理)就能轻松的做到断点,这东西特别无脑,CPU自带的硬断还要处理单步+线程调度的问题,这东西完全不用处理这些
- Invoke: 可以利用Ept断点做hook,用轮询+读写锁的方式与用户层做通讯,用户层用一个coroutine做hook的callback,callback里用yield来做invoke,观察栈内存断点来判断返回并判断超时,返回之后resume coroutine.实现Invoke之后基本和注入没啥区别了
KVM的正常用户和反作弊可能采取的动作:
- 云游戏服务提供商: 反作弊可能和他们合作,把他们的KVM环境标记为合法的,不过这个影响不大的,没人会顶着这么大延迟玩fps射击类游戏
- 家庭串流游戏用户: 这类用户可能会使用KVM,但是国内无wifi6e,体验会跟不上,会比较少
- 用linux玩Windows游戏的用户: 这也是一个很好的用linux玩Windows游戏的方法,looking glass也用的串流传画面
反作弊可能会采取的对抗方案:
控制机上装反作弊: 这样子是无意义的,因为控制机可能是基于GPL的系统,GPL上玩不了Windows那套的
不支持KVM: 这能彻底解决这个问题,但是实机Windows做串流游戏机不太好,有的时候容易BSOD,用远程控制插座和局域网开机来解决这个问题,但是这样子做对硬件很不好,最好的家庭串流游戏方案还是KVM管理客户机
标记KVM用户: KVM用户玩的太强了就BAN了
开发一个Host OS放到市场上: 如果想在Host OS上运行检测的话需要绕过GPL,要独立开发一个VMM.如果想彻底解决作弊问题得BIOS,主板都用自己的一套.目前最有可能做到的公司就是Microsoft,自家有xbox产品线,hyper-v,gpu半虚拟化技术
更多【 QEMU/KVM + moonlight实现串流游戏作弊】相关视频教程:www.yxfzedu.com