smartfish67png/BetterCpp2IL
GitHub: smartfish67png/BetterCpp2IL
一款增强的 Unity IL2CPP 逆向工程工具,能将游戏的原生二进制文件深度还原为可编译的 C# 源代码。
Stars: 0 | Forks: 0
# Cpp2IL - 增强版
```
░░░░░░ ░░░░░░░ ░░░░░░░░ ░░░░░░░░ ░░░░░░░ ░░░░░░ ░░░░░░ ░░░░░░ ░░░░░░ ░░░░░░ ░░ ░░
▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒▒▒▒▒ ▒▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒ ▒▒ ▒▒
▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓
██████ ███████ ██ ██ ███████ ██ ██ ██████ ██ ██ ███████ ██ ███████
```
### 高级 IL2CPP 反编译与恢复工具
Cpp2IL 是一个强大的工具,它将 Unity 的 IL2CPP 构建过程进行逆向工程,还原为
可读的 C# 源代码。它解析 IL2CPP 元数据和二进制文件,使用指令集无关表示进行深度分析,并重构出可编译的 C# 代码,包含类型解析、控制流恢复、属性/事件检测、空检查消除以及激进的拷贝传播。
## 功能
- **C# 源代码重构** - 从 IL2CPP 二进制文件输出可编译的 .cs 文件
- **类型传播** - 通过方法分析解析局部变量类型
- **控制流恢复** - 重构 if/else、循环和 switch 语句
- **属性和事件检测** - 将 get_/set_ 方法识别为 C# 属性/事件
- **空检查消除** - 移除 Unity 运行时的空检查样板代码
- **拷贝传播** - 消除由 phi 节点破坏产生的冗余局部到局部移动
- **运算符解析** - 将 op_Equality、op_Addition 等转换为 C# 运算符
- **多平台** - 支持 Windows、Linux、macOS x64/arm64、WebAssembly 和 PS4
## 快速开始
```
Cpp2IL --game-path="C:\Path\To\Your\Game"
```
或者用于 APK 文件:
```
Cpp2IL --game-path="C:\Path\To\game.apk"
```
默认情况下,输出将被写入到 `cpp2il_out/`。
## 用法
### 基本用法
```
Cpp2IL --game-path= [--output-as=] [--output-to=]
```
### 命令行选项
| 选项 | 示例 | 描述 |
|:------:|:-------:|:-----------:|
| `--game-path` | `C:\Path\To\Game` | 游戏文件夹或 APK 的路径。必填。 |
| `--exe-name` | `TestGame` | 如果自动检测失败,指定游戏的 exe 名称 |
| `--verbose` | | 启用详细日志记录 |
| `--output-as` | `csharp_source` | 输出格式(默认:`csharp_source`) |
| `--output-to` | `out` | 输出目录(默认:`cpp2il_out`) |
| `--list-output-formats` | | 列出可用的输出格式 |
| `--list-processors` | | 列出可用的处理层 |
### 输出格式
| 格式 | 描述 |
|:------:|:-----------:|
| `csharp_source` | 重构的 C# 源代码(推荐) |
| `dll_il_recovery` | 包含恢复的 IL 的托管 DLL(需要分析) |
| `metadata` | 原始元数据转储 |
| `mewedumped` | Mewed 风格的元数据转储 |
## 项目结构
```
Cpp2IL/
├── src/ # Source projects
│ ├── Cpp2IL/ # CLI application
│ ├── Cpp2IL.Core/ # Core analysis library
│ ├── LibCpp2IL/ # IL2CPP metadata parser
│ ├── StableNameDotNet/ # Name stabilization
│ ├── WasmDisassembler/ # WebAssembly support
│ └── Cpp2IL.Plugin.*/ # Plugins
├── tests/ # Test projects
│ ├── Cpp2IL.Core.Tests/
│ └── LibCpp2ILTests/
├── docs/ # Documentation
└── TestFiles/ # Test data
```
## 构建
### 前置条件
- .NET 10.0 SDK(旧版本构建使用 .NET 9.0)
- .NET Framework 4.7.2 SDK(用于旧版构建)
### 构建命令
```
# 构建所有 projects
dotnet build -c Release
# 仅构建 CLI
dotnet build src/Cpp2IL/Cpp2IL.csproj -c Release
# 运行 tests
dotnet test -c Release
```
## 开发
反编译 pipeline 的工作流程如下:
1. **IL2CPP 解析** (`LibCpp2IL`) - 读取元数据和二进制文件
2. **ISIL 转换** (`Cpp2IL.Core`) - 将 x86/ARM/WASM 转换为指令集无关语言
3. **CFG 构建** - 通过支配者分析构建控制流图
4. **方法分析** - 执行栈分析、简化和元数据应用
5. **C# 生成** (`CSharpSourceOutputFormat`) - 输出重构的 C# 源代码
关键入口点:
- `MethodAnalysisContext.Analyze()` - 开始一个方法的反编译
- `CSharpSourceOutputFormat` - 处理 C# 源代码输出
- `Simplifier` - 在 ISIL 上运行优化遍次
## CI/CD
每次推送都会触发 GitHub Actions 构建:
- 针对 Windows、Linux、macOS (x64 + arm64) 的原生构建
- 用于 Wine/Proton 兼容性的 .NET Framework 4.7.2 构建
- 完整的测试套件
### 依赖项
使用以下库构建(除非另有说明,均为 MIT 协议):
- [iced](https://github.com/icedland/iced) - x86 反汇编器
- [Disarm](https://github.com/SamboyCoding/Disarm) - ARM64 反汇编器
- [AsmResolver](https://github.com/Washi1337/AsmResolver) - .NET 程序集操作
- [AssetRipper.CIL](https://github.com/AssetRipper/AssetRipper.CIL) - IL 桩生成
- [Pastel](https://github.com/silkfire/Pastel) - 控制台颜色
- [CommandLineParser](https://github.com/commandlineparser/commandline) - CLI 解析
- [xUnit](https://github.com/xunit/xunit) - 测试(Apache 2.0 + MIT)
### 致谢
基于 [Il2CppDumper](https://github.com/Perfare/Il2CppDumper) 和
[Il2CppInspector](https://github.com/djkaty/Il2CppInspector/)。
感谢我自己提供的早期支持。
## 许可证
本项目基于 MIT 协议授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
标签:IL2CPP, Unity, URL提取, 云安全监控, 云资产清单, 代码重构, 反编译, 渗透测试, 逆向工程, 静态分析