Page 1 of 1

UE5CEDumper -- A UE4/5 helper for making tables

Posted: Sun Feb 22, 2026 10:34 am
by bbfox
UE5CEDumper.jpg
UE5CEDumper.jpg (939.67 KiB) Viewed 1444 times

...it's named as dumper but not a really dumper. This tool provides a Live Bridge between the game runtime and Cheat Engine.

 ! Message from:

Disable Windows garbage setting: Smart App Control (ASC), or you cannot run this application.
Be aware, once you turn it off, you cannot turn it on unless reinstall OS


UE5CEDumper — A Proper Cheat Engine Integration for Unreal Engine Games
Dedicated to everyone tired of manual offset hunting in UE4/UE5


What Is This?

UE5CEDumper is a high-performance injected DLL + Cheat Engine Lua bridge supporting UE4 (4.22+) and UE5 (5.0-5.7) games. The DLL performs deep scans for GObjects / GNames / GWorld, walks the entire UObject/UStruct/FField hierarchy, and streams structured data via named pipes to a standalone UI.

The Feature: It auto-generates hierarchical pointer chains and exports them as CE XML records / CE dissect data. Just click button, paste / import into your cheat table, and you’re almost done. For base address: dynamic address capture via AOB AA script/pointer map is needed after paste for repeat use. All child nodes are designed in relative addressing.


Tested game & UE version matrix ( full/partial Working)

UE VersionGObjectsGNamesDynOfftitles
4.18FF7 Remake Intergrade
4.21 – 4.24Star Wars Jedi, DQ XI S, IDOLM@STER STARLIT SEASON, Octopath Traveler, DQ I&II Remake, DQ III HD-2D Remake, Everspace
4.25 – 4.27FF7 Rebirth, Tower of Mask, Hogwarts Legacy, Romancing SaGa 2 RotS, Ghostwire: Tokyo
5.0 – 5.2 (Confirmed support via generic patterns)
5.3 – 5.4 Satisfactory (v1.1.3.1)
5.5 – 5.7 ✓*✓**Titan Quest II, EverSpace 2, Lushfoil Photography Sim, Manor Lords, Cat Island Petrichor Demo, Way of the Hunter 2 Demo, COMBAT PILOT: CARRIER QUALIFICATION Demo

*: GNames uses .data pointer-scan fallback for 5.5+
**: DynOff = Dynamic Offset Discovery: supports CasePreservingName (FName = 16 bytes) layout.

Please note most games' data were UE + native C++ structure. if the value is inside native C++, you won't see it appear in this tool.


The Struggle (Before This Tool)

If you’ve ever built a Cheat Table for UE games, you know the routine is something like:

  • Repeated AOB Scanning — Spend hours re-finding GObjects, GNames, and GWorld. Every. Single. Time.

  • FNamePool Layout Chaos — Switching between UE4 (double-deref) and UE5 (chunk table), not to mention those builds with 4-byte hash prefixes. It's a manual guessing game.

  • FField vs UProperty — The UE4.24 property system overhaul usually explodes old patterns. Writing universal code means maintaining two separate code paths and hoping for the best.

  • Manual Pointer Math — Even after finding an object, have to trace every field offset by hand. One typo ruins the entire pointer chain.

  • The Stride Guessing Game — Is FUObjectItem 16, 20, or 24 bytes? Guess wrong? ==> get silent garbage data.

  • Poor Tooling Integration — Most dumpers give addresses that can't even copy, or worse, they provide the wrong ones entirely.

...unless get paid tool can make it easier.
Basically, every new game felt like starting from zero. It was a total motivation killer.


How This Tool Fixes Workflow

  • Smart AOB Multi-Pattern — Uses a prioritized pattern list. It hits the right address with high probability, so we don't have to cycle through AOBs manually.

  • Auto Stride Detection — Automatically scores and validates stride candidates against FNamePool. It just works, no user input needed.

  • Universal FNamePool Reader — Handles UE4 TNameEntryArray, UE5 FNamePool (both Header A/B), and hash-prefixed builds out of the box.

  • Dynamic Offset Discovery — Offsets for UStruct/FField/FProperty are discovered at runtime via struct probing. No more hardcoded offsets that break on every engine sub-version.

  • Production-Ready CE XML Export — Generates proper hierarchical records with drop-down support. It handles BoolProperty bitmasks, signed integers, StructProperty expansion, and general ArrayProperty groups.

  • Live Walker via Named Pipes — The DLL runs inside the game process. Once the UI connects, the Live Walker is active even if no objects are loaded in the UI yet.

The Workflow: Inject DLL: Attach process -> Open Cheat Table -> Click Init. script -> inject -> Run UI: We get a populated object tree and exportable pointer chains in minutes.

No working? build your own from repos: https://github.com/bbfox0703/UE5CEDumper


TL;DR
Stop wasting weekends in re-scanning offsets. Let the tool handle the boring parts.

Any bug or error, please leave log/screenshot here (with zipped/7z format).

Logs location: %LOCALAPPDATA%\UE5CEDumper\Logs
Logs are well managed by UI/DLL. it will not flooding your disk.

UI screenshot (will not update)
Image

Known issue and will not fix

  • GObjects, GNames, GWorld address value displayed in information may not correct. This may be caused by mis-AOBed address.

"Start from GWorld" is not always working or correct. This cannot be 100% fixed.
Reason: multiple AOB matches result, pointed to wrong address. How I check:

  • Verify: "Start from GWorld" -> "PersistentLeve" -> "OwningWorld" (first offset like 0xC0) -> "OwningGameInstance": pointer is null = maybe fake GWorld / or custom game build

  • I'm trying to reduce the wrong GWorld address, but it will not 100% work anyway.


Not working? This is a common UE tool. It can not 100% work in every title. Anyway, may take 10 minutes to try this, before you dive-in hours of dirty work.

Start from GWorld (if working in the game)

Spoiler
Start_from_GWorld.gif
Start_from_GWorld.gif
Start_from_GWorld.gif (10.1 MiB) Viewed 2382 times

Class finder

Spoiler
Class Finder gif
Class Finder gif
Class_Finder.gif (3.04 MiB) Viewed 2382 times

Instance Finder

Spoiler
Instance_Finder.gif
Instance_Finder.gif
Instance_Finder.gif (6.73 MiB) Viewed 2382 times

Proxy mode DLL fast deployment (Steam)

Spoiler
Proxy deploy
Proxy deploy
Proxy_Deploy.gif (3.44 MiB) Viewed 2193 times

Proxy DLL mode connection and play

Spoiler
Proxy DLL mode connection
Proxy DLL mode connection
Proxy_dll_mode_connect.gif (19.82 MiB) Viewed 2192 times

Notice:
My personal testing angle is narrow, and resource is limited -- there may have bugs. I cannot test 17+ games w/ every function in every change.

Microsoft VC runtime is needed: https://aka.ms/vs/17/release/vc_redist.x64.exe

Old Releases

Spoiler
UE5CEDumper_v560.7z
2026/05/09: v560; password oct560; More types drilldown; bug fix
(15.85 MiB) Downloaded 86 times
UE5CEDumper_v488.7z
2026/05/08: v488; password: oct488; dual proxy dll mode (verson.dll is preferred); bug fix
(15.76 MiB) Downloaded 29 times
UE5CEDumper_v449.7z
2026/04/06: v449; password: oct449; bug fix:Fix CE XML AOB mode producing wrong base when opened from Instance Finder
(14.38 MiB) Downloaded 124 times
UE5CEDumper_v447.7z
2026/03/15: v447; password: oct447 ; bug fix / added bookmark function
(14.38 MiB) Downloaded 72 times
UE5CEDumper_v438.7z
2026/03/07: v438; password: oct438
(14.37 MiB) Downloaded 46 times
UE5CEDumper_v315.7z
2026/03/05: v315; password: oct315; lots of changes. Primary: implemented proxy DLL (version.dll) & one click proxy dll deployment ability for installed Steam games (you do not need to inject DLL via CE)
(14.21 MiB) Downloaded 31 times
UE5Dumper_v169.zip
2026/02/28: v169: password: oct; more inspected objects; CE dissect structure support; more AOB patterns with priorities.
(20.78 MiB) Downloaded 45 times
UE5CEDumper_v1.0.0.96.zip
2026/02/24: v96; password: oct; Update in CE XML output; Added UE "ArrayProperty" data type drilldown (partial, tested in UE5 only). Fixed known bugs(?)
(39.5 MiB) Downloaded 80 times
UE5CEDumper_v1.0.0.59.7z
v59; password: oct; Add a switch can copy address in 3 format: address without '0x' prefix, address with '0x' prefix, module+offset (module+RVA, may look strange because data is outside module)
(29.24 MiB) Downloaded 55 times
UE5CEDumper_v1.0.0.58.7z
v58; password: oct
(29.24 MiB) Downloaded 58 times

Latest Release


Re: UE5CEDumper -- A UE4/5 helper for making tables

Posted: Wed Feb 25, 2026 5:44 am
by MBRKiNG

you’re just the GOAT . Thanks for the release, it’s exactly what we needed!

Huge thanks to everyone who contributed to this. Legendary work by a legendary team


Re: UE5CEDumper -- A UE4/5 helper for making tables

Posted: Mon May 11, 2026 2:04 am
by bbfox

Release notes here

UE5CEDumper v730 — Release Notes (v560 → v730)

Spoiler

UE5CEDumper v730 — Release Notes (v560 → v730)

Window: 2026-05-09 → 2026-05-25 (16 days, 50 commits)
Tested games: 29 / 29 GWorld coverage (100%)
Tests: 770 → 1015 passing (+245)

This release closes the loop on invoking UFunctions as cheat-table actions, adds two large discovery surfaces (Interesting Funcs, Interesting Props), introduces class-wide property freeze, and lands a critical fix to a ProcessEvent hook that had been silently misfiring for 600+ builds.


Highlights

ThemeBuild(s)What
AA Script export from UFunction rows590-596Helper-in-table pattern, 50-line AA Script per function
Interesting Functions Finder tab597-687Keyword + class + flag scorer
Interesting Properties Finder tab670-687Mirror of Funcs side + Unusual Location flag
Property Freeze (Route B)719Class-wide horizontal lock
Invoke param picker (Stages 1+2)711-715UClass surface + [Pick…] [null] [self]
Mailbox poll 10ms → 1ms707-710CE-Lua sequential invokes 5ms/call faster
ProcessEvent vtable detection (CRITICAL fix)648Function-body pattern scan + hook-fire validator

New features

Invoke pipeline — discover → invoke → ship as cheat table

  • Copy AA Script (Baked) on UFunction rows (build 590-596). Pre-filled params, no in-CE form. Helper-in-table pattern: one shared ue5_invoke_helper.lua loaded via findTableFile, AA Script per function 50 lines.
  • Interesting Functions Finder tab (build 597-687). Scores all UFunctions across all UClasses. CamelCase tokeniser (build 609) so HP/MP/SP/XP/TP match safely without false-positives on Component/Spawn/etc.
  • Static-native ProcessEvent fast path (build 636). KismetMathLibrary / KismetSystemLibrary invokes no longer wait on the game thread. ES2 menu-state invokes that used to time out at 5-7s now return instantly.
  • Tools → Inject Helper into Current CE Table (build 611). One-click ships ue5_invoke_helper.lua into the open .CT via the AOBMaker pipe.
  • Verify Return Value toggle on the baked AA Script (build 637). Before/After raw-byte dump + typed return decode for diagnostic invokes.
  • Invoke param picker Stages 1+2 (build 711-715):
    • Stage 1 — UObject\*/UClass\*/Soft\*/Weak\*/Lazy\*/Interface params now show the expected UClass: [UObject*: AActor, 8B, off=0x10] instead of a bare [UObject*, 8B].
    • Stage 2 — [Pick…] [null] [self] buttons next to each pointer param. Pick opens a class-pre-filtered instance picker.
  • Mailbox poll 10ms → 1ms (build 707-710). timeBeginPeriod(1) bracket so the 1ms target is delivered even on hosts with the legacy 15.6ms scheduler tick.

Discovery surfaces

  • Interesting Properties Finder tab (build 670-687) — mirror of the Funcs Finder for properties. New concept: ⚠ Unusual Location flag for fields living in LocalPlayer / GameViewportClient / HUD / CheatManager — often the most cheat-tunable. Calibrated against a 15-game dump corpus.
  • Multi-select Copy CE Field(s) (build 660). LiveWalker DataGrid in Extended mode. Container multi-select emits ONE filtered container with N elements.
  • PropertySearch dedupe-by-defining-class (build 610). bCanBeDamaged no longer returns 4823 rows — single representative row plus an inheritor count badge.
  • search_properties_batch (build 685). 36-keyword Interesting Properties Load went 42s → 1.5s by walking GObjects once instead of once per keyword.
  • walk_class_batch (build 693-696). Full SDK Export + Dump All Metadata batched at 200 classes per round-trip. Estimated 2-5× wall-time on big games.

Property freeze

  • Class-wide horizontal lock (build 719). PropertySearch row gets a Freeze button. Generated AA Script holds the value across every live instance of the owning class with 50ms tick + 5s instance rescan. Numerics + bool supported in v1.

Export / analysis

  • Export → Dump All Metadata (.jsonl) (build 676). Streams every class + props + funcs via existing pipe endpoints.
  • Python analyzer pipelinescripts/analysis/analyze_dumps.py. Aggregates dumps cross-game, emits a Markdown report (top names / tokens / Unusual Locations). Reproducible scoring-table calibration.
  • 15-game cross-game scoring calibration (build 678 + 687). PropertyScoringTable / KeywordScoringTable additions backed by empirical evidence across DQ7R / ES2 / FactoryGameSteam / Hogwarts / TQ2 / FF7R / Stray / others.

UX / polish

  • System tab (formerly Pointers) with a Diagnostics card — UI/DLL build match, AOBMaker plugin status, Self-Test button that auto-picks a KismetMathLibrary helper and verifies the return value.
  • ⚙ Options popover (build 666) — collapses 5 export-shape sliders into a dropdown. Reclaims 600px so the toolbar stays one row at 4K@225%.
  • Shorter tab labels (build 666) — Instance Finder → Instances, Property Search → Properties, etc.
  • Function Goto (build 632) — Live button on Interesting Funcs now auto-expands the LiveWalker Functions section and scrolls to the target row.
  • Empty-class hint banner on ClassStruct (build 632) — BlueprintFunctionLibrary subclasses no longer read as "broken".
  • Credit footer in System tab + Live Walker empty state.

Critical fixes

  • ProcessEvent vtable wrong slot (build 648). Pre-648 detection picked a slot from a hardcoded version table and "validated" by reading 1 byte. ES2 / Geri ended up hooking the adjacent virtual; invokes silently returned result=0 without ever running the function. Rewrite uses a function-body pattern scan (Dumper-7 technique) matching FUNC_Native + high-flag-mask TEST instructions, plus a post-install validator that logs VALIDATION FAILED if the hook doesn't fire ≥1× in 1500ms. Verified live on ES2 (UE 5.5) and Geri (UE 4.27) — real PE slots were 0x278 and 0x220, both off by ≥1 slot from the old hardcoded values.
  • SoftClassProperty silent 4-byte truncation (build 717). [Pick…] declared 7 pickable pointer types but WriteParam only covered 6 — SoftClassProperty fell through to a size-based default that wrote 4 bytes of a 64-bit address before ProcessEvent. 14 contract theories now enforce the canonical type list at compile time.
  • DLL class filter dropped every BlueprintGeneratedClass (build 673). Aura::SearchProperties / ListClasses / EnumerateAllFunctions all had if (metaClassName != "Class") continue;. 90% of game-specific classes live in BPGCs. New IsClassLikeMeta whitelist covers Class + BlueprintGeneratedClass + AnimBPGC + WidgetBPGC + DynamicClass.
  • SdkExportService BPGC filter (build 690). Same bug class on the C# side. Mirrored to IsClassLikeMetaName.
  • Satisfactory / hybrid-layout proxy-deploy scanner (build 691-692). Three UE shipping layouts (monolithic / hybrid / pure-modular) now handled cleanly by a two-tier search (primary roots first, Engine\ as fallback). Eliminates phantom Engine-side rows on StellarBlade / NMKART / Palworld / TQ2 / Satisfactory.
  • AOBMaker plugin InjectTableFile (build 632, AOBMaker-side fix). f.Stream.write set Size=0 silently. Switched to createStringStream + copyFrom — same pattern CE's own autorun/java.lua uses.

Quality / infrastructure

  • AOT-safe ObjectInstancePickerDialog (build 729) — 12 IL2026/IL3050 warnings (reflection-based Binding(string) columns) replaced with DataGridTemplateColumn + FuncDataTemplate<T>. AOT publish is now warning-clean at 41.9 MB.
  • Static MSVC CRT in Native AOT publish (build 718) — no VCRuntime DLL dependency.
  • Compile warning sweep (build 698) — 13 sites cleared (C4189 dead var + xUnit1051 cancellation tokens).

Tested games (29 / 29 GWorld = 100%)

New / re-verified this window: Star Wars Jedi: Fallen Order (UE 4.21), Ghostwire: Tokyo (UE 5.04), Frontiers (UE 4.26), The Artisan of Glimmith (UE 4.27). Plus revalidation across DQ7R / ES2 / Geri / Hogwarts Legacy / Octopath Traveler / Stray / TQ2 / FF7 Rebirth / FF7 Remake / Satisfactory / NMKART / Palworld / StellarBlade / Manor Lords / Tower of Mask / DQI&IIHD2D / Deep Rock Galactic.


Known limitations

  • EA-launcher games block proxy DLL preload — neither version.dll nor dinput8.dll loads when the EA app spawns the wrapped exe. Workaround: CE manual injection after the game is running.
  • Bitfield bool freeze not supported in v1 — helper writes a full byte; packed uint8 bFoo : 1 fields aren't surfaced as bitfields by PropertySearch yet.
  • FString / FName / TArray freeze out of v1 scope. Numerics + bool first.


Release v560 — Address Finder v3, Property Walker Coverage, UE Version Override

Spoiler

Range: v488 → v560 (41 commits, 5 weeks of work)
Highlights: Reverse-reference scanning, OptionalProperty / MulticastSparseDelegate / Soft+Lazy+Delegate array drill-down, per-game UE version override with publisher bias detection, CE XML / CSX N-level pointer drill-down, UTF-8 hardening + dedicated C++ test suite.

Address Finder

Find References (v2 → v3)

  • Reverse pointer scan — given any UObject*, find every UPROPERTY field across the live object array that holds a pointer to it, so users can navigate from a CE-found instance back to its logical owner.

  • v2 coverage: WeakObjectProperty, SoftObjectProperty / SoftClassProperty, LazyObjectProperty, InterfaceProperty, TMap / TSet allocated slots (key + value sides for Object/Class).

  • v3 coverage: DelegateProperty single binding + MulticastInlineDelegateProperty / MulticastDelegateProperty (walks each FScriptDelegate's FWeakObjectPtr); TArray<FScriptDelegate>; nested in StructProperty / OptionalProperty<Struct> to depth 3. fieldName appends .Key / .Value for map matches; deadline 30 s.

Container-aware lookup

  • New Aura::FindInContainers scans ArrayProperty / MapProperty / SetProperty buffers, including nested in StructProperty and OptionalProperty<Struct> (depth 3).

  • Slack / freed-slot support, 15 s deadline, response carries container_scan stats.

  • Aura::FindByAddress returns match_kind (exact / contains / backward / nearest) for honest confidence reporting.

Property Walker — drill-down coverage

Inner typeStatus
SoftObjectProperty / SoftClassProperty arrayPhase G — asset path + resolved live UObject* + per-element FName leaf in CE XML
LazyObjectProperty arrayPhase H — FGuid + resolved live UObject*
InterfaceProperty arrayPhase I
DelegateProperty array (single multicast field also)Phase J — Target::FunctionName + drill-into-target
MulticastDelegateProperty / MulticastInlineDelegateProperty arrayPhase K — (N bindings) preview
OptionalProperty<T> (UE 5.2+)Intrusive (UE 5.4+ pointer-shaped), FIntrusiveUnsetOptionalState (Str/Name/Text), and non-intrusive {T value; uint8 bIsSet;} layouts
OptionalProperty<Struct>Walker stamps {structClassAddr, structDataAddr, structTypeName}; UI / CE XML / CSX reuse standard StructProperty path
MulticastSparseDelegatePropertyBound-flag surfacing only (binding list still pending — see Known Issues)
Single Soft / Lazy fieldsResolve embedded FWeakObjectPtrUObject* when asset is loaded

UI / Live Walker UX

  • Auto-scroll-to-field after Open from Find Refs.

  • Auto-drill into element [N] for direct-container hits (Container, Container.Key, Container.Value) — previously user had to click [N] manually.

  • Class Structure: fixed flash-blank on selection; class-like nodes now route to themselves; new Package column; auto-run Find Instances pre-fill.

  • Property Search: dedicated type-filter input + autocomplete; client-side result filter; type-only queries supported (e.g. browse all OptionalProperty fields).

  • ProxyDeploy: tooltip flicker fix — anchor above bottom controls.

Export — CE XML / CSX

  • N-level ObjectProperty drill-down for Copy CE Field, Copy CE XML, Export CSX. Drill Depth slider (0-4) drives both formats.

  • Recursive walk through ObjectProperty / ClassProperty / WeakObjectProperty / Soft* / LazyObjectProperty / InterfaceProperty targets, depth-capped, shared visited HashSet for cycle protection.

  • Cascade struct resolution: nested StructProperty / OptionalProperty<Struct> children inside drilled UObjects expand to real sub-fields (not empty GroupHeader placeholders).

  • TArray<TSoftObjectPtr> per-element CE XML group with FName leaf.

  • OptionalProperty CE XML emit: struct-typed → struct group; otherwise → 8 B hex leaf (was silently dropped).

  • Fix: emit ObjectProperty / ClassProperty / WeakObjectProperty as 8 B leaf when not drilled.

UE Version Detection

  • Per-game UE version override — new pipe cmd set_ue_version_override, persisted in HintCache JSON. UI ComboBox in Pointer panel: Auto / 4.18-4.27 / 5.0-5.8. Survives game restarts.

  • Publisher thumbprint detection — reads PE LegalCopyright / CompanyName, matches against publisher table (currently SQUARE_ENIX). Match → forces bLowConfidence=true and uses publisher's bias fallback (SquareEnix → 4.27 instead of 5.04).

  • Tier 3 hardening — bare "X.Y.D" pattern now requires Engine / Unreal / UE4 / UE5 / ++UE anchor in 256-byte window AND defers first hit so a real Tier 2 "Release-4.27" later in the module beats early stray "5.5.0" SDK strings. Tier 3 hits are flagged low-confidence even when accepted.

  • 3-state UI badge: ✓ Detected / 🔧 User Override / ⚠ Low Confidence + Publisher chip when thumbprint matched.

Affected games: DQ I&II HD-2D, FF7 Rebirth, FF7 Remake, Ghostwire (all UE4 forks previously misdetected as UE 5.5).

Stability / Hardening

  • CE XML emit pointer cycle (UWorld → PersistentLevel → OwningWorld back-edges) caused StringBuilder OOM (2 GB). Fixed via thread-static _emitPath HashSet pushed/popped on EmitDrilledPointer entry; back-edges emit a flat 8 B hex leaf labeled (cycle elided). Belt-and-braces MaxEmitPointerDepth=16 cap.

  • UTF-16 surrogate handling in Serie::GetString wide path — root cause of recurring invalid UTF-8 byte at index 1: 0xA0 exceptions on UE 5.7 games (e.g. Squad, 240 K objects). Wide path was producing CESU-8 for surrogate range 0xD800..0xDFFF; nlohmann::json strict-validates and rejects. Fix: detect surrogate pairs → 4-byte UTF-8; lone surrogates → ?.

  • ReadFString hardeningWC_ERR_INVALID_CHARS strict flag + Utf8Helpers::Sanitize post-pass.

  • Utf8Helpers header-only extraction — Sanitize (Ubel) + EncodeUtf16 (Serie) merged; both call sites share one implementation.

  • 31-case C++ self-test (dll/tests/utf8_helpers_test.cpp) — stand-alone executable, no GoogleTest. Covers ASCII, lone continuations (the 0xA0 case), CESU-8 surrogates, overlongs, truncated sequences, surrogate pairs → 4-byte UTF-8, idempotency, EncodeUtf16-output-passes-Sanitize-unchanged invariant. Wired into build.ps1 -Target Test before C# suite.

Documentation

  • New docs/dev-log.md — running milestone log + capability matrix (read first for current status).

  • docs/technical-notes.md — Phase B-K array reader and property-layout reference.

  • README + spec docs refreshed to reflect build 547+ capabilities.

  • Superseded design docs moved to docs/archive/.

Known Issues

  • MulticastSparseDelegateProperty bindings still unavailable (storage external to field — needs separate AOB; resolved in v577 via SPARSE_ES2_1, see future release).

  • FieldPathProperty drill-down (rare).

  • Find Refs: TMap / TSet with weak-like inner sides (currently Object/Class only).

  • GWorld: Star Wars Jedi untested; Satisfactory fails.

  • Other publishers shipping unreliable version strings will need adding to kPublishers[] in Genau.cpp.

Pull Requests Merged

  • #192 — Per-game UE version override + publisher bias + CE XML cycle fix

  • #193 — UTF-8 hardening + Utf8Helpers extraction + C++ test target

Release v488 — Proxy DLL Deployment, DLL Lifecycle Hardening, UE 5.8 Support, Frieren-Themed Refactor

Spoiler

Range: v449 → v488 (40 commits)
Highlights: Proxy DLL injection workflow (version.dll / dinput8.dll alternatives, passive-mode mutex), UE 5.8 detection + chunked-layout preset, DLL lifecycle hardening (DllMain detach, scan-thread join, pipe-server lock-while-join), Avalonia 12.0 API migration, Live Walker destroyed-object hang fix, and codebase-wide rename to Frieren-themed module names.

Proxy DLL Deployment

A new injection mode that drops a renamed proxy stub into the game's directory so the DLL loads on game start — no Cheat Engine attach required for users who only want to read pipe data.

  • version.dll / dinput8.dll alternatives — pick whichever the target game's import table actually resolves. dinput8.dll chosen for games that don't link version.dll.

  • UI radio button in the ProxyDeploy panel to pick which proxy the deploy step copies.

  • Passive-mode mutex — proxy build of the DLL holds a named mutex so a second injection (e.g. CE) is detected and skipped.

  • Skip CE inject when proxy DLL already loadedue5dump.lua checks for the mutex before calling injectDll, preventing double-load.

  • Single-click UI refresh after Deploy / Undeploy (was: required a second click to update the deployed-state badge).

DLL Lifecycle Hardening (audits A + B)

Two-pass audit of teardown paths that previously could deadlock or use-after-free during process exit / DLL unload.

Audit A

  • DllMain(DLL_PROCESS_DETACH) is now a no-op — Windows holds the loader lock during detach, and any pipe-server / scan-thread cleanup that touches OS APIs is forbidden there.

  • Join missing scan thread — earlier builds could leak the scan thread if the user closed the game before scan completion; cleanup now joins explicitly.

Audit B

  • Fern (PipeServer): lock-while-join pattern — disconnect under lock, join outside lock, to avoid the worker thread re-entering the same mutex.

  • Mimic (Mailbox): explicit state machine for inflight IPC; rejects new requests once shutdown is signaled.

  • Stark (GameThreadDispatch): soft-disable path — MinHook unhook is best-effort during teardown; if the hook can't be cleanly removed, dispatch falls back to no-op rather than crashing.

UI side

  • IDisposable on timer-owning ViewModels; panel event handlers are explicitly unsubscribed when panels close (was: stale handlers fired against disposed VMs).

UE 5.8 Support

  • Version detection — Tier patterns extended to recognize UE 5.8 builds.

  • Chunked-layout presetAura::ObjectArray exposes a 5.8 preset (matches new FUObjectArray stride / chunk size).

Avalonia 12.0 API Migration

  • Fixed breaking API changes from Avalonia 12.0.0 — IClassicDesktopStyleApplicationLifetime access pattern, control template / template-binding adjustments, and assorted property renames.

  • Sweep of remaining Avalonia + xUnit compile warnings.

Live Walker — destroyed-object hang fix

Browsing a UObject whose owning class had since been GC'd would hang the walker indefinitely (offset reads against a torn-down UClass). Walker now validates the class pointer's signature before traversing properties; invalid → return cleanly with an error event rather than blocking the worker thread.

Frieren-Themed DLL Refactor (PR #175)

Codebase-wide rename of C++ DLL modules to Frieren-character names for thematic consistency and to keep namespaces short / unambiguous.

ModuleNew name
MemoryMacht
LoggerSein
SignaturesHimmel
OffsetFinderGenau
ObjectArrayAura
FNamePoolSerie
UStructWalkerUbel
ExportAPIFrieren
PipeServerFern
GameThreadDispatchStark
MailboxMimic
HintCacheFlamme
CEPluginMethode
ProxyVersionLugner

Done in two phases: A (file renames only, preserving behavior to keep diffs reviewable) → B (namespace + reference updates). See docs/naming-convention.md.

UI / UX Polish

  • Empty-state logo when LiveWalker DataGrid has no data (cleaner first-run experience).

  • Project logo (UE5CEDumper.jpg) added.

  • AOT / trim warnings swept across the C# tree (every project now builds clean under Native AOT).

  • xUnit analyzer warnings cleared.

Dependencies

  • NuGet packages refreshed (Avalonia, ReactiveUI, xUnit, source generators).

  • minhook and private submodules updated.

  • .gitignore: exclude build_proxy_dinput8/ build output.

Pull Requests Merged

  • #175 — Frieren-themed DLL rename (Phases A + B)

  • #178 — Avalonia 12.0 API compat

  • #180 — UE 5.8 version detection

  • #182 — Live Walker destroyed-object hang

  • #187 — AOT/trim + xUnit warning sweep

  • #188 — Proxy DLL deployment (version.dll / dinput8.dll, passive mutex)

  • #189 — DLL lifecycle hardening + UI lifetime + NuGet refresh

  • #190 — UE 5.8 chunked layout preset


Re: UE5CEDumper -- A UE4/5 helper for making tables

Posted: Mon May 11, 2026 2:10 am
by bbfox

Sharing: Brief Tech Note: DLL Injection vs. Proxy DLL in Game Hacking for newbie


This is out of <dumper download post> scope. Just wanted to do a quick breakdown of the common hacking methods we see in modern tools. Whether you're using Cheat Engine or a custom loader, understanding the "under-the-hood" logic helps when debugging crashes.

A. Cheat Engine / Standard DLL Injection

Spoiler

This is the common "Runtime" method.

Mechanism: Uses Windows APIs (like OpenProcess and CreateRemoteThread) to force the game process to run LoadLibrary().
Workflow:

  • Open the target process.

  • Allocate memory inside the game for the DLL path.

  • Trigger a new thread to load your Payload DLL.

Pros: Very flexible; you can inject anytime after the game is running.
Cons: manual injection every time, dirty routine job. Also antivirus may block this operation -- need to set as exclude list. Easy to be detected.

B. Proxy DLL (DLL Hijacking)

Spoiler

This is a "Startup" method that leverages the Windows DLL search order.
Mechanism: You place a malicious DLL with the same name as a legitimate system DLL (e.g., version.dll, dxgi.dll, dinput8.dll) into the game folder.

Workflow:

  • Game starts and looks for the required DLL in its own folder first.

  • Game loads your Fake DLL instead of the real system one.

  • The Fake DLL "proxies" (forwards) all legitimate function calls to the original system DLL while executing your hack code in the background.

Pros: Excellent for early-stage hooking (before the game's anti-cheat fully initializes), lazy for everyone -- one install, executed everytime.
Cons: Fake DLL name is limited. If you use multiple hacking tools, there will be conflict. Also if the game don't need DLL we placed, it will not work (i.e. some UE games don't need dinput8.dll, or it will be load on demand)

Why can we only choose ONE?
Even if a tool provides both options, you usually can't enable them simultaneously for the following reasons:

  • Conflict on Hooks: Both methods usually try to Hook the same functions (e.g., Present() for ESP or Recv() for network). If both try to rewrite the same memory address, the game will Crash immediately (Access Violation).

  • Entry Point Logic: Proxy DLLs run at the very beginning of the process life cycle. If you then try to "re-inject" the same logic via CE, you might trigger re-initialization of the cheat engine, causing double-allocation or pointer conflicts.

  • Stability & Race Conditions: Managing two different injection vectors for the same feature set is a nightmare for developers. To keep the Base Address and memory offsets clean, sticking to one "Source of Truth" is standard practice.

  • Other fake-DLL specific design. i.e. pipe name duplicate

Inject / Proxy DLL is not a CE plugin!
Don't load it as plugin unless author said so.

TL;DR:

  • Proxy DLL = Set and forget (Auto-load at start); also: may forget to update when new version arrived.

  • DLL Inject = Manual control (Inject whenever you want).

Don't mix them unless you want to see the "Send Error Report" window.

Hope this helps!

  • DLL Injection: Force the game to load your code at runtime via CreateRemoteThread.

  • Proxy DLL: "Fake" a system DLL (like verson.dll) in the game folder to hijack the loading sequence.

Why only one?
Double-hooking the same function may lead to Instant Crash or hacking tools not working. To maintain memory stability and avoid pointer conflicts, you must choose the injection vector that fits your needs.

If your read this section and think it's useful, may click "like" for this post. This is just let me know if anyone really need such things.