Asphaltian/OpenRBX
GitHub: Asphaltian/OpenRBX
OpenRBX 是 Roblox 2007 年版本的逆向还原与开源重实现项目,旨在逐指令重建原始二进制并产出可继续开发的代码树。
Stars: 0 | Forks: 0
# OpenRBX
这是对 Roblox 2007 年 12 月发布版本的逆向还原。其目标是逐条指令地重建原始二进制文件,并最终得到一个值得在此基础上继续构建的代码树。
规范和工具遵循 [LEGO Island 逆向还原](https://github.com/isledecomp/isle)项目。
## 状态
仍处于早期阶段。`WebService.dll` 包含 12,633 个函数。
RBXGS(游戏服务器)优先处理,因为它附带的 `WebService.dll` 包含未剥离的 PDB。客户端紧随其后。无论如何,大部分工作都是通用的:`common/` 下的引擎库是两者共享的,并且 `WebService.dll` 内部六个链接时代码生成对象中有三个来自客户端代码树,而不是服务器的。
## 构建
Visual C++ 8.0 SP1 编译了原始版本,并且是唯一能重现其输出的工具链,因此贡献内容将以它为标准进行衡量。
#### 前置条件
- Visual C++ 8.0 SP1。[MSVC800-SP1](https://github.com/Asphaltian/MSVC800-SP1) 是一个免安装的便携版副本。版本号很重要:原始版本是使用 `.762` 构建的,而 RTM 版本的 `.42` 会生成不同的代码。
- [CMake](https://cmake.org/),可以是独立版本,也可以来自当前 Visual Studio 的“使用 C++ 的桌面开发”工作负载。
#### 编译
打开命令提示符并运行工具链中的 `Common7\Tools\vsvars32.bat` 来设置环境。不要使用 `VC\bin\vcvars32.bat`,因为它会引用 `%VS80COMNTOOLS%` 并期望找到已注册的安装。
然后进行配置和构建:
```
cmake -B build -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build
```
`RelWithDebInfo` 会保留进一步逆向工作所需的调试符号,而 NMake Makefiles 是能够兼容这种老旧工具链的生成器。构建结果是 `build\WebService.dll`。
### 验证
要将构建结果与原始版本进行比较,请安装 [reccmp](https://github.com/isledecomp/reccmp):
```
pip install -r tools/requirements.txt
```
通过项目根目录中的 `reccmp-user.yml`,将其指向你的原始副本:
```
targets:
WEBSERVICE:
path: path/to/WebService.dll
```
然后执行:
```
reccmp-reccmp --target WEBSERVICE -S WEBSERVICEPROGRESS.SVG
```
## 项目结构
- `WebService/` - RBXGS 特定的编译单元
- `common/` - 引擎静态库,原始链接消耗的每个 `.lib` 对应一个目录
- `3rdparty/` - 内部依赖项
- `util/` - 支持逆向工程本身的头文件
- `cmake/` - CMake 模块
- `tools/` - Python 工具及其依赖要求
- `reccmp/` - reccmp 的数据源
- `assets/` - 进度报告的图标
## 目标二进制文件
| 二进制文件 | 大小 | SHA256 |
|--------|------|--------|
| WebService.dll | 3,461,120 字节 | `5e9c6b82605fc8429c5fc5f682f2d7f98b55b73d993dfba58437365754410e2f` |
版本 0.3.676.0,日期为 2007 年 12 月 20 日。
## 贡献
欢迎提交贡献。简明的规范如下:
- 使用 reccmp 标记(`FUNCTION:`、`STUB:`、`GLOBAL:`)为逆向代码添加注释
- 在编译单元内按地址升序排列函数
- 将每个文件放置在 `WebService.pdb` 为其记录的路径中
- 遵循 clang-format 配置
- 在 PDB 中有对应名称的地方采用 PDB 中的名称,仅在 PDB 中没有的地方使用 NCC 占位符(`FUN_XXXXXXXX`、`g_unk0xXXXXXXXX`)
- 保持拉取请求简短且聚焦
[CONTRIBUTING.md](CONTRIBUTING.md) 详细涵盖了上述每项规范。
标签:Bash脚本, C++, URL提取, 云资产清单, 反编译, 开源重制, 数据擦除, 游戏引擎, 逆向工具, 逆向工程