repinek/frida-il2cpp-proto-dumper
GitHub: repinek/frida-il2cpp-proto-dumper
利用 Frida 动态注入从 IL2CPP Unity 游戏中提取 protobuf-net 消息定义,生成有效的 .proto3 文件。
Stars: 8 | Forks: 0
# frida-il2cpp-proto-dumper
使用 [Frida](https://frida.re/) 和 [frida-il2cpp-bridge](https://github.com/vfsfitvnm/frida-il2cpp-bridge) 从 IL2CPP Unity 游戏中提取 `protobuf-net` 消息和枚举,并生成有效的 `.proto` 文件。
## 工作原理
通过 Frida 注入到游戏进程,并在运行时遍历 IL2CPP 域。
使用原生的 IL2CPP 导出函数查找所有带有 `[ProtoContract]` 特性的类和枚举,然后通过托管反射读取它们的成员,以提取字段名、tag 和类型。
生成有效的 `.proto3` schema。
## 环境要求
- [Frida](https://frida.re) 需要 Python >= 3.7
- Node.js
- Unity IL2CPP 游戏 _(可能不支持受保护或被混淆的游戏)_
## 使用说明
1. 克隆仓库
```
git clone https://github.com/repinek/frida-il2cpp-proto-dumper
cd frida-il2cpp-proto-dumper
```
2. 安装依赖
```
python -m venv .venv # Creating a virtual environment for Python
# 激活 Python venv,这取决于您使用的 OS。例如使用 fish 的 Linux:
. .venv/bin/activate.fish
pip install -r requirements.txt
npm install
```
3. 构建脚本
```
npm run build
```
脚本将被构建到 `dist/agent.js` 中
4. 使用任意方法运行脚本(frida-server、frida-gadget 等)
成功附加后,脚本将自动提取数据,并输出最终的文件绝对路径。
#### 预期输出
```
Script and Il2cpp Loaded!
x assemblies loaded!
Found 2 custom_attrs exports!
Checking Assembly-CSharp...
Found proto classes in protobuf-net!
Dumping ABC.XYZ...
Done! Written to /abc/xyz/proto/dump.proto
```
## 许可证
该项目基于 **MIT License** 授权。
详情请参阅 [LICENSE](LICENSE) 文件。
## 鸣谢
该项目受到 DJ Katy 研究的启发并基于其研究。
- **[Il2CppProtoExtractor-FallGuys](https://github.com/djkaty/Il2CppProtoExtractor-FallGuys)** - 原始的 C# 工具,使用 [Il2CppInspector](https://github.com/djkaty/Il2CppInspector) 生成 `.proto` 文件
- **[Practical IL2CPP: Extracting Protobuf Definitions](https://katyscode.wordpress.com/2020/08/10/practical-il2cpp-protobuf/)** - djkaty 撰写的关于逆向工程 `protobuf-net` 结构和 IL2CPP 的文章。
标签:Docker支持, Frida, MITM代理, Protobuf, Unity, 云资产清单, 数据可视化, 数据提取, 游戏安全, 自动化攻击, 逆向工具, 逆向工程