iOS-Dumper-7 is a runtime SDK generator for Unreal Engine games running on iOS. It injects into the game process to dynamically analyze memory, resolve offsets, and generate a full C++ SDK, IDA scripts, and symbol dumps.
- Runtime Generation: Generates C++ SDK headers, IDA Mappings (
.idmap), and JSON dumps directly on the device. - Dynamic Offset Scanning: Automatically finds
GObjects,GNames, andUWorldwithout requiring hardcoded offsets for most games. - Broad Compatibility: Tested on Unreal Engine versions 4.17 to 4.26 (e.g., ARK 2.0, Ark Revamp, Special Forces 3).
- Floating UI: Uses a draggable floating button to toggle the menu, avoiding conflict with game gestures.
- Open the project in Xcode.
- Select your signing identity.
- Build the project to generate the
.dylibfile (e.g.,Dumper.dylib).
Use any signer (Sideloadly, ESign, GBox or whatever Signer that supports dylib injection) and inject the dylib
- Launch the game and wait for the engine to fully load.
- After approximately 3 seconds, a Floating Logo Button will appear on the screen.
- Tap the Logo to open the ImGui overlay.
- Note: You can drag the logo to move it if it obstructs the game UI.
- Tap Start Dump in the menu.
- Wait for the process to complete.
The generated files will be saved to your device's Documents directory (Make Sure to enable "Supports Document Browser" before signing):
/Documents/[GameVersion-GameName]/
If the dumper fails to find offsets automatically (common in games with encryption or obfuscation), you can manually configure overrides in Dumper/Generator/Private/Generators/Generator.cpp inside the Generator::InitEngineCore() function.
If the auto-scan fails, provide the address and layout manually:
// For older UE4 (Fixed Layout)
ObjectArray::Init(0x12345678, FFixedUObjectArrayLayout {
.ObjectsOffset = 0x0,
.MaxObjectsOffset = 0x8,
.NumObjectsOffset = 0xC
});
// For UE4.21+ / UE5 (Chunked Layout)
ObjectArray::Init(0x12345678, 0x10000 /* ElementsPerChunk */, FChunkedFixedUObjectArrayLayout {
.ObjectsOffset = 0x00,
.MaxElementsOffset = 0x10,
.NumElementsOffset = 0x14,
.MaxChunksOffset = 0x18,
.NumChunksOffset = 0x1C
});
If GNames is not found via pattern scanning, initialize it manually:
// Address, Mode, bIsNamePool, ModuleName (Optional)
FName::Init(0x10203040, FName::EOffsetOverrideType::GNames, true /* true for NamePool */, "UAGame");
For games that encrypt pointers (e.g. IDK What Games Have ObjectArray Encrypted), define a decryption lambda:
// Example: XOR decryption
ObjectArray::InitDecryption([](void* ObjPtr) -> uint8* {
return reinterpret_cast<uint8*>(uint64(ObjPtr) ^ 0x8375ACDE);
});
If the virtual table index for ProcessEvent is incorrect:
// Manually set the VTable index
Off::InSDK::ProcessEvent::InitPE(69);
-
Encryqed: Original creator of Dumper-7.
-
Aethereux: Ported and adapted for iOS/ARM64.
-
Contributions are Highly Appreciated for more improvements!
- Find ProcessEvent Offset in the Memory (Not Manual Overwrites)
- Find NamesArray (For UE below 4.22) in Memory
- Fix Fallback Methods in Finding FNames (AppendString at UnrealTypes.cpp)