游戏反外挂技术原理讲解

永远在路上

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

善战者无赫赫之功

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

本文的结构如下:

1 反调试

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

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

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

1.1 调试检测

1.1.1 执行时间

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

1.1.2 调试位检测

windows提供了一些api来检测,例如IsDebuggerPresentCheckRemoteDebuggerPresent

// 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的代码段,发现修改就把版本和修改的地址上报,会定时分析其中可疑的味道。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/40936.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各网游的外挂是如何做出来的?

每一个致力于学习黑客技术的人&#xff0c;最后都分为三种人。 第一种&#xff1a;入侵&#xff0c;各种入侵&#xff0c;玩的就是入侵的快感&#xff0c;或者恶作剧的喜感&#xff0c;或者那种有特殊“窥视”癖好的人……别误会&#xff0c;小编我是喜欢“恶作剧&#xff0c;…

干货!什么是游戏外挂,外挂的种类及实现原理

外挂&#xff0c;原指一切用来破坏游戏程序正常游戏数据和逻辑的工具或破解版。比如可以修改游戏内存数据的修改器&#xff0c;又比如可以修改网络数据包的抓包工具。这类外挂或多或少会影响游戏的内存数据、文件数据、网络数据&#xff0c;甚至代码逻辑。 但随着外挂市场的发…

游戏外挂怎么做?

文章目录 1.什么是游戏外挂2.外挂的分类及实现原理2.1 辅助类外挂2.2 专用插件类外挂2.3 通用工具2.4 内存修改器2.5 变速器2.6 按键精灵2.7 模拟器2.8 破解版 转载自&#xff1a;Anti-Cheat Expert 游戏安全专家 干货&#xff01;什么是游戏外挂&#xff0c;外挂的种类及实现原…

哈夫曼树 例题

假设某棵二叉树有N个叶结点。给定这些叶结点的权值&#xff0c;求所有可能的二叉树中带权路径长度&#xff08;WPL&#xff09;的最小值。 注&#xff1a; 结点的带权路径长度&#xff08;WPL&#xff09;&#xff1a;结点的权值乘以该结点的深度&#xff08;假设根节点的深度…

svn更新/提交代码提示错误 , 进行清理下“破除写锁操作“

1.如果svn提交或者更新代码有--进行清理下"破除写锁操作"--此提示,一般情况下右键,然后选择进行确定就可以 2.如果还不行的话,在项目下的 .svn 文件夹里面新建文件夹,命名为tmp,然后重新更新,提交,就会发现问题解决了

2022年深圳杯数学建模A题代码思路-- 破除“尖叫效应”与“回声室效应”,走出“信息茧房”

问题重述&#xff1a; 在全新的信息传播格局下&#xff0c;如何破除“尖叫效应”与“回声室效应”&#xff0c;走出“信息茧房”&#xff0c;是当前迫切需要解决的现实问题&#xff0c;即如何从信息传输的顶层设计、推荐算法的公平性和广大网络用户的责任担当等方面&#xff0…

钉钉最新点赞破除限制方法(

我不是标题党&#xff01; 首先&#xff0c;放图片&#xff08;&#xff08;&#xff08; 时间这里是录视频的时间&#xff0c;2021-8-27&#xff0c;不是标题党&#xff01; 上方法&#xff01; 主要原理&#xff1a;利用抓包抓到的点赞api端口&#xff0c;实现持续点击或…

亚马逊云科技 Build On -Serverless低代码平台初体验-快速完成vue前端订单小程序

文章目录 一、我所认识的低代码平台二、Serverless的使用场景三、拖拉跩实现build on 的Serverless1. 使用图像界面创作方法2. 拖拉跩模块实现搭建3. 实时测试流程是否正确4. 最终的设计和流程图 四、创建端到端的基于vue的前端图形化界面六、总结与活动链接 一、我所认识的低代…

一小段Python代码,破解加密zip文件的密码

Python 有一个内置模块 zipfile 可以解压 zip 压缩包。先来测试一波&#xff1a;创建一个测试文件&#xff0c;压缩&#xff0c;设置解压密码为123。 import zipfile# 创建文件句柄 file zipfile.ZipFile("测试.zip", r) # 提取压缩文件中的内容&#xff0c;注意密码…

开源治理工具选一个

随着开源技术在云计算、大数据、AI领域的不断运用&#xff0c;不断破除技术壁垒&#xff0c;让企业快速建立自身的应用&#xff0c;在开源软件基础一&#xff0c;自主研发部分代码&#xff0c;便可以推出企业自身品牌的产品&#xff0c;开源技术的应用极大的推动了云计算、大数…

机器人微控制器编程(CoCube)-破除定势

从课程到生活&#xff1b; 从书本到理想&#xff1b; 从程序到生态&#xff1b; 从个体到集群&#xff1b; 从特殊到一般&#xff1b; 从传统到现代&#xff1b; 从技术到科学&#xff1b; 从理论到工程&#xff1b; 从基础到高阶。 …… 课程归根结底&#xff0c;是为学生服务…

复制浏览器html代码吗,网页文字不能直接复制?只需简单几招即可轻松破除限制,想学吗?...

原标题&#xff1a;网页文字不能直接复制&#xff1f;只需简单几招即可轻松破除限制&#xff0c;想学吗&#xff1f; 想必大家在网上都遇到这样的问题&#xff0c;网页文字受到限制无法直接复制&#xff0c;这该如何是好呢&#xff1f; 既不想登录注册又想直接复制走内容&#…

LR低代码快速开发平台 高效调整企业组织架构

组织架构以及围绕组织架构的设计、实施和变革&#xff0c;是企业管理永恒的话题&#xff0c;它上承公司的业务战略和运营模式&#xff0c;下接业务流程和信息系统建设&#xff0c;重要性不言而喻。数字化变革浪潮之下&#xff0c;商业模式的颠覆、价值链的重塑都需要由相匹配的…

自己动手写编译器:通过语法编译构建语法树并实现中间代码生成

上一节我们手动构造了语法树&#xff0c;然后调用各个节点实现中间代码生成。语法树的构建由语法解析完成&#xff0c;本节我们要完成语法解析逻辑&#xff0c;在语法解析过程中构造语法树&#xff0c;然后再像上一节那样实现中间代码生成。 这里我们再次回顾一下左递归&#…

安卓原神QQ机器人搭建教程

1&#xff0c;下载安装Termux 下载地址&#xff1a;https://f-droid.org/packages/com.termux/ 滑到下面点击这个 2&#xff0c;打开Termux&#xff0c;安装Ubuntu 安装模拟权限git&#xff0c;python&#xff0c;执行下面命令 pkg install proot git python -y 3&#xff…

如何在windows电脑上完成原神签到、祈愿抽卡分析等功能

一款开源的游戏辅助工具——原神助手。支持原神签到、祈愿抽卡分析、查看便签状态和游戏详细数据等。 开发者自述也是偶然间接触到《原神》&#xff0c;于是一发不可收拾&#xff0c;爱上这款游戏了。 在游戏中&#xff0c;如果要查看角色信息等内容&#xff0c;就必须需要登…

不同服务器的ps4账号吗,原神PC与PS4互通数据吗 不同平台数据互通分析

原神最近上线了pc版本&#xff0c;那么&#xff0c;你知道PC与PS4互通吗&#xff1f;这是很多玩家关心的问题&#xff0c;不同的平台&#xff0c;数据能否互通呢&#xff1f;比如说&#xff0c;不同平台是否可以一起玩&#xff0c;不同平台帐号是否可以切换&#xff0c;下面就为…

如何在 Mac 上玩原神?简单三步流畅运行

该方法也是本人一点点摸索出来的&#xff0c;花了很久&#xff0c;已经帮大家踩过坑了&#xff0c;该方法是最简单方便的&#xff0c;而且画质高、运行流畅&#xff0c;甘雨姐姐我来了~ 注意此方法只支持 M 系列芯片 一、安装 playCover github 源码地址 &#xff1a;https:/…

指令微调数据集整理

文章目录 开源指令数据集斯坦福数据链家数据Baize(基于少量种子问题的对话数据) 垂直领域数据集医疗领域的英文数据医疗领域的中文数据法律领域中文数据 COIG数据集&#xff08;可商用的中文数据集&#xff09; 开源指令数据集 斯坦福数据 斯坦福52K英文指令数据&#xff1a;…

Linux下使用Samba做域控

AI画妹子的工作先暂告一段落。毕竟戗行也是要有门槛的。 企业中使用Windows Server使用活动目录集中管理PC、服务器是很成熟的方案。突然想到&#xff0c;如果有一天出于某种原因不再使用微软方案了&#xff0c;AD该如何替代&#xff1f;问了一下chatGPT&#xff0c;它说&…