Skip to content

Commit ae969fa

Browse files
committed
add new blog
1 parent c04133a commit ae969fa

9 files changed

Lines changed: 121 additions & 1 deletion

File tree

blogs/20250629-brokenarrow.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
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+
灾难性的反作弊,稍微有点基础的都可以绕过。。。。 也只能防防最基础的修改器了。

blogs/blog.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@ title: Blogs
66
{% include title_patch.html %}
77

88
# 2024.10.01
9-
- [学习某订阅付费程序过程]({{ page.permalink }}/20241001-wemod)
9+
- [学习某订阅付费程序过程]({{ page.permalink }}/20241001-wemod)
10+
11+
# 2025.06.29
12+
- [浅析某箭的反作弊机制]({{ page.permalink }}/20250629-brokenarrow)
61.1 KB
Loading
80.7 KB
Loading
96.9 KB
Loading
16 KB
Loading
25.7 KB
Loading
99.3 KB
Loading
71.2 KB
Loading

0 commit comments

Comments
 (0)