REFramework 完整分析报告
项目地址 : https://github.com/praydog/REFramework
分析日期 : 2026-05-07
报告版本: v3.0 --- 合并版
目录
- 项目概览
- 社区数据
- 技术栈与语言分布
- 依赖生态深度解析
- 源码架构逐层剖析
- [RE Engine SDK 逆向工程分析](#RE Engine SDK 逆向工程分析)
- [Hook 技术栈详解](#Hook 技术栈详解)
- [Lua 脚本系统深度分析](#Lua 脚本系统深度分析)
- [VR 子系统架构](#VR 子系统架构)
- 多游戏适配机制
- 支持的游戏列表
- 构建系统深度解析
- 核心功能模块
- [Issue 分析与社区健康度](#Issue 分析与社区健康度)
- 安全与逆向工程视角
- 生态与关联项目
- 竞品对比
- 改进建议
- 总结与评价
- 附录:关键文件索引
一、项目概览
| 项目属性 | 详情 |
|---|---|
| 项目名称 | REFramework |
| 作者 | praydog (GitHub ID: 2909949) |
| 项目定位 | RE Engine 游戏的 Mod 加载器、脚本平台与 VR 支持框架 |
| 开源协议 | MIT License |
| 创建时间 | 2019-01-31 |
| 最后更新 | 2026-04-26(最新 commit) |
| 主语言 | C++(占 94.3%) |
| 仓库大小 | ~53 MB |
| 默认分支 | master |
| 官方网站 | https://reframework.praydog.com/ |
REFramework 是 Capcom RE Engine 的通用运行时修改框架 ,通过 DLL 注入 + 函数 Hook + 逆向 SDK,为所有 RE Engine 游戏提供 Mod 加载、Lua 脚本和 VR 支持。灵感来源于 Kanan 项目。
核心价值主张
传统 Mod 方式:每款游戏单独逆向 → 每款游戏单独工具 → 社区碎片化
REFramework 方式:统一逆向 RE Engine → 一套框架适配所有游戏 → 生态集中
关键洞察:Capcom 自 RE Engine (2017) 以来,所有主力游戏共用同一引擎底层。REFramework 抓住了这个共性,在引擎层面而非游戏层面进行逆向,实现了「一次开发,多游戏受益」的效果。
用户群体画像
| 用户类型 | 使用场景 | 核心功能 |
|---|---|---|
| 普通玩家 | 安装 Mod、VR 游玩 | Mod 加载、VR 模式 |
| Mod 作者 | 编写 Lua 脚本修改游戏行为 | Lua API、对象浏览器 |
| 摄影玩家 | 自由视角截图/录制 | Free Camera、FOV、GUI Hider |
| 速通社区 | 辅助工具、训练模式 | Timescale、脚本自动化 |
| VR 爱好者 | 在 VR 中体验 3A 大作 | 6DOF VR、运动控制器 |
二、社区数据
| 指标 | 数值 |
|---|---|
| ⭐ Stars | 5,061 |
| 🍴 Forks | 544 |
| 👀 Watchers | 91 |
| 🐛 Open Issues | 623 |
| 📦 最新版本 | v1.5.9.1 (2025-03-05) |
| 🔧 Contributors | 10+ |
贡献者排名
| 排名 | 用户 | 贡献次数 | 角色 |
|---|---|---|---|
| 1 | praydog | 1,980 | 项目创始人 & 核心维护者 |
| 2 | cursey | 138 | VR 组件 & 脚本系统联合开发 |
| 3 | hcdd0304 | 16 | 贡献者 |
| 4 | Strackeror | --- | 贡献者 |
致谢名单(README 中提及)
- SkacikPL --- 手电筒 Mod 原作者
- cursey --- VR 组件 & 脚本系统联合开发
- The Hitchhiker & alphaZomega --- 压力测试、脚本创建、建议贡献
发布历史(近期)
| 版本 | 发布日期 | 主要内容 |
|---|---|---|
| v1.5.9.1 | 2025-03-05 | 最新稳定版,包含 DD2/DMC5/MHRISE 等多游戏构建 |
| Nightly | 持续更新 | 开发版,包含最新修复(如 RE9 崩溃修复) |
最新提交记录(2026年4月)
| 日期 | 提交信息 |
|---|---|
| 2026-04-26 | LooseTextureLoader: Fix RE9 crash --- 修复 RE9 松散纹理加载崩溃 |
| 2026-04-25 | cleanup: remove AI slop docs and move scripts to dev/ --- 清理文档,移动构建脚本到 dev/ |
v1.5.9.1 下载统计(部分资产)
| 构建 | 文件大小 | 下载次数 |
|---|---|---|
| DD2.zip | 5.28 MB | 25,599 |
| DMC5.zip | 5.24 MB | 20,474 |
| MHRISE.zip | 5.28 MB | 18,919 |
三、技术栈与语言分布
| 语言 | 字节数 | 占比 |
|---|---|---|
| C++ | 41,888,285 | 94.30% |
| C | 589,695 | 1.33% |
| C# | 412,977 | 0.93% |
| Lua | 192,038 | 0.43% |
| Python | 118,113 | 0.27% |
| CMake | 109,554 | 0.25% |
| JavaScript | 56,078 | 0.13% |
| CSS | 14,519 | 0.03% |
| HTML | 4,291 | 0.01% |
| Batchfile | 2,593 | 0.01% |
分析:
- 核心代码以 C++ 为主(绝对主导),符合游戏引擎级别的性能需求
- Lua 作为脚本语言,为 Mod 作者提供低门槛的扩展能力
- C# 可能用于编辑器工具或部分辅助组件
- Python 用于构建/CI 工具脚本
- CMake 作为构建系统,支持多目标编译
四、依赖生态深度解析
REFramework 的依赖选择极其精准,每个库都有明确的技术目的:
4.1 第三方依赖全景
| 依赖库 | 版本/Commit | 用途 | 技术重要性 |
|---|---|---|---|
| asmjit | 2a706fd |
x86/x64 JIT 汇编器 | ⭐⭐⭐⭐⭐ 用于运行时代码生成和 Hook 跳板 |
| safetyhook | b046e12 (by cursey) |
安全的函数 Hook 库 | ⭐⭐⭐⭐⭐ 核心 Hook 机制 |
| minhook | 内置 | 轻量级 x86 Hook 库 | ⭐⭐⭐⭐ 备用/兼容 Hook 方案 |
| bddisasm | 70db095 (Bitdefender) |
x86 反汇编器 | ⭐⭐⭐⭐ 指令长度计算、安全 Hook |
| kananlib | 8c27b65 (by cursey) |
游戏修改工具库 | ⭐⭐⭐⭐ 内存扫描、模式匹配 |
| OpenXR SDK | 458984d (Khronos) |
VR 标准 API | ⭐⭐⭐⭐ VR 子系统核心 |
| OpenVR | 内置 (Valve) | SteamVR API | ⭐⭐⭐ SteamVR 兼容层 |
| DirectXTK | f5026eb (Microsoft) |
DX11 工具包 | ⭐⭐⭐ VR 帧合成 |
| DirectXTK12 | be5dfc7 (Microsoft) |
DX12 工具包 | ⭐⭐⭐ VR 帧合成 |
| Lua | 内置源码 | 脚本语言 | ⭐⭐⭐⭐⭐ 脚本系统核心 |
| sol2 | 内置 | C++/Lua 绑定库 | ⭐⭐⭐⭐ 类型安全的 Lua 绑定 |
| ImGui | 内置 | 即时模式 GUI | ⭐⭐⭐⭐ 调试界面、Mod 菜单 |
| ImGuizmo | 内置 | 3D Gizmo 控件 | ⭐⭐ 对象操控 |
| imnodes | 内置 | 节点编辑器 | ⭐⭐ 可视化脚本 |
| spdlog | 内置 | 高性能日志 | ⭐⭐⭐ 调试与错误追踪 |
| freetype | f1cd6db |
字体渲染 | ⭐⭐ ImGui 中文/多语言支持 |
| glm | 内置 | 数学库 | ⭐⭐⭐ 3D 向量/矩阵运算 |
| nlohmann_json | 内置 | JSON 解析 | ⭐⭐ 配置文件处理 |
4.2 依赖关系图
┌──────────────────────────────────────┐
│ REFramework DLL │
│ (各游戏的目标构建: RE2/RE3/DMC5...) │
└───────────────┬──────────────────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ Hook 层 │ │ 脚本层 │ │ VR 层 │
│ │ │ │ │ │
│ safetyhook │ │ Lua (源码) │ │ OpenXR SDK │
│ minhook │ │ sol2 │ │ OpenVR │
│ asmjit │ │ │ │ DirectXTK │
│ bddisasm │ │ │ │ DirectXTK12 │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ kananlib │ │ ImGui │ │ glm │
│ (内存扫描) │ │ (调试 UI) │ │ (数学运算) │
└─────────────┘ └─────────────┘ └─────────────┘
4.3 关键技术选择评价
✅ 优秀选择:
- safetyhook + asmjit:比传统 minhook 更安全,支持更复杂的 Hook 场景
- sol2:类型安全的 C++/Lua 绑定,比 raw Lua C API 好用 10 倍
- bddisasm(Bitdefender 出品):工业级反汇编器,指令长度计算精确
- 双 D3D Hook:同时支持 DX11 和 DX12,覆盖所有 RE Engine 游戏
⚠️ 潜在风险:
- OpenVR 以预编译 .lib 形式引入:无法从源码审计,且 Valve 已逐步推 OpenXR
- 多个 Hook 库并存(safetyhook + minhook):增加了维护复杂度
- Lua 以源码引入:版本更新需要手动同步
五、源码架构逐层剖析
5.1 项目结构总览
REFramework/
├── .clang-format # 代码格式化配置
├── .clang-tidy # 静态分析配置 (2.4KB 规则集)
├── .github/
│ ├── ISSUE_TEMPLATE/ # Bug 报告 & 功能请求模板
│ └── workflows/
│ ├── build-pr.yml # PR 构建 CI
│ └── dev-release.yml # 开发版自动发布
├── CMakeLists.txt # 主构建文件 (67KB,多目标)
├── CMakePresets.json # CMake 预设
├── COMPILING.md # 编译指南
├── LICENSE # MIT 协议
├── README.md # 项目说明
├── dev/ # 开发/CI 工具脚本
├── src/ # 源代码目录
├── shared/ # 共享库 (SDK + 工具)
├── scripts/ # Lua 脚本示例
├── games/ # 各游戏适配模块
└── imgui/ # ImGui 调试界面
5.2 src/ 目录 --- 核心框架
| 文件 | 大小 | 职责 |
|---|---|---|
D3D11Hook.cpp/hpp |
10KB / 2KB | DirectX 11 渲染管线 Hook |
D3D12Hook.cpp/hpp |
30KB / 4KB | DirectX 12 渲染管线 Hook(最复杂的单文件之一) |
DInputHook.cpp/hpp |
3.6KB / 1.2KB | DirectInput Hook(键盘/手柄输入拦截) |
DisasmUtils.hpp |
2.6KB | 反汇编工具函数 |
ExceptionHandler.cpp/hpp |
5.2KB / 0.15KB | SEH 异常处理 |
Genny.hpp |
--- | 代码生成工具 |
D3D12Hook.cpp(30KB) 是整个项目中最大的单文件之一,原因在于:
- D3D12 的命令队列模型比 D3D11 复杂得多
- 需要 Hook
Present、ExecuteCommandLists、ResizeBuffers等多个虚函数 - VR 合成需要在正确的时机拦截帧缓冲
5.3 shared/ 目录 --- SDK 与工具
shared/
├── sdk/ # RE Engine SDK(逆向工程产物)
│ ├── REType*.cpp/hpp # 引擎类型系统
│ ├── REGameObject.* # 游戏对象
│ ├── REManagedObject.* # 托管对象(RE Engine GC)
│ ├── RETransform.* # 变换组件(位置/旋转/缩放)
│ ├── REComponent.* # 组件系统
│ ├── REContext.* # 执行上下文
│ ├── REDelegate.* # 委托/事件系统
│ ├── REGlobals.* # 全局单例
│ ├── RETypeDB.* # 类型数据库
│ ├── REVTableHook.* # 虚函数表 Hook
│ ├── ReClass_Internal_*.hpp # 各游戏的内部类定义
│ ├── MurmurHash.* # 哈希算法(RE Engine 使用)
│ ├── REArray.* # 引擎数组类型
│ ├── REString.hpp # 引擎字符串类型
│ ├── REMath.hpp # 引擎数学库
│ ├── Application.* # 应用程序层
│ ├── GameIdentity.* # 游戏识别
│ ├── GUIPrimitiveSystem.*# GUI 图元系统
│ └── MotionFsm2Layer.* # 动画状态机
└── utility/
├── FunctionHook.* # 函数 Hook 封装
├── FunctionHookMinHook.* # MinHook 封装
├── Relocate.* # 地址重定位
└── Exceptions.* # 异常处理
5.4 架构分层
┌─────────────────────────────────────────────────────┐
│ Layer 5: 用户层 │
│ Lua 脚本 / Mod 配置 / VR 交互界面 │
├─────────────────────────────────────────────────────┤
│ Layer 4: 功能层 │
│ FreeCamera / Timescale / FOV / GUI Hider / VR │
├─────────────────────────────────────────────────────┤
│ Layer 3: 脚本引擎 │
│ Lua VM ← sol2 绑定 ← RE SDK 暴露 │
├─────────────────────────────────────────────────────┤
│ Layer 2: RE Engine SDK │
│ 类型系统 / 对象模型 / 组件系统 / 游戏状态访问 │
├─────────────────────────────────────────────────────┤
│ Layer 1: Hook 层 │
│ D3D11 Hook / D3D12 Hook / DInput Hook / VTable │
├─────────────────────────────────────────────────────┤
│ Layer 0: 注入层 │
│ dinput8.dll 代理加载 │
└─────────────────────────────────────────────────────┘
六、RE Engine SDK 逆向工程分析
这是整个项目技术含量最高的部分。REFramework 对 RE Engine 的内部结构进行了系统性的逆向。
6.1 类型系统逆向
RE Engine 使用自研的反射/类型系统(类似 Unreal 的反射系统),REFramework 对其进行了完整映射:
| SDK 类 | 对应引擎概念 | 功能 |
|---|---|---|
REType / RETypeDB |
类型数据库 | 存储所有引擎类型的元数据 |
RETypeDefinition |
类型定义 | 单个类型的完整描述 |
REObjectInfo |
对象信息 | 对象的运行时类型信息 |
REManagedObject |
托管对象 | RE Engine GC 管理的对象 |
REGameObject |
游戏对象 | 场景中的实体 |
REComponent |
组件 | ECS 架构中的组件 |
RETransform |
变换 | 位置/旋转/缩放 |
REContext |
执行上下文 | 线程/调用上下文 |
REDelegate |
委托 | 事件/回调系统 |
REGlobals |
全局单例 | 引擎全局管理器 |
REVTableHook |
虚表 Hook | 修改虚函数表实现拦截 |
6.2 游戏特定类定义
ReClass_Internal_*.hpp 文件是各游戏的内部类逆向定义:
| 文件 | 对应游戏 | 说明 |
|---|---|---|
ReClass_Internal_RE2_TDB70.hpp |
生化2 (TDB v70) | 老版本类型数据库 |
ReClass_Internal_RE3.hpp |
生化3 | |
ReClass_Internal_RE3_TDB70.hpp |
生化3 (TDB v70) | |
ReClass_Internal_RE4.hpp |
生化4 | |
ReClass_Internal_RE7.hpp |
生化7 | |
ReClass_Internal_RE8.hpp |
生化8 | |
ReClass_Internal_RE9.hpp |
生化9 | |
ReClass_Internal_DMC5.hpp |
鬼泣5 | |
ReClass_Internal_MHWILDS.hpp |
怪猎荒野 | |
ReClass_Internal_MHSTORIES3.hpp |
怪猎物语3 | |
ReClass_Internal_DD2.hpp |
龙之信条2 | |
ReClass_Internal_PRAGMATA.hpp |
Pragmata | 未发售游戏 |
💡 值得注意 :
ReClass_Internal_PRAGMATA.hpp表明开发者已经开始逆向尚未发售的 Capcom 游戏 Pragmata。
6.3 关键逆向技术
- MurmurHash:RE Engine 内部使用 MurmurHash 进行资源/类型名的哈希查找。REFramework 实现了相同的哈希算法来匹配引擎内部的查找逻辑。
- GameIdentity:用于自动检测当前运行的是哪款 RE Engine 游戏,从而加载对应的游戏特定代码。
- MotionFsm2Layer:动画状态机的逆向,用于 VR 运动控制器映射角色动画。
七、Hook 技术栈详解
7.1 Hook 库对比
| 特性 | safetyhook | minhook |
|---|---|---|
| 作者 | cursey(REFramework 核心贡献者) | Tsuda Kageyu |
| 原理 | inline hook + 代码复制 | inline hook + trampoline |
| 安全性 | 高(使用 asmjit 重定位指令) | 中 |
| 依赖 | asmjit, Zydis | 内置 HDE |
| 多线程安全 | ✅ | 部分 |
| 适合场景 | 复杂 Hook、多级跳转 | 简单函数 Hook |
REFramework 同时使用两套 Hook 库,safetyhook 作为主方案,minhook 作为备用/兼容方案。
7.2 D3D Hook 实现要点
D3D11 Hook(10KB):
- Hook
IDXGISwapChain::Present--- 每帧渲染完成时注入 - Hook
IDXGISwapChain::ResizeBuffers--- 窗口大小改变时处理 - 在 Present 回调中叠加 ImGui 和 VR 合成
D3D12 Hook(30KB):
- Hook
IDXGISwapChain::Present - Hook
ID3D12CommandQueue::ExecuteCommandLists - 需要管理 D3D12 的描述符堆、命令队列等复杂资源
- VR 帧合成需要在正确的命令队列时机插入
7.3 VTable Hook
REVTableHook 直接修改 RE Engine 对象的虚函数表指针,实现对引擎内部方法的拦截。这是修改游戏行为最直接的方式。
八、Lua 脚本系统深度分析
8.1 技术栈
Lua 5.x (源码编译) ← sol2 (C++ 绑定) ← REFramework SDK 暴露层
- Lua:以源码形式编译进 DLL,避免版本不一致
- sol2:业界最优秀的 C++/Lua 绑定库,支持自动类型推导、异常安全
- 暴露层:将 RE Engine SDK 的 C++ 对象通过 sol2 映射到 Lua
8.2 脚本 API 能力
| 能力 | 说明 |
|---|---|
| 内存读写 | 直接读写游戏进程内存 |
| 函数调用 | 调用 RE Engine 的原生函数 |
| 对象操作 | 创建/销毁/修改游戏对象 |
| 组件访问 | 访问游戏对象的任意组件 |
| Hook 注册 | 注册前置/后置 Hook 回调 |
| ImGui 绘制 | 在游戏内绘制自定义 UI |
| 输入监听 | 监听键盘/手柄输入 |
| 定时器 | 延迟/周期执行 |
| HTTP 请求 | 网络通信能力 |
| JSON 读写 | 配置文件操作 |
8.3 脚本示例
lua
-- 获取玩家对象
local player = sdk.find_type_definition("app.Player")
local player_obj = sdk.get_managed_singleton("app.PlayerManager"):get_player()
-- 修改玩家属性
player_obj:set_hit_point(9999)
-- 注册每帧回调
re.on_frame(function()
-- 自定义 ImGui 窗口
if imgui.begin_window("My Mod", true) then
imgui.text("Player HP: " .. player_obj:get_hit_point())
if imgui.button("Heal") then
player_obj:set_hit_point(9999)
end
imgui.end_window()
end
end)
九、VR 子系统架构
9.1 双 API 支持
┌─────────────────────────────────┐
│ VR 合成层 │
│ ┌───────────┐ ┌──────────────┐│
│ │ OpenXR │ │ OpenVR ││
│ │ (Khronos) │ │ (Valve) ││
│ │ 标准 API │ │ SteamVR 专用 ││
│ └─────┬─────┘ └──────┬───────┘│
│ └──────┬───────┘ │
│ ┌─────▼─────┐ │
│ │ 帧合成器 │ │
│ │ (DX11/12) │ │
│ └─────┬─────┘ │
│ ┌─────▼─────┐ │
│ │ 头部追踪 │ │
│ │ 6DOF 数据 │ │
│ └───────────┘ │
└─────────────────────────────────┘
- OpenXR:行业标准,支持所有兼容头显(Meta Quest、Pico、WMR 等)
- OpenVR:SteamVR 专用,Valve Index、HTC Vive 等
- 用户可以二选一,OpenXR 是推荐方案
9.2 VR 功能矩阵
| 功能 | RE2 | RE3 | RE4 | RE7 | RE8 | DMC5 | MHRise | 其他 |
|---|---|---|---|---|---|---|---|---|
| 6DOF 头部追踪 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 运动控制器 | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
| 第一人称 | ✅ | ✅ | ❌ | 原生 | 原生 | ❌ | ❌ | ❌ |
| 手动手电筒 | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
6DOF 头部追踪是通用功能,所有游戏都支持。运动控制器需要逐游戏适配角色骨骼和动画。
十、多游戏适配机制
10.1 CMake 多目标构建
cmake
# CMakeLists.txt 中为每个游戏定义独立的构建目标
# 每个目标链接相同的框架核心 + 游戏特定代码
add_library(RE2 SHARED ${RE2_SOURCES} ${FRAMEWORK_SOURCES})
add_library(RE3 SHARED ${RE3_SOURCES} ${FRAMEWORK_SOURCES})
add_library(DMC5 SHARED ${DMC5_SOURCES} ${FRAMEWORK_SOURCES})
# ...每个游戏一个 DLL
10.2 游戏识别与代码分支
cpp
// GameIdentity 模块自动检测当前游戏
// 根据检测结果加载对应的 ReClass_Internal_*.hpp 定义
// SDK 中的类型偏移量、虚表索引等参数各游戏不同
10.3 适配层次
Layer 1: 引擎通用层(所有游戏共享)
├── D3D Hook、DInput Hook
├── ImGui 集成
├── Lua 引擎
└── VR 合成
Layer 2: 引擎版本适配层
├── 不同版本的 TDB(Type Database)格式
├── 不同版本的内存布局
└── 不同版本的虚表索引
Layer 3: 游戏特定层
├── ReClass_Internal_*.hpp(类定义)
├── 游戏特定的 Hook 点
└── 运动控制器映射(VR)
十一、支持的游戏列表
完全支持(有专用构建)
| 游戏 | 英文名 | 引擎 |
|---|---|---|
| 生化危机 2 重制版 | Resident Evil 2 | RE Engine |
| 生化危机 3 重制版 | Resident Evil 3 | RE Engine |
| 生化危机 4 重制版 | Resident Evil 4 | RE Engine |
| 生化危机 7 | Resident Evil 7 | RE Engine |
| 生化危机:村庄 | Resident Evil Village (RE8) | RE Engine |
| 生化危机:安魂曲 | Resident Evil Requiem (RE9) | RE Engine |
| 鬼泣 5 | Devil May Cry 5 | RE Engine |
| 街头霸王 6 | Street Fighter 6 | RE Engine |
| 怪物猎人:崛起 | Monster Hunter Rise | RE Engine |
| 怪物猎人:荒野 | Monster Hunter Wilds | RE Engine |
| 怪物猎人物语 3 | Monster Hunter Stories 3 | RE Engine |
| 龙之信条 2 | Dragon's Dogma 2 | RE Engine |
通过复用构建支持
| 游戏 | 复用构建 |
|---|---|
| Ghosts 'n Goblins Resurrection | RE8 构建 |
| Apollo Justice: Ace Attorney Trilogy | DD2 构建 |
| Kunitsu-Gami: Path of the Goddess | DD2 构建 |
| Onimusha 2: Samurai's Destiny | MHWILDS 构建 |
十二、构建系统深度解析
12.1 CMake + cmkr
项目使用 cmkr 从 cmake.toml 自动生成 CMakeLists.txt。主 CMakeLists.txt 有 67KB,说明构建配置非常复杂。
12.2 编译环境要求
C++23 标准 ← 最新标准,使用了 std::expected、std::format 等特性
MSVC 编译器 ← 强依赖,未测试其他编译器
/MT 静态链接运行时 ← Release 模式静态链接,减少 DLL 依赖
x64 平台 ← 仅 64 位
12.3 编译方式
命令行方式:
bash
git clone https://github.com/praydog/REFramework
git submodule update --init --recursive
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=Release
cmake --build ./build --config Release
单目标编译(如只编译 RE2):
bash
cmake --build ./build --config Release --target RE2
12.4 构建目标矩阵
| 构建目标 | 输出 DLL | 适用游戏 |
|---|---|---|
| RE2 | dinput8.dll | 生化2 |
| RE3 | dinput8.dll | 生化3 |
| RE4 | dinput8.dll | 生化4 |
| RE7 | dinput8.dll | 生化7 |
| RE8 | dinput8.dll | 生化8 |
| RE9 | dinput8.dll | 生化9 |
| DMC5 | dinput8.dll | 鬼泣5 |
| SF6 | dinput8.dll | 街霸6 |
| MHRISE | dinput8.dll | 怪猎崛起 |
| MHWILDS | dinput8.dll | 怪猎荒野 |
| DD2 | dinput8.dll | 龙之信条2 |
| ... | ... | ... |
所有游戏的输出文件都叫
dinput8.dll,因为使用相同的 DLL 代理注入方式。
12.5 CI/CD
- GitHub Actions 自动构建 PR
- 开发版自动发布到 Nightly Builds
十三、核心功能模块
13.1 Mod 加载系统
- DLL 注入方式加载(dinput8.dll)
- 支持运行时热加载/卸载 Mod
- 对游戏内存的实时修改能力
13.2 通用游戏工具
| 工具 | 说明 | 适用范围 |
|---|---|---|
| Free Camera | 自由视角相机 | 所有游戏 |
| Scene Timescale | 场景时间缩放 | 所有游戏 |
| FOV Slider | 视场角调节 | 所有游戏 |
| Vignette Disabler | 禁用暗角效果 | 所有游戏 |
| Ultrawide Fix | 超宽屏/比例修复 | 所有游戏 |
| GUI Hider | 隐藏/禁用 UI | 所有游戏 |
| Game Objects Display | 游戏对象显示 | 调试用 |
| Object Explorer | 对象浏览器 | 调试用 |
13.3 已修复的游戏问题
- RE8 启动崩溃
- RE8 卡顿(击杀敌人、受伤等触发)
- MHRise/RE8 第三方 DLL 导致的崩溃
- RE9 松散纹理加载崩溃(2026-04-26 修复)
十四、Issue 分析与社区健康度
14.1 热门 Issue 分析
| Issue | 评论数 | 反应 | 问题类型 |
|---|---|---|---|
| #1196 MHWilds 崩溃 | 106 | 👍11 | 新游戏兼容性 |
| #122 RE2 启动崩溃 | 55 | 0 | 环境配置问题 |
14.2 Issue 分类
-
新游戏发布后的兼容性问题(最高优先级)
- 每次 Capcom 发布新 RE Engine 游戏,REFramework 都需要适配
- MHWilds 发布后产生了大量崩溃报告
-
环境/配置问题
- VR 连接问题
- 第三方 DLL 冲突
- 驱动版本不兼容
-
功能请求
- 新游戏支持
- 更多 VR 功能
- Lua API 扩展
14.3 社区健康度评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 响应速度 | ⭐⭐⭐ | 核心开发者忙于代码,Issue 响应有时较慢 |
| 文档质量 | ⭐⭐⭐⭐ | 有独立文档站和 Wiki |
| 社区互助 | ⭐⭐⭐⭐ | 用户之间会互相帮助解决问题 |
| 发布频率 | ⭐⭐⭐⭐⭐ | Nightly 构建持续更新 |
| Bus Factor | ⭐ | 高风险 --- praydog 贡献 93%+ |
十五、安全与逆向工程视角
15.1 技术合法性
REFramework 的行为模式:
- DLL 代理注入(dinput8.dll):经典的游戏 Mod 技术,非恶意注入
- 内存读写:修改自身进程内存,不涉及其他进程
- 函数 Hook:拦截自身进程的 API 调用
- 不联网:不修改网络通信,不提供作弊功能
15.2 反作弊兼容性
| 游戏 | 反作弊 | REFramework 兼容性 |
|---|---|---|
| 生化系列(单机) | 无 | ✅ 完全兼容 |
| 鬼泣5(单机) | 无 | ✅ 完全兼容 |
| 街霸6 | 有 | ⚠️ 在线模式可能被检测 |
| 怪猎系列 | 有 | ⚠️ 在线模式可能被检测 |
15.3 逆向工程深度
REFramework 对 RE Engine 的逆向深度令人印象深刻:
- 完整映射了引擎的类型系统(Type Database)
- 逆向了对象的内存布局(GC 管理、引用计数)
- 识别了动画状态机(MotionFsm2Layer)
- 甚至开始逆向未发售游戏(Pragmata)
15.4 代码质量保障
.clang-format--- 统一代码风格.clang-tidy--- 静态代码分析(2.4KB 规则集,较完善)- GitHub Issue Templates --- 结构化 Bug 报告 & 功能请求
- CI 自动构建 --- PR 提交自动验证编译
十六、生态与关联项目
16.1 Mod 生态
- Nexus Mods 上有大量基于 REFramework 的 Mod
- 社区维护了丰富的 Lua 脚本库
- 与 REFramework-book 文档项目配合
16.2 关联项目
| 项目 | 说明 |
|---|---|
| REFramework-nightly | 每日构建版 |
| Kanan | 灵感来源项目 |
| REFramework-book | Lua API 文档 |
16.3 Tags/主题
cmkr cpp dmc5 freecam lua modding mods monster-hunter-rise monster-hunter-wilds re-engine re2 re3 re4 re7 re8 re9 scripting sf6 virtual-reality vr
十七、竞品对比
| 特性 | REFramework | FLUFFY MANAGER | Nexus Mods (Vortex) |
|---|---|---|---|
| 定位 | 运行时框架 | Mod 管理器 | Mod 管理平台 |
| 技术深度 | 极高(引擎级) | 中(文件替换) | 低(文件管理) |
| VR 支持 | ✅ 原生 | ❌ | ❌ |
| 脚本系统 | ✅ Lua | ❌ | 有限 |
| 游戏内 UI | ✅ ImGui | ❌ | ❌ |
| 自由相机 | ✅ | ❌ | ❌ |
| 支持游戏数 | 12+ | 20+ | 数千 |
| 学习门槛 | 高 | 低 | 低 |
结论 :REFramework 不是 Mod 管理器的竞品,而是底层框架。它和 Fluffy Manager、Nexus Mods 是互补关系------REFramework 提供运行时能力,Mod 管理器负责文件分发。
十八、改进建议
18.1 技术层面
| 优先级 | 建议 | 原因 |
|---|---|---|
| 🔴 高 | 增加核心贡献者 | Bus Factor = 1,项目风险极高 |
| 🔴 高 | 建立 Issue 分类和标签系统 | 623 个 Issue 难以管理 |
| 🟡 中 | 添加自动化测试 | 目前无测试代码,全靠人工验证 |
| 🟡 中 | 考虑用 Zig/Rust 重写关键 Hook 层 | C++23 的内存安全问题 |
| 🟢 低 | 探索 Linux/Wine 兼容性 | 扩大用户群 |
| 🟢 低 | 从 OpenVR 迁移到纯 OpenXR | 简化 VR 依赖 |
18.2 社区层面
| 优先级 | 建议 | 原因 |
|---|---|---|
| 🔴 高 | 招募更多核心开发者 | 降低 Bus Factor |
| 🟡 中 | 建立 Mod 开发者社区(Discord/论坛) | 增强用户粘性 |
| 🟡 中 | 编写更多入门教程 | 降低学习门槛 |
| 🟢 低 | 建立 Mod 认证/兼容性测试流程 | 提升 Mod 质量 |
十九、总结与评价
优势
- 覆盖面广:支持几乎所有主流 RE Engine 游戏,包括最新的 MH Wilds 和 RE9
- 功能全面:Mod 加载 + Lua 脚本 + VR 支持三位一体
- 技术深度极高:引擎级逆向,完整映射类型系统和对象模型
- 社区活跃:5000+ Stars,持续维护 7 年,最新提交距今仅 11 天
- 文档完善:有独立的 Lua API 文档站点和 Wiki
- 代码规范:使用 clang-format/tidy,有 CI 流水线
- MIT 协议:对商业和非商业用途均友好
不足
- Bus Factor 风险:praydog 一人贡献 93%+,项目可持续性存疑
- Open Issues 较多(623个),可能存在积压问题
- 仅支持 Windows:无 Linux/macOS 原生支持(虽然可通过 Wine 运行)
- VR 功能游戏间差异大:运动控制器仅支持 4 款游戏
- 无自动化测试:全靠人工验证,回归风险较高
适用场景
- 🎮 想为 RE Engine 游戏安装 Mod 的玩家
- 🥽 想在 VR 中体验生化危机/鬼泣/怪猎的 VR 爱好者
- 🔧 想通过 Lua 脚本深度修改游戏行为的 Mod 开发者
- 📸 想使用自由相机拍摄游戏画面的摄影师
附录:关键文件索引
| 文件路径 | 说明 |
|---|---|
CMakeLists.txt (67KB) |
主构建文件,定义所有目标和依赖 |
src/D3D12Hook.cpp (30KB) |
D3D12 Hook 实现,最复杂的单文件 |
shared/sdk/RETypeDB.cpp |
类型数据库逆向 |
shared/sdk/ReClass_Internal_*.hpp |
各游戏的内部类定义 |
.clang-tidy (2.4KB) |
静态分析规则集 |
.github/workflows/dev-release.yml |
CI/CD 自动构建 |
报告生成于 2026-05-07 04:03 CST
合并自:REFramework_项目分析报告.md (v1.0) + REFramework_深度技术分析.md (v2.0)
数据来源:GitHub API、CMakeLists.txt 源码分析、项目文档