wowemulation-dev/protobuf-decompiler

GitHub: wowemulation-dev/protobuf-decompiler

该工具专为《魔兽世界》客户端分析设计,能从二进制文件中的 Protocol Buffers 反射元数据重建出完整的 `.proto` 文件。

Stars: 1 | Forks: 0

# protobuf-decompiler 从二进制文件中编译的 Google Protocol Buffers 反射元数据重建 `.proto` 文件。专为《魔兽世界》客户端分析而设计。
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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//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 构建
标签:Bash脚本, C++, CMake, Protocol Buffers, 云资产清单, 数据提取, 数据擦除, 游戏辅助, 逆向工程