|
| 1 | +--- |
| 2 | +permalink: /blogs/20250629-brokenarrow |
| 3 | +title: 浅析某箭的反作弊机制 |
| 4 | +--- |
| 5 | + |
| 6 | +{% include title_patch.html %} |
| 7 | + |
| 8 | +{% include gen_index.html %} |
| 9 | + |
| 10 | +# 背景 |
| 11 | + |
| 12 | +6.20 等了大半年的某箭发售了,但是众所周知其反作弊机制依托,刚上线就封了一大批汉化。 |
| 13 | + |
| 14 | +免责声明:本 blog 仅记录搞事的过程,不提供学习手段,请不要作弊 |
| 15 | + |
| 16 | +# 随便逛逛 |
| 17 | + |
| 18 | +在开始之前,先随便看看游戏目录,发现游戏目录下的 `RuntimeInitializeOnLoads.json` 里 |
| 19 | +有明显的 "AntiCheat" 字样: |
| 20 | + |
| 21 | +```json |
| 22 | +{ |
| 23 | + "assemblyName":"ACTk.Runtime", |
| 24 | + "nameSpace":"CodeStage.AntiCheat.Common", |
| 25 | + "className":"ACTk", |
| 26 | + "methodName":"GetUnityInfo", |
| 27 | + "loadTypes":0, |
| 28 | + "isUnityClass":false |
| 29 | +} |
| 30 | +``` |
| 31 | + |
| 32 | +那就根据这些信息先搜搜这是个啥东西: |
| 33 | + |
| 34 | +不难搜到,就是本游戏用的反作弊系统了,叫 Anti-Cheat Toolkit (ACTK)。 |
| 35 | + |
| 36 | +看介绍,主要有以下特性: |
| 37 | + |
| 38 | +- 保护内存数据:看起来是封装了基本数据并做加密混淆 |
| 39 | +- 保护文件完整性 |
| 40 | +- 检测调速挂和透视挂 |
| 41 | +- 检测程序注入 |
| 42 | + |
| 43 | +看了下 youtube 视频,在混淆的基础上,还有疑似蜜罐的机制,如果挂哥同时修改了真实数据和蜜罐数据, |
| 44 | +也会被检测到。 |
| 45 | + |
| 46 | +差不多反作弊的特性知道了,开始逆向程序。 |
| 47 | + |
| 48 | +# 信息收集 |
| 49 | + |
| 50 | +看到游戏目录,首先这是一个 unity 程序,那没碰过游戏逆向的我当然是使用万能的谷歌了。 |
| 51 | + |
| 52 | +随便找了一篇文章,发现目前 unity 主要有两种方式打包: |
| 53 | + |
| 54 | +- Mono: 主要特征为 `Assembly-CSharp.dll` |
| 55 | +- il2cpp: 主要特征为 `GameAssembly.dll` |
| 56 | + |
| 57 | +根据某箭的游戏目录可知,其使用的是后者。那我们也根据 il2cpp 的教程继续往下走。 |
| 58 | + |
| 59 | +il2cpp 的逆向主要依靠 [`Il2CppDumper` 工具](https://github.com/Perfare/Il2CppDumper), |
| 60 | +但是要注意可能有混淆,那么先试一下。 |
| 61 | + |
| 62 | +不愧是小作坊,一点混淆没有,strip 也没有,可以直接 dump 出来所有的信息。 |
| 63 | + |
| 64 | +<div style="text-align:center"> |
| 65 | +<img src="/static/blogs/20250629-brokenarrow/dump.png" alt=""/> |
| 66 | +</div> |
| 67 | + |
| 68 | +最难绷的是,你是隔着模板抄啊。。。。为什么还要个变量 `cheatsDetected`,你不都信息上传 |
| 69 | +封禁一条龙了吗,毫无意义啊。 |
| 70 | + |
| 71 | +继续,,这个 `dump.cs` 只给我们提供了接口信息,具体的函数体还需要通过 ida 逆向 `GameAssembly.dll` 看。 |
| 72 | + |
| 73 | +这个 `il2cpp dumper` 的工具也给我们提供了 ida 辅助脚本,直接跑就可以。 |
| 74 | + |
| 75 | +<div style="text-align:center"> |
| 76 | +<img src="/static/blogs/20250629-brokenarrow/ida.png" alt=""/> |
| 77 | +</div> |
| 78 | + |
| 79 | +大致浏览了下内容,主要有两部分反作弊:调速和注入。 |
| 80 | + |
| 81 | +# 调速 |
| 82 | + |
| 83 | +很简单,就是如果 5 次检测到网络时间比游戏时间时间快过 5 秒就发送封号请求(真的不考虑网络卡顿吗)。 |
| 84 | + |
| 85 | +<div style="text-align:center"> |
| 86 | +<img src="/static/blogs/20250629-brokenarrow/speedhack.png" alt=""/> |
| 87 | +</div> |
| 88 | + |
| 89 | +# 注入检测 |
| 90 | + |
| 91 | +注入检测就比较简单了,直接调用反作弊模块的注入检查: |
| 92 | + |
| 93 | +<div style="text-align:center"> |
| 94 | +<img src="/static/blogs/20250629-brokenarrow/inject.png" alt=""/> |
| 95 | +</div> |
| 96 | + |
| 97 | +点进去继续看,全是给某个数组添加 string,而这些 string 都是已知的调试或作弊工具 |
| 98 | + |
| 99 | +<div style="text-align:center"> |
| 100 | +<img src="/static/blogs/20250629-brokenarrow/arrayadd.png" alt=""/> |
| 101 | +</div> |
| 102 | + |
| 103 | +传奇调试工具 `ollydbg` |
| 104 | + |
| 105 | +<div style="text-align:center"> |
| 106 | +<img src="/static/blogs/20250629-brokenarrow/od.png" alt=""/> |
| 107 | +</div> |
| 108 | + |
| 109 | +实现也非常简单。。。。就是个遍历搜索。。。。 |
| 110 | + |
| 111 | +<div style="text-align:center"> |
| 112 | +<img src="/static/blogs/20250629-brokenarrow/search.png" alt=""/> |
| 113 | +</div> |
| 114 | + |
| 115 | +# 评价 |
| 116 | + |
| 117 | +灾难性的反作弊,稍微有点基础的都可以绕过。。。。 也只能防防最基础的修改器了。 |
0 commit comments