[原创] QEMU/KVM + moonlight实现串流游戏作弊
2023-8-1 11:19:16 Author: bbs.pediy.com(查看原文) 阅读量:19 收藏

[原创] QEMU/KVM + moonlight实现串流游戏作弊

3天前 2865

[原创] QEMU/KVM + moonlight实现串流游戏作弊

QEMU/KVM + moonlight实现串流游戏作弊

GitHub: https://github.com/cs1ime/blacksun-framework

有些代码是好久之前写的C代码缝合起来的,内存搜索,GameParser这种,因为实在不想重写一遍,看不懂就gdb调起来逆向呗

还有些代码是初学c++的时候写的,绘制这块,render模块其实可以用weak_ptr拿共享内存的,有空安排一个C SDK出来

本文中涉及到的源码和技术仅限交流学习,不得用于非法用途

已经做到

  • 绘制和读写都在虚拟机外部实现,绕过一切反作弊外挂检测(云游戏厂商都用的KVM虚拟机)
  • 修改moonlight源码实现imgui绘制,兼容vaapi(opengl),vdpau(sdlrender)
  • 利用NAT网络通信以做到超低延迟的moonlight串流画面
  • 通过对moonlight发送SDL_Event实现键鼠模拟
  • 模拟100hz回报率的鼠标进行自瞄以做到丝滑的自瞄效果
  • 屏蔽鼠标侧键(触发自瞄的按键)输入虚拟机以做到更隐蔽的自瞄

接下来可能会实现的功能:

  1. UE引擎外部光线追踪: kvm外部读写速度非常快,而且作弊有一个Linux作为运行环境,拿到周围所有的可碰撞物体的空间信息,跑一个光追算法就可以了
  2. Ept断点: 利用vt的MTF,一核一个eptp,eptp的读写执行属性每个都能单独存在的特性,处理好cow(也可以不处理)就能轻松的做到断点,这东西特别无脑,CPU自带的硬断还要处理单步+线程调度的问题,这东西完全不用处理这些
  3. Invoke: 可以利用Ept断点做hook,用轮询+读写锁的方式与用户层做通讯,用户层用一个coroutine做hook的callback,callback里用yield来做invoke,观察栈内存断点来判断返回并判断超时,返回之后resume coroutine.实现Invoke之后基本和注入没啥区别了

KVM的正常用户和反作弊可能采取的动作:

  1. 云游戏服务提供商: 反作弊可能和他们合作,把他们的KVM环境标记为合法的,不过这个影响不大的,没人会顶着这么大延迟玩fps射击类游戏
  2. 家庭串流游戏用户: 这类用户可能会使用KVM,但是国内无wifi6e,体验会跟不上,会比较少
  3. 用linux玩Windows游戏的用户: 这也是一个很好的用linux玩Windows游戏的方法,looking glass也用的串流传画面

反作弊可能会采取的对抗方案:

  1. 控制机上装反作弊: 这样子是无意义的,因为控制机可能是基于GPL的系统,GPL上玩不了Windows那套的

  2. 不支持KVM: 这能彻底解决这个问题,但是实机Windows做串流游戏机不太好,有的时候容易BSOD,用远程控制插座和局域网开机来解决这个问题,但是这样子做对硬件很不好,最好的家庭串流游戏方案还是KVM管理客户机

  3. 标记KVM用户: KVM用户玩的太强了就BAN了

  4. 开发一个Host OS放到市场上: 如果想在Host OS上运行检测的话需要绕过GPL,要独立开发一个VMM.如果想彻底解决作弊问题得BIOS,主板都用自己的一套.目前最有可能做到的公司就是Microsoft,自家有xbox产品线,hyper-v,gpu半虚拟化技术

议题征集启动!看雪·第七届安全开发者峰会10月23日上海

最后于 3天前 被cslime编辑 ,原因: 本文中涉及到的源码和技术仅限交流学习,不得用于非法用途


文章来源: https://bbs.pediy.com/thread-278226.htm
如有侵权请联系:admin#unsafe.sh