UEDumper

repository·master·Indexed 23 days ago

https://github.com/spuckwaffel/uedumper

A reverse engineering tool for Unreal Engine games (versions 4.19 through 5.4.0). UEDumper provides an SDK generator and a live memory editor with an ImGui-powered GUI to inspect and modify game state at runtime. It supports MDK type generation, custom FName decryption, and configurable memory read/write routines to bypass anti-cheat.

Tokens
1.5K
Snippets
0
Records
11
Agent score
30%

What's inside UEDumper

  1. Overview of UEDumper

    master
    UEDumper is an all-in-one Unreal Engine Dumper supporting Unreal Engine versions 4.19 through 5.4.0. It provides an SDK generator and a live editor that allows users to view the generated SDK at runtime and modify a game's memory. It features a rich GUI powered by ImGui and supports MDK type generation.
  2. Implement FName Decryption

    master

    If the target game encrypts FName, you must implement a custom decryption function in Engine/Core/FName_decryption.h:

    1. Set the macro USE_FNAME_ENCRYPTION to TRUE.
    2. The function must return the decrypted name via the inputBuf parameter in Engine/Core/Core.cpp at EngineCore::FNameToString.
    3. Verify if the engine correctly retrieves namePoolChunk/FNameEntry for your specific game.
    4. You can use custom macros in UEdefinitions.h to manage decryption settings for different games.
  3. Use the UEDumper GUI

    master

    Hello Window

    • Project Name: Enter a name to create a working directory. Files will be saved in [application directory]/[project name]/.
    • Process Name: Enter the exact, case-sensitive name of the target process.
    • Settings: View current macros and adjust the Log Level (0-4). Level 0 is most verbose; Level 4 is most critical only.
    • Loading Projects: You can load an existing .uedproj file to skip the dumping phase (Offline Mode). Note that the Live Editor is unavailable in Offline Mode.

    Package Windows

    • Package Viewer: Click a package to view its structs, classes, or enums. You can navigate via the unique navigation bar for each package.
    • Search: Use the search bar in the top left to find specific structs/classes/enums.
    • Editing: If an 'edit' button appears next to a member, it is either manually defined or a missing byte array. You can manually define it.
    • Saving:
      • Save the project to create a .uedproj file.
      • Save changes to create a StructDefinitions file to overwrite existing definitions.
      • Create an SDK at any time.
  4. Modify Unreal Engine Classes Manually

    master
    If a game (like Fortnite or PUBG) has made non-standard manual changes to engine structures that cannot be toggled via macros, you must define these changes manually. All manually defined Unreal Engine classes should be placed in Engine/UEClasses/ using the files UnrealClasses.cpp and UnrealClasses.h.
  5. Prerequisites for supporting a game

    master

    UEDumper does not work out of the box for every game. To support a specific game, you must manually reverse-engineer it to find the following information:

    1. UE Version: Determine the exact Unreal Engine version (e.g., by checking the shipping application's properties).
    2. Offsets or Signatures: You need offsets for GObjects, GNames, and GWorld (and other offsets required for the live editor).
    3. FName Decryption: If the game encrypts FName, you must find the decryption function.
    4. Game Settings: Identify if the game uses specific engine macros (e.g., WITH_CASE_PRESERVING_NAME, UE_BLUEPRINT_EVENTGRAPH_FASTCALLS) that change internal engine structures.
  6. Use the Live Editor

    master

    The Live Editor allows reading and writing game memory at runtime using dumped structs.

    Key Features & Limitations:

    • Refresh Rate: The editor reads memory every 500ms by default.
    • Addressing: You can inspect a specific address (pointing to a UObject) or use a defined offset from Offsets.h. If using an offset, it should point to a pointer of the UObject (e.g., a UWorld signature) so the editor can automatically track the object if it changes.
    • Write Restrictions: Currently, you can only overwrite members that are not pointers or custom datatypes to prevent crashes.
    • Stability: The live editor can crash at any time; save your changes frequently.
  7. Override Structs and Datatypes

    master

    Customizing Type Names

    To change how types (like uint8_t or int64_t) appear in the editor or dump, modify Engine/Userdefined/Datatypes.h.

    Overriding Classes and Members

    To completely or partially override a class, use Engine/Userdefined/StructDefinitions.h:

    • Runtime Changes: When making changes at runtime, you must enter the case-sensitive PropertyType.
    • Safety Warning: Only overwrite the member itself. Do not add members at different offsets or with incorrect sizes, as this will break SDK generation and cause the Live Editor to crash. The engine assumes your provided size is correct.
  8. Implement Custom Memory Read/Write (Driver Support)

    master

    To bypass anti-cheat or use custom memory access methods, implement your own routines in Memory/driver.h.

    Guidelines:

    • The default implementation uses ReadProcessMemory / WriteProcessMemory.
    • If you modify the function signatures, ensure they remain compatible with the callers in Memory/Memory.cpp (Memory::read, Memory::write, and getBaseAddress).
  9. Configure UE Version and Engine Settings

    master

    To set the target Unreal Engine version and specific engine behavior macros, modify the file Engine/Userdefined/UEdefinitions.h:

    • Set the UE_VERSION macro to match your target UE version.
    • Configure specific macros for internal engine structs (e.g., WITH_CASE_PRESERVING_NAME).
    • You can also add custom macros here to facilitate easier switching between different game configurations.
  10. Configure Offsets and Signatures

    master

    Add game-specific offsets in Engine/Userdefined/Offsets.h.

    Requirements:

    • Ensure the name parameter for each offset is unique to avoid errors.
    • The offsets for GObjects and GNames must be named OFFSET_GOBJECTS and OFFSET_GNAMES respectively.
    • You can use custom macros in UEdefinitions.h to switch between different offset sets easily.
  11. View UEDumper version and product information

    master

    The compiled UEDumper.exe binary contains embedded versioning and product metadata. This information can be retrieved from the file's properties in Windows or via resource inspection tools.

    Product Metadata:

    • ProductName: UEDumper
    • ProductVersion: 2.0.0.0
    • FileDescription: Unreal engine dumper with live inspect
    • InternalName: UEDumper.exe
    • OriginalFilename: UEDumper.exe
    • LegalCopyright: Copyright (C) 2023 Spuckwaffel
    • FileVersion: 2.0.0.0