Disclaimer

UEDumper is intended solely for educational and experiential purposes. It is not designed or intended to target Unreal Engine, its developers, or any associated entities. The project’s purpose is to provide a platform for exploring the core functionality of Unreal Engine. Any use of UEDumper outside the scope of educational exploration is strongly discouraged. The developers of UEDumper do not endorse or support any misuse of this tool for unauthorized activities. Always adhere to ethical and legal standards when using UEDumper or any similar tools.

Introduction

This article explores the functionalities of UEDumper without delving into the technical details of its inner mechanisms. For those seeking to delve deeper, the source code and assistance can be accessed on GitHub.

Within the realm of Unreal Engine games, the allure of having an SDK generator for your target game lies in the ability to keep your program in sync with the latest updates to structs, classes, and offsets. Yet, this convenience often comes at a cost: the proliferation of hundreds of files, leaving you puzzled about which to include and which to omit from your project.

Moreover, a recurrent challenge emerges when dealing with pointers within classes — instead of pointing to the actual class, they frequently reference default classes. A prime example surfaces in Epic Games’ Fortnite, where the PawnPrivate points to APawn rather than the more relevant AFortPlayerPawn.

Enter UEDumper’s groundbreaking solution — a fusion of an SDK editor and Live editor. With this dynamic duo at your disposal, these quandaries find resolution. Seamlessly navigate the intricate pathways of Unreal Engine games, demystify pointers, and identify discrepancies between expected and actual class references. UEDumper shines as a beacon of clarity in the often intricate landscape of mod development.

Motivation

I’ve always been intrigued by the inner workings of Unreal Engine SDK generators. The way entire classes can be constructed even in the absence of a .pdb file containing all the necessary structures and classes fascinated me. What struck me even more was the incredible convenience these tools brought to the table when dealing with newly released games – enabling quick modding within a matter of minutes.

There was a persistent frustration, though. Whenever I wished to test memory modifications or simply read specific values, I found myself laboring to integrate the logic into my program and then painstakingly printing the results. This not only consumed precious time but also placed significant constraints on the depth of exploration possible.

Adding to this mix was a friend’s concept of a “live editor”, a concept that intrigued me greatly. Although my friend never released their version, the idea stuck with me, eventually pushing me towards creating one myself.

All these factors converged into the birth of this tool. Originally, I hadn’t even planned to release it as an open-source project. However, a desire to provide something of real value to others, something that could genuinely aid in their future development endeavors, led me to share this creation with the community.

Getting Started

Getting started with UEDumper is a breeze, especially if you’re familiar with the consistent structure found in Unreal Engine games. The way classes, structs, and names are generated tends to follow a similar pattern across titles. Fortunately, the open-source nature of Unreal Engine’s code grants you access to its inner workings, enabling you to grasp its core logic.

In a nutshell, UEDumper capitalizes on Unreal Engine’s reflection system to gather essential information. This reflection system possesses the remarkable ability to let a program examine itself during runtime. This capability underpins crucial functionalities in Unreal Engine, ranging from editor detail panels to serialization, garbage collection, network replication, and Blueprint/C++ interactions. It’s important to note that standard C++ lacks inherent reflection support, prompting Unreal Engine to develop its own mechanism for harvesting, querying, and manipulating data related to C++ classes, structs, functions, member variables, and enumerations.

This robust reflection system is embedded within every Unreal Engine game. It empowers you to recreate all the classes and structs painstakingly crafted by game developers and the Unreal Engine team itself. Think of it as an innate built-in editor within Unreal Engine that we can readily leverage through UEDumper.

Though there are a few essential steps required to get UEDumper up and running, they are relatively straightforward. The offsets known as GNames and GObjects stand as crucial elements to launch the dumper and obtain a robust SDK. It’s worth noting that while this article won’t delve into the process of acquiring these offsets, I plan to address this topic in a separate post.

In addition, you might need to configure a handful of game-related settings within the specific settings file. Often, these settings are already optimized for the game’s requirements. Once you’ve secured the necessary offsets and integrated them correctly, along with configuring the relevant settings, you’re all set to dive into the process of dumping and generating your very first SDK! These initial steps pave the way for a rewarding journey into exploring the Unreal Engine’s intricacies.

Overview of UEDumper

Once your game project is established and an effective SDK is created, the UEDumper tool unfolds with an array of convenient features, streamlining the exploration of your SDK. The Package window, situated on the left, meticulously arranges all game Packages in alphabetical order—excluding the BasicType class housing manually crafted structures and classes. By selecting any package, its contents—comprising classes, structs, functions, and enums — become readily accessible. Each package bears its own unique array of contents, varying in scope and scale.

Classes and structs come alive with size and offset information alongside their members, rendering effortless comparisons to previous dumps. The presence of “unknowndata” variables, instances where variables remain undefined or undiscovered, occasionally arises due to struct variable visibility issues in the reflection system. Rectifying this is achievable—simply edit the “unknowndata” field and define the variable manually. All modifications can be saved, seamlessly synchronizing the live editor and SDK.

Speaking of saving, the entire project can be preserved, allowing unfettered access to the SDK viewer sans the need for redumping—an invaluable asset for both streamlined browsing and collaborative sharing. Below the packages, a search bar resides, permitting direct queries for classes, structs, functions, and enums, triggering the opening of their corresponding packages.

On the right side, an assortment of structs, classes, functions, and enums grace the screen. Selection of any index offers an insightful display. Within classes and structs, pinpointing variable members is a cinch, swiftly navigating to the desired location and distinctly marking it for ease.

Below is an image depicting the SDK editor window, revealing a successful SDK generation alongside accessible open packages.

Image showing the SDK editor window

When your exploration concludes, project preservation is a snap — save your project to disk, ensuring continuous access to your SDK exploration. The journey through the Unreal Engine’s intricacies becomes not only comprehensible but also consistently engaging with UEDumper.

Live Editor

The live editor stands as a robust instrument, enabling real-time viewing of classes with their data, all without writing a single line of code. With the ability to effortlessly add actual Unreal Engine class addresses, exploration becomes immediately accessible. This dynamic tool seamlessly identifies the class type, streamlining your experience.

Alternatively, the option to input offsets, such as GWorld provides a unique advantage. Whenever the current world changes, the world pointer is updated accordingly with all its data.

Imagine the live editor as a counterpart to the widely recognized tool ReClass, but with an additional layer — predefined classes that eliminate guesswork. Through dedicated use of the live editor, you’ll come across the automatic class pointer fix, a feature that addresses the challenge arising from pointers pointing to base classes instead of their actual inheriting classes. In practical terms, this means that variables like APawn* PawnPrivate in the SDK/Reflection system are transformed into their more descriptive counterparts like AFortPlayerPawn* PawnPrivate.

The live editor’s capacity to address this issue becomes especially valuable when crafting mods. It clarifies what data is truly accessible and what isn’t — an essential aspect for mod creation. Moreover, this tool isn’t limited to observation alone; it allows direct value manipulation for various data types. Furthermore, support for enums is built-in, complete with their designated names, and even a color picker is at your disposal for seamless modifications.

You will find a video link at the bottom of the GitHub readme showcasing the live editor.

Conclusion

In conclusion, UEDumper emerges as a powerful companion for all Unreal Engine enthusiasts, offering a streamlined approach to exploring the inner workings of the engine, even down to real-time manipulation. While this article has provided a glimpse into its capabilities, the true potential lies in your hands as you dive into the repository.

Feel free to explore the UEDumper repository on GitHub to access its source code and tap into a wealth of resources. It’s important to note that UEDumper is an actively maintained project, evolving with the ever-changing landscape of game development. With an engaged community around it, you’ll find support, updates, and discussions that can enhance your journey into the heart of Unreal Engine.