NewLongmo/Dw0rdUetool

GitHub: NewLongmo/Dw0rdUetool

一款运行于 Android 真机的非注入式 Unreal Engine 外部内存分析工具,可自动定位引擎核心结构并生成依赖有序的 C++ SDK 头文件。

Stars: 0 | Forks: 0

# Dw0rdUetool **Android Unreal Engine 外部分析与 SDK 生成工具** **点点Star谢谢喵** [![许可证:MIT](https://img.shields.io/badge/许可证-MIT-34c759.svg)](LICENSE) ![平台](https://img.shields.io/badge/平台-Android-3DDC84?logo=android&logoColor=white) ![架构](https://img.shields.io/badge/架构-arm64--v8a-0A84FF) ![C++](https://img.shields.io/badge/C%2B%2B-20-00599C?logo=cplusplus&logoColor=white) ![界面](https://img.shields.io/badge/界面-Vulkan%20%2B%20ImGui-8A2BE2) [完整教程](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, 云资产清单, 内存读取, 数据擦除, 虚幻引擎, 逆向工程