wowemulation-dev/protobuf-decompiler
GitHub: wowemulation-dev/protobuf-decompiler
该工具专为《魔兽世界》客户端分析设计,能从二进制文件中的 Protocol Buffers 反射元数据重建出完整的 `.proto` 文件。
Stars: 1 | Forks: 0
# protobuf-decompiler
从二进制文件中编译的 Google Protocol Buffers 反射元数据重建 `.proto` 文件。专为《魔兽世界》客户端分析而设计。
/bin/protobuf_decompiler
```
#### 传统 CMake 构建
```
# Clone 仓库
git clone https://github.com/wowemulation-dev/protobuf-decompiler.git
cd protobuf-decompiler
# 创建 build 目录并进行配置
mkdir build && cd build
cmake ..
# 构建(自动处理 protobuf 2.6.1 依赖)
make -j$(nproc)
# 可选:在系统范围内安装
sudo make install
```
构建系统会自动:
- 检测系统是否已安装 protobuf 2.6.1 并使用它
- 如有需要,从源码下载并构建 protobuf 2.6.1
- 处理所有依赖项和链接
### 用法
```
# 从二进制文件中提取 protobuf schema
./protobuf_decompiler --binary /path/to/binary
# 扫描目录以查找 .protoc 文件
./protobuf_decompiler --directory /path/to/directory
# 指定输出目录
./protobuf_decompiler --binary /path/to/binary --output ./output/
# 显示帮助和选项
./protobuf_decompiler --help
```
**示例:**
```
# 从 WoW Classic 二进制文件中提取(按版本组织输出)
./protobuf_decompiler --binary /path/to/classic/client/archive//Wow.exe --output ./output/
# 使用实际版本的示例
./protobuf_decompiler --binary ~/Downloads/battle.net/wow_classic/1.13.2.31650.windows-win64/_classic_/Wow.exe --output ./output/1.13.2.31650.windows-win64
# Legacy 位置参数(向后兼容)
./protobuf_decompiler /path/to/binary
# 扫描目录以查找 .protoc 文件
./protobuf_decompiler --directory ./extracted_files/
```
## 工作原理
1. 在可执行文件中搜索嵌入的 protobuf 描述符
2. 使用内部 API 解析 protobuf 反射元数据
3. 解决消息类型和导入之间的依赖关系
4. 生成保持原始结构的 `.proto` 文件
实现细节:
- 直接进行二进制分析以提取描述符
- 双趟依赖解析
- 使用 protobuf 内部 API 操作
- 在输出中保留目录结构
## 构建选项
```
# 带有符号的 debug build
cmake -DCMAKE_BUILD_TYPE=Debug .. && make -j$(nproc)
# 使用特定的 compiler
CXX=clang++ cmake .. && make -j$(nproc)
# 使用 Ninja 以加快构建速度
cmake -G Ninja .. && ninja
# 格式化代码(需要在项目根目录下有 .clang-format)
make format
```
## 系统要求
- **操作系统**:Linux、macOS
- **架构**:x86_64、ARM64
- **内存**:最低 512MB RAM
- **磁盘空间**:构建产物需要 100MB
## 许可证
本项目采用 [MIT 许可证](LICENSE.md) 授权。
## 重要说明
- 需要 protobuf 2.6.1 版本以保证 API 兼容性
- 已在《魔兽世界》客户端上测试(6.0.2+ 正式服,1.13.2+ 怀旧服)
- 包含故意的内存泄漏,以避免 protobuf 双重释放问题
- 使用指针算术访问 protobuf 内部结构
- 由于 protobuf 2.6.1 的兼容性要求,目前在 CI 中不支持 Windows 构建
[](LICENSE.md)
**支持的《魔兽世界》版本:**
- **正式服 (Retail)**:6.0.2 (德拉诺之王) 至最新正式服版本
- **怀旧服 (Classic)**:1.13.2 至最新怀旧服版本
## 功能
- 从二进制文件中提取 protobuf 描述符
- 重建具有原始结构和依赖关系的 `.proto` 文件
- 支持 Linux 和 macOS 平台
- 具有多种输入方式的命令行界面
## 快速开始
### 前置条件
**必需:**
- **CMake** (≥ 3.28)
- 兼容 **C++17** 的编译器 (GCC 或 Clang)
- **Boost** (≥ 1.51) - 组件:filesystem、system、program_options
### 构建
#### 使用 CMake Presets(推荐)
```
# Clone 仓库
git clone https://github.com/wowemulation-dev/protobuf-decompiler.git
cd protobuf-decompiler
# 列出可用的 preset
cmake --list-presets
# 使用 preset 配置和构建(例如,使用 GCC 进行 release build)
cmake --preset gcc-release
cmake --build --preset gcc-release
# 或者用于 debug build
cmake --preset gcc-debug
cmake --build --preset gcc-debug
# 二进制文件将位于 build/标签:Bash脚本, C++, CMake, Protocol Buffers, 云资产清单, 数据提取, 数据擦除, 游戏辅助, 逆向工程