永远在路上

没有破解不了的反外挂系统,反外挂是一个对抗过程,需要不断升级。我们反外挂小组会采取对抗方式提升防御,也会研究竞品来获取灵感。反外挂也是非常有意思的,可以学到很多很多底层知识。

善战者无赫赫之功

反外挂,很难做出成绩,你把游戏保护的固若金汤,你会显得很平庸,可有可无。但是如果一旦有一款外挂不能及时防御,你又会显得很无能,所以我选择离开这个行业,主要是所在城市没有太多选择。

本文的结构如下:

1 反调试

反调试是反外挂中很重要的环节,可以提高外挂作者的门槛。每一种反外挂手段我们成为“暗桩”,其实没有不能破解的反外挂手段,但是如果“暗桩”太多,对于外挂作者也是很难调试游戏的。

下面开始介绍一些反外挂手段。 这里有一个很好的网站,里面包含8大类反调试技术,感兴趣可以看一下。

https://anti-debug.checkpoint.com/

1.1 调试检测

1.1.1 执行时间

当游戏被调试时,运行肯定会变慢,我们可以检测游戏主循环的运行时间,来判断是否被调试,实际上这种检测是最难拔出的“暗桩”。

1.1.2 调试位检测

windows提供了一些api来检测,例如IsDebuggerPresent、CheckRemoteDebuggerPresent。

// IsDebuggerPresentstatic bool xx_is_debug_1() {

return IsDebuggerPresent();}// CheckRemoteDebuggerPresentstatic bool xx_is_debug_2() {

BOOL debuged = false;

bool ret = CheckRemoteDebuggerPresent(GetCurrentProcess(), &debuged);

return ret && TRUE == debuged;}

1.2 硬件断点检测

硬件断点既是调试手段、也是一种hook手段,反外挂时一定要检测的。检测时有两种手段:

  1. GetThreadContext:获取寄存器信息,判断Dr0~Dr3如果不是0,则被下了硬件断点。

  1. 硬件断点占坑:硬件断点只有4个,反外挂系统把硬件断点占住,我只要检测我的断点存在即可。

我使用了硬件断点占坑方式检测,因为调用GetThreadContext检测时容易被hook。

后期我们做对抗时,发现可以用设置内存属性,来绕过硬件断点占坑,以后会写一篇文章来介绍。

2 外挂检测-特征

游戏反外挂系统会“主动出击”,检测一些“知名”的通用外挂工具,例如cheat engine、OD调试器、变速齿轮等。检测的方式可以是进程名、窗口名、模块名(dll)等信息。反外挂系统还会从服务端动态拉取一些特征库,实现不停服升级反外挂系统。

当然特征检测主要还是为了提高外挂制作门槛,不能起到太大作用,有胜于无吧。

3 自我保护

游戏反外挂系统做的再牛,把游戏保护的再好,但是如果反外挂系统被本身干掉了也就白玩了,所以自我保护是重中之重。

3.1 反外挂线程保护

反外挂系统会启动一个反外挂线程来检测,不在主线程运行,以免拖慢游戏程序,首先我们就要保护反外挂线程不被干掉。

我们采取使用游戏主线程与反外挂线程守望相助,由主线程专门来检测反外挂线程的存货,反外挂线程可以采取更新变量、信号等方式通知主线程自己存活。如果主线程检测到反外挂线程不正常工作,就退出游戏程序。

3.2 安全退出

当发现外挂或发现被调试时,游戏程序会弹框提示玩家,然后再退出游戏。如果不做保护,外挂作者可以从弹框入手、顺藤摸瓜来分析反外挂的工作原理,然后指定破解方法。

这里主要防御手段是:延迟退出;堆栈清理。

3.2.1 延迟退出

当发现异常后,反外挂系统不会立即退出,做个标记然后等一会退出,这样被分析时也不会是第一线程,无法定位工作原理。

3.2.2 堆栈清理

弹框时,我们要做堆栈清理,把堆栈弄乱,让外挂作者无法分析调用关系。

DWORD dwEBP = 0,dwEBPMain = m_MainEBP.GetT();

__asm {

mov dwEBP,ebp }

while (dwEBP < dwEBPMain)

{

*((DWORD*)dwEBP) = 0;

dwEBP += 4;

}

4 游戏保护

游戏保护是反外挂的根本,是反外挂系统的内功,以不变应万变。

4.1 代码保护

代码保护时要考虑执行效率,进行不同的保护手段。

  • 反外挂代码:加壳保护,加壳可以混淆代码,增加调试难度。我选择使用宇宙最强壳,vmprotect。

  • 游戏代码:游戏代码要考虑效率,无法加壳。这里就使用前面介绍的代码完整性校验,把PE文件重定位、修复导入表以后进行校验。

4.2 数据保护

一些游戏内存数据也需要进行保护,一些敏感字符串,一些重要游戏属性。

  • 字符串保护:例如“发现外挂”,如果明文保存,很容易被od搜索出来,然后定位使用的位置。我们采取简单加密,只要搜索不出来即可。

  • 游戏内存保护:我采取动态多级指针,每次启动随机指针的级数,这个不知道作用有多大,毕竟没和外挂作者讨论过。很多保护措施都是我们反外挂小组攻防实验时,加固的。

5 信息收集

信息收集是反外挂系统的重要组成部分,可以帮助我们收集玩家使用外挂证据、收集外挂等。

  • 玩家监控:我们会重点监控“重点玩家”的信息,重点玩家来自于玩家举报,我们会加入监控观察一周。

  • 游戏程序修改:反外挂系统会全量检测游戏.exe和d3d9.dll的代码段,发现修改就把版本和修改的地址上报,会定时分析其中可疑的味道。

  • 文件上传:这个功能有点流氓,我们控制台可以指定上传玩家本地的文件,是我们收集外挂的重要手段。

最后,求关注、点赞、转发,谢谢~

游戏反外挂技术原理讲解相关推荐

  1. 游戏反外挂技术首次公开

    万字长文!inlinehook看这一篇足够了! 远程线程+hook=监控? 硬件断点 硬件断点hook 实战!谁动了我的代码! 前面的文章,我们介绍了inline hook.硬件断点hook.远程线程 ...

  2. 游戏外挂反外挂技术简介

    1.游戏外挂分类: ⑴按实现方式 ㈠脱机式: 完全脱离游戏客户端程序,可以与游戏服务器自由通讯的外挂程序,开发难度最大, 普通的100多开,对游戏的危害最大 ,严重破坏游戏市场.影响玩家正常游戏.缩短 ...

  3. php 伪静态 page-18.html,PHP 伪静态实现技术原理讲解

    PHP 伪静态实现技术原理讲解 发布于 2015-01-18 23:52:58 | 129 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pre ...

  4. iOS游戏反外挂方案解析

    自2007年iPhone OS发布以来,iOS系统已经发展了近17年,凭借着独家的系统环境.安全性更高的闭源生态等优势.iOS从一众手机系统中脱颖而出,与安卓稳坐手机系统市场两把头部交椅. 不同于安卓 ...

  5. 福禄科技罗宇翔:OpenResty 游戏反外挂应用

    2019 年 5 月 11 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙武汉站,福禄科技服务端研发工程师罗宇翔在活动上做了< OpenR ...

  6. 基于御安全APK加固的游戏反外挂方案

    摘要:兴起的手游市场背后隐藏着严峻外挂问题,这已经影响到游戏开发商的收益及众多正常游戏玩家的体验,因此必然需要一种反外挂的手段,来保证游戏开发商的合法利益.御安全加固平台已研究推出了一种方便.高效以及 ...

  7. 某手游智能反外挂产品原理浅析

    作者: 我是小三 博客: http://www.cnblogs.com/2014asm/ 由于时间和水平有限,本文会存在诸多不足,希望得到您的及时反馈与指正,多谢! 0x00:游戏外挂与反外挂 1.根 ...

  8. 某手游智能反外挂产品原理浅析之美

    0x00:游戏外挂与反外挂 1.根据手游数据公司AppAnnie发布的<2019手游行业报告>显示,国产手游2018年海外收入超过60亿美元相比2016年增长了109%,其中美国市场收入相 ...

  9. 基于云查杀的PC游戏反外挂

    外挂是游戏公司的克星.针对于不同的游戏,反外挂的策略也是不同的.比如是一款老游戏需要接入反外挂系统的话,驱动技术就不好了,原因很简单,这个时候的老游戏的汇编代码早已被市场上的外挂作者获取到了,各个功能 ...

最新文章

  1. [C++] vector 定义和初始化
  2. 5分钟学会开发浏览器扩展
  3. openstack domain serverID connect uri
  4. 如何获得完美的调色板?完美的配色素材专辑拿走!
  5. 一起学WindowsPhone7开发(二十六. Advertising)
  6. 回忆NWT开工,还要吾亲自布网线
  7. 卫星移动通信系统的分类
  8. 2000坐标系和WGS84的关系
  9. android AsyncTask介绍
  10. [****ViewController scrollViewDidScroll:]: message sent to deallocated instance 0x12d6c22f0
  11. 9.7 方向导数与梯度
  12. Day739.GEO经纬度数据结构自定义数据结构 -Redis 核心技术与实战
  13. 如何在推荐系统中玩转知识图谱
  14. windows 工具命令 cmd
  15. [算法]声音数据处理
  16. Python 不完全LU分解
  17. Ubuntu安装笔记
  18. CSS+html人员信息表
  19. Django2.0——Form组件简单总结
  20. 2021-05-31克隆硬盘

热门文章

  1. vue-pdf使用+分页预览(踩坑 + 使用本地字体库)
  2. 候选码、主码、外码、主属性、主键、主关键字、非主属性
  3. Python(x,y)
  4. 【异常报错】com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.c
  5. 7-2 求π的近似值
  6. 记录一下所有平台emoji表情查询网站
  7. 【labview】图表时间轴(数据+时间戳) +源程序
  8. 搭建个人网站 保姆级教程(一)云服务器购买以及环境部署
  9. 最新最全论文合集——丘成桐数学科学中心
  10. 监控工具(nmon)下载及使用方法