# Unity 小游戏代码安全加固工具

《Unity 小游戏代码安全加固工具》是一款针对unity小游戏代码的保护工具，对明文游戏代码提供加固保护，包含了针对global-metadata.dat的加密、代码混淆以及部分对抗外挂的能力，能够较全面的保护游戏的健康运营。

《Unity 小游戏代码安全加固工具》可以通过安装[转换工具](/minigame/dev/guide/game-engine/unity-webgl-transform/Design/SDKInstaller.md)来使用，开发者只需要勾选对应的加固选项，即可在通过转换插件导出小游戏代码包时一键加固

![](https://res8.wxqcloud.qq.com.cn/wxdoc/fcaa6e2c-e58f-4f49-bb74-dcd4ea6c7624.png)
![](https://res8.wxqcloud.qq.com.cn/wxdoc/df20d508-0fea-4d1f-8c6e-b6a9b2065db1.png)

## 工具作用与价值

《Unity 小游戏代码安全加固工具》针对的是 Unity 小游戏的两类核心资产：

- **global-metadata.dat**：Unity IL2CPP 方案下的元数据文件，是 C# 代码逻辑的关键载体，明文状态下可被工具（如 Il2CppDumper）直接解析还原出类名、方法名、字段名等代码结构；
- **WASM 代码**：Unity 导出到微信小游戏时编译为 WebAssembly，包含游戏的实际运行逻辑。

加固的价值体现在三个层面：

| 风险类型 | 未加固的风险 | 加固后的防护效果 |
|---------|------------|----------------|
| 代码抄袭 | global-metadata.dat 明文可读，游戏逻辑、类结构、核心算法可被完整提取复制 | 加密后元数据不可直接解析，大幅提高还原成本 |
| 代码侵权 / 权益归属 | 无法证明代码归属 | 加固后的代码带唯一特征，为代码权益归属提供辅助证据 |
| 外挂 / 作弊 | WASM 明文逻辑暴露，关键函数（如领奖、读档、存档）易被定位并 hook / 篡改 | 函数级混淆使关键逻辑难以静态分析、难以定位攻击点 |

## 手动安装指南

`打开游戏工程` ->  `Unity/团结引擎 Editor 菜单栏` -> `Package Manager` -> `右上方 “+”` -> `Add package from git URL` URL地址为：

```
https://github.com/wechat-miniprogram/minigame-tuanjie-transform-sdk.git
```
或国内Gitee镜像：

```
https://gitee.com/wechat-minigame/minigame-tuanjie-transform-sdk.git
```

即可完成SDK导入

> 如果未出现对应的加固菜单，可以选择安装 https://github.com/wechat-miniprogram/minigame-tuanjie-transform-sdk.git#feat-wxmonitor

## 工具使用流程

### global-metdata.dat 加密

勾选，转换插件在导出小游戏代码时会自动加密

![](https://res8.wxqcloud.qq.com.cn/wxdoc/8527132b-7ecc-404f-b611-c56a1ec2ae06.png)

**防护原理：** global-metadata.dat 是 IL2CPP 构建产物的元数据文件，未加密时明文存储了所有 C# 类型、方法、字段的名称与结构信息。攻击者可通过 Il2CppDumper 等工具直接读取该文件，还原出完整的类图与代码结构，进而进行抄袭或定位外挂修改点。

**加密效果：**

- 元数据文件从「明文可读」变为「密文」，脱离运行时无法直接解析；
- 大幅提高代码结构还原与逻辑抄袭的技术门槛；
- 加密操作在导出流程中自动完成，开发者无需额外改动代码。

### WASM函数级加固

开发者需要在代码中引入对应的命名空间，并且在 C# 代码中标记需要保护的函数， 区分不同加固等级，默认为中级

```c#
using WeChatWASM.GameProtect.Obfuscation;

[WasmObfuscate(level = 1)]       // Light
public void ClaimMission() { ... }

[WasmObfuscate]                  // Medium (默认)
public void Read() { ... }

[WasmObfuscate(level = 3)]       // Heavy
public void Save() { ... }
```

![](https://res8.wxqcloud.qq.com.cn/wxdoc/4cec08ff-facf-4c29-80ac-63c01e1c3f5b.png)

**防护原理：** 对标记的函数在 WASM 层面做混淆（控制流平坦化、指令替换等），攻击者无法通过静态分析快速理解或定位关键逻辑。

**加固等级说明：**

| 等级 | 标识 | 防护强度 | 适用场景 | 说明 |
|------|------|---------|---------|------|
| Light | `level = 1` | 低 | 对性能敏感的函数 | 混淆强度低，对体积与性能影响最小 |
| Medium | 默认（不写 level） | 中 | 一般业务逻辑函数 | 防护与性能的平衡点 |
| Heavy | `level = 3` | 高 | 核心玩法、防作弊关键函数（如领奖、存档） | 混淆强度最高，体积与性能开销相对更大 |

**加固建议：**

- 重点保护涉及核心玩法、奖励结算、存档读写的函数（如上面的 `ClaimMission`、`Read`、`Save`）；
- 不同加固等级会影响代码体积与运行时性能，若无特殊要求，建议对核心逻辑使用高等级。

**注意事项：**

- 加固后必须要对游戏做充分测试，确保逻辑无误后方可上线。
