Skip to the content.

Index

背景

6.20 等了大半年的某箭发售了,但是众所周知其反作弊机制依托,刚上线就封了一大批汉化。

免责声明:本 blog 仅记录搞事的过程,不提供学习手段,请不要作弊

随便逛逛

在开始之前,先随便看看游戏目录,发现游戏目录下的 RuntimeInitializeOnLoads.json 里 有明显的 “AntiCheat” 字样:

{
  "assemblyName": "ACTk.Runtime",
  "nameSpace": "CodeStage.AntiCheat.Common",
  "className": "ACTk",
  "methodName": "GetUnityInfo",
  "loadTypes": 0,
  "isUnityClass": false
}

那就根据这些信息先搜搜这是个啥东西:

不难搜到,就是本游戏用的反作弊系统了,叫 Anti-Cheat Toolkit (ACTK)。

看介绍,主要有以下特性:

看了下 youtube 视频,在混淆的基础上,还有疑似蜜罐的机制,如果挂哥同时修改了真实数据和蜜罐数据, 也会被检测到。

差不多反作弊的特性知道了,开始逆向程序。

信息收集

看到游戏目录,首先这是一个 unity 程序,那没碰过游戏逆向的我当然是使用万能的谷歌了。

随便找了一篇文章,发现目前 unity 主要有两种方式打包:

根据某箭的游戏目录可知,其使用的是后者。那我们也根据 il2cpp 的教程继续往下走。

il2cpp 的逆向主要依靠 Il2CppDumper 工具, 但是要注意可能有混淆,那么先试一下。

不愧是小作坊,一点混淆没有,strip 也没有,可以直接 dump 出来所有的信息。

最难绷的是,你是隔着模板抄啊。。。。为什么还要个变量 cheatsDetected,你不都信息上传 封禁一条龙了吗,毫无意义啊。

继续,,这个 dump.cs 只给我们提供了接口信息,具体的函数体还需要通过 ida 逆向 GameAssembly.dll 看。

这个 il2cpp dumper 的工具也给我们提供了 ida 辅助脚本,直接跑就可以。

大致浏览了下内容,主要有两部分反作弊:调速和注入。

调速

很简单,就是如果 5 次检测到网络时间比游戏时间时间快过 5 秒就发送封号请求(真的不考虑网络卡顿吗)。

注入检测

注入检测就比较简单了,直接调用反作弊模块的注入检查:

点进去继续看,全是给某个数组添加 string,而这些 string 都是已知的调试或作弊工具

传奇调试工具 ollydbg

实现也非常简单。。。。就是个遍历搜索。。。。

评价

灾难性的反作弊,稍微有点基础的都可以绕过。。。。 也只能防防最基础的修改器了。