Skip to content

Repository files navigation

Dw0rdUetool

Android Unreal Engine 外部分析与 SDK 生成工具 点点Star谢谢喵

许可证:MIT 平台 架构 C++ 界面

完整教程 · 贡献指南 · 安全策略 · 第三方许可

作者:Dw0rd


界面预览

进程选择与探针 结构查看器
进程选择与探针界面 结构查看器界面

实时运行日志
实时日志界面


项目简介

Dw0rdUetool 是一个运行在 Android arm64 设备上的 Unreal Engine 外部 Dumper。程序不注入目标进程,通过 KittyMemoryEx 读取目标进程内存,并使用 Vulkan 与 ImGui 提供悬浮操作界面。

完整流程分为两个阶段:

  1. 探针:识别目标进程、定位 UE 模块并验证核心地址和结构偏移。
  2. Dump:生成 Names、Objects、Offsets、按依赖排序的 SDK 包头和逆向辅助脚本。

工具同时支持:

  • 专用 Profile:为已经适配的游戏提供固定偏移和定位逻辑。
  • AutoFix:专用 Profile 不存在或失效时,自动定位 GNamesFNamePoolGUObjectArray 等关键对象并修复结构偏移。

主要功能

  • Vulkan + ImGui 悬浮界面
  • 中文界面与运行状态展示
  • 探针与 Dump 两阶段工作流
  • UE4/UE5 自动识别与 AutoFix 回退
  • UObject、UField、UStruct、UClass、UFunction 等结构查看
  • 一键导出 libUE4.solibUnreal.so
  • 稳定依赖排序与分包 SDK 生成
  • 强依赖循环检测和明确诊断
  • 跨包前置声明和独立包头依赖包含
  • Dumper-7 风格字段与函数参数属性输出
  • ProcessEvent Params ABI、padding、bitfield、sizeofoffsetof 校验
  • 重型入参移动、出参回写和返回值移动
  • JSON 配置的指定类字段自动修补

输出文件

默认输出目录:

/sdcard/Dw0rdUetool/<目标包名>/
文件 说明
Logs.txt 完整运行日志和诊断信息
Names.txt FName 条目
Objects.txt UObject 索引、地址和完整名称
Offsets.hpp 引擎关键地址和偏移
AIOHeader.hpp 按依赖顺序包含全部包头
SDK_ForwardDeclarations.hpp 跨包类型前置声明
SDK_Package_####_<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

{
  "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 overrideinsertupsert
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。

项目文档

许可证

Dw0rdUetool 使用 MIT License 开源。

项目包含或参考了多个第三方组件,各组件仍遵循其原始许可证,详见 THIRD_PARTY_NOTICES.md

致谢

About

Android Unreal Engine 外部分析与 SDK 生成工具,支持 AutoFix、依赖排序、字段修补与 ProcessEvent Wrapper。

Topics

Resources

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages