NewLongmo/Dw0rdUetool
GitHub: NewLongmo/Dw0rdUetool
一款运行于 Android 真机的非注入式 Unreal Engine 外部内存分析工具,可自动定位引擎核心结构并生成依赖有序的 C++ SDK 头文件。
Stars: 0 | Forks: 0
# Dw0rdUetool
**Android Unreal Engine 外部分析与 SDK 生成工具**
**点点Star谢谢喵**
[](LICENSE)




[完整教程](docs/使用教程.md) · [贡献指南](CONTRIBUTING.md) · [安全策略](SECURITY.md) · [第三方许可](THIRD_PARTY_NOTICES.md)
**作者:Dw0rd**
## 界面预览
| 进程选择与探针 |
结构查看器 |
 |
 |
实时运行日志
## 项目简介
Dw0rdUetool 是一个运行在 Android arm64 设备上的 Unreal Engine 外部 Dumper。程序不注入目标进程,通过 `KittyMemoryEx` 读取目标进程内存,并使用 Vulkan 与 ImGui 提供悬浮操作界面。
完整流程分为两个阶段:
1. **探针**:识别目标进程、定位 UE 模块并验证核心地址和结构偏移。
2. **Dump**:生成 Names、Objects、Offsets、按依赖排序的 SDK 包头和逆向辅助脚本。
工具同时支持:
- **专用 Profile**:为已经适配的游戏提供固定偏移和定位逻辑。
- **AutoFix**:专用 Profile 不存在或失效时,自动定位 `GNames`、`FNamePool`、`GUObjectArray` 等关键对象并修复结构偏移。
## 主要功能
- Vulkan + ImGui 悬浮界面
- 中文界面与运行状态展示
- 探针与 Dump 两阶段工作流
- UE4/UE5 自动识别与 AutoFix 回退
- UObject、UField、UStruct、UClass、UFunction 等结构查看
- 一键导出 `libUE4.so` 或 `libUnreal.so`
- 稳定依赖排序与分包 SDK 生成
- 强依赖循环检测和明确诊断
- 跨包前置声明和独立包头依赖包含
- Dumper-7 风格字段与函数参数属性输出
- ProcessEvent Params ABI、padding、bitfield、`sizeof` 和 `offsetof` 校验
- 重型入参移动、出参回写和返回值移动
- JSON 配置的指定类字段自动修补
## 输出文件
默认输出目录:
/sdcard/Dw0rdUetool/<目标包名>/
| 文件 | 说明 |
|---|---|
| `Logs.txt` | 完整运行日志和诊断信息 |
| `Names.txt` | FName 条目 |
| `Objects.txt` | UObject 索引、地址和完整名称 |
| `Offsets.hpp` | 引擎关键地址和偏移 |
| `AIOHeader.hpp` | 按依赖顺序包含全部包头 |
| `SDK_ForwardDeclarations.hpp` | 跨包类型前置声明 |
| `SDK_Package_####_
.hpp` | 按依赖顺序编号的独立包头 |
| `SDK_Enums.hpp` | 兼容模式枚举集合 |
| `SDK_Structs.hpp` | 兼容模式结构集合 |
| `SDK_Classes.hpp` | 兼容模式类集合 |
| `SDK_Offset.hpp` | Dumper-7 风格成员偏移 |
| `SDK_Runtime.hpp` | ProcessEvent wrapper 运行时接口 |
| `script.json` | IDA/Ghidra 函数信息 |
## 环境要求
### 构建环境
- CMake
- Ninja 或 Visual Studio
- Android NDK r25 及以上版本,推荐 r29
- 支持 C++20 的编译器
### 真机环境
- Android arm64-v8a 设备
- root 权限与可用的 `su`
- USB 调试与 ADB
- 正在运行的 UE4/UE5 目标进程
## Host 测试
依赖排序、SDK 输出、参数 wrapper 和字段补丁策略可以在 Windows 或 Linux 上测试,不需要 Android NDK:
cmake -S . -B build-host \
-DDW0RDUETOOL_BUILD_HOST_TESTS=ON \
-DCMAKE_BUILD_TYPE=Release
cmake --build build-host --config Release --parallel
ctest --test-dir build-host -C Release --output-on-failure
GitHub Actions 会在 Ubuntu 和 Windows 上执行相同的 11 项测试。
## Android 构建
设置 NDK:
export ANDROID_NDK_HOME=/path/to/android-ndk-r29
配置:
cmake -S . -B build-android \
-G Ninja \
-DNDK_PATH="$ANDROID_NDK_HOME" \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=30 \
-DCMAKE_BUILD_TYPE=Release
编译:
cmake --build build-android --parallel 4
生成成品:
outputs/arm64-v8a/Dw0rdUetool
Windows 用户也可以运行完整测试与构建脚本:
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/test-all.ps1
## 真机部署
adb shell "su -c 'mkdir -p /data/local/tmp/Dw0rdUetool'"
adb push outputs/arm64-v8a/Dw0rdUetool /data/local/tmp/Dw0rdUetool/
adb push start.sh /data/local/tmp/Dw0rdUetool/
adb shell "su -c 'chmod 755 /data/local/tmp/Dw0rdUetool/Dw0rdUetool /data/local/tmp/Dw0rdUetool/start.sh'"
前台启动:
adb shell "su -c 'sh /data/local/tmp/Dw0rdUetool/start.sh'"
后台管理:
# 启动
adb shell "su -c 'sh /data/local/tmp/Dw0rdUetool/start.sh start --background'"
# 状态
adb shell "su -c 'sh /data/local/tmp/Dw0rdUetool/start.sh status'"
# 重启
adb shell "su -c 'sh /data/local/tmp/Dw0rdUetool/start.sh restart --background'"
# 停止
adb shell "su -c 'sh /data/local/tmp/Dw0rdUetool/start.sh stop'"
后台日志:
/sdcard/Dw0rdUetool/logs/Dw0rdUetool.log
## 使用流程
1. 在真机上启动目标 UE 游戏并进入实际场景。
2. 启动 Dw0rdUetool。
3. 在进程页面刷新并选择目标 package/PID。
4. 点击“开始探测”。
5. 检查核心地址和结构偏移是否识别成功。
6. 点击“开始 Dump”。
7. 等待进度完成后,从 `/sdcard/Dw0rdUetool/<目标包名>/` 拉取结果。
目标进程重启或 PID 变化后,必须重新执行探针。
## 字段自动修补
配置路径:
/sdcard/Dw0rdUetool/config/field_patches.json
项目提供示例:[field_patches.example.json](field_patches.example.json)
{
"patches": [
{
"owner": "Class Engine.Actor",
"field": "RootComponent",
"mode": "override",
"offset": "0x98",
"size": 8,
"type": "USceneComponent*"
},
{
"owner": "Class Game.PlayerState",
"field": "TeamIds",
"mode": "upsert",
"offset": "0x3F0",
"size": 16,
"array_dim": 4,
"type": "int32_t",
"flags": "0x4",
"order": 10,
"allow_resize": true
}
]
}
| 配置项 | 说明 |
|---|---|
| `owner` | UObject 完整名称 |
| `field` | 字段名称 |
| `mode` | `override`、`insert` 或 `upsert` |
| `offset` | 字段偏移,支持十进制或十六进制字符串 |
| `size` | 字段占用的总字节数 |
| `array_dim` | 静态数组元素数量 |
| `type` | 生成的 C++ 类型 |
| `flags` | 可选 PropertyFlags |
| `order` | 多条规则的稳定应用顺序 |
| `allow_resize` | 是否允许扩大结构大小 |
规则说明:
- `override`:字段必须已存在。
- `insert`:字段必须不存在。
- `upsert`:存在则覆盖,不存在则插入。
- 数组必须满足 `size % array_dim == 0`。
- 补丁不能侵入继承区域,也不能与其它字段非法重叠。
- 所有验证通过后才会原子提交布局修改。
## ProcessEvent Wrapper
启用生成的 inline wrapper:
#define UE_SDK_ENABLE_PROCESS_EVENT_WRAPPERS
#include "AIOHeader.hpp"
宿主项目需要实现:
namespace SDKRuntime
{
void* FindFunction(const char* fullName);
void ProcessEvent(void* object, void* function, void* params);
}
生成器会自动处理:
- const、引用、纯出参和数组参数
- 重型入参 move-in
- 引用或指针出参 move-back
- 返回值移动
- Params padding、bitfield、大小和字段偏移检查
检测到数组返回值、参数越界或非法存储重叠时,会禁用对应 wrapper 并输出诊断,不会生成错误 ABI。
## 项目文档
- [完整使用教程](docs/使用教程.md)
- [贡献指南](CONTRIBUTING.md)
- [安全策略](SECURITY.md)
- [第三方许可清单](THIRD_PARTY_NOTICES.md)
- [开源发布检查表](docs/OPEN_SOURCE_RELEASE_CHECKLIST.md)
## 许可证
Dw0rdUetool 使用 [MIT License](LICENSE) 开源。
项目包含或参考了多个第三方组件,各组件仍遵循其原始许可证,详见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。
## 致谢
- [KittyMemoryEx](https://github.com/MJx0/KittyMemoryEx)
- [AndUEDumper](https://github.com/MJx0/AndUEDumper)
- [Dumper-7](https://github.com/Encryqed/Dumper-7)
- [UEDumper](https://github.com/Spuckwaffel/UEDumper)
- [UnrealDumper-4.25](https://github.com/guttir14/UnrealDumper-4.25)
- Dear ImGui
- FreeType
- Vulkan标签:Android, Bash脚本, C++, DSL, SDK生成, Vulkan, 云资产清单, 内存读取, 数据擦除, 虚幻引擎, 逆向工程