XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8

Offline Galaxy mapping closure

The pinned 6891... client and installed ED5A... client now have an offline mapping ledger covering every RVA currently used by the Galaxy adapters and their registry, handle, CSM and snapshot-hook basis. This is preparation for a separate reviewed version profile. These research tools did not change native hash guards or hooks; no game process was started, attached to, or modified.

artifacts/galaxy-client-compatibility/galaxy-mapping.json contains 272 review candidates and their exact-file byte checks, 16 explicit foundation vtable slots, 22 component registration bindings and 48 exact CSM state literals. It explicitly records runtimeNeutral=true, canInstallHooks=false and runtimeValidated=false.

The seven data gaps

Pinned RVA New RVA Evidence
51DAF4C 51DAF1C Independent MOVSS/MOVUPS references in matched functions, with consistent targets
5324DA8 5324D78 Four independent matched callers and preserved scalar-load instruction
5324DAC 5324D7C Four independent matched callers and preserved scalar-load instruction
52406A0 5240670 Unique complete 2.0/elite/shipyard/prices string, corroborated by the original constructor LEA; this address is not a vtable
5FDF490 5FDF490 Preserved complete physical-colour body and its image-base indexed two-threshold loop
5FDF494 5FDF494 Second element of that proven two-element, four-byte-stride threshold array; not inferred from neighboring globals alone
5FDF498 5FDF498 Preserved descriptor expression with 0x18 stride and original minimum/table fields

The appearance globals are BSS. Their addresses and use are verified; their runtime values and population/readiness are unknown offline. The ledger does not manufacture file hashes for nonexistent initialized BSS bytes.

Chained unwind and HeatTick

The earlier six-byte HeatTick match was the first .pdata prologue region, rather than the complete function. The audit tool now follows UNW_FLAG_CHAININFO and merges only adjacent ranges with the same original root, never a distant cold-code gap.

The complete contiguous original span is 3814540..38147F9. Its 383-byte initial signature uniquely matches 38144A0 in the new text section. The independently matched caller 380E410 -> 380E370 contains the corresponding direct call 380E4A8 -> 380E408, targeting exactly the same candidate. The preserved complete contiguous span is also recorded by the closure audit.

This corrects the initial tooling limitation without changing any native hook. The code-address delta is -A0, whereas Flow/Physics/Input/FSD update hooks use -C0; a universal delta remains invalid.

Registry, handles and CSM

galaxy-registry-closure.json records the existing old-client registry interface from a previously captured, hash-identified snapshot, followed by static verification in both files. The registry lookup interface vtable 512A9F8 remains at the same RVA. Its slot-zero thunk maps 8C7050 -> 8C6FF0 and still subtracts 38 from the interface pointer. The pure lookup maps 9C84E0 -> 9C84A0, preserving:

root+10 -> metadata
metadata+30 -> sparse slots, indexed by type ID * 16
root+18 -> dense component pointers, indexed by sparse slot * 8

The weak-life component getter 647EF0 -> 647E90 preserves the life+C8 link, and validity predicate 636A80 -> 636A20 preserves its signed state comparison. These agree with the existing managed guarded registry reader.

galaxy-foundation-slots.json additionally checks the original flow action, CSM current-state getter, cached integer type, local user ID/life, network mode, avatar value, wing count/phase/address and published friends map. The wing nonempty wrapper at vfunc +48 calls vfunc +68 to obtain the member count; both slots are checked. Physics dynamics +68 is resolved by the independently unique +A8 slot in the same vtable, rather than by choosing one of several identical getter bodies.

galaxy-component-bindings.json checks 22 concrete interface slot-zero type getters against their actual RIP-relative type-ID global in both images. This includes Galaxy, Names, NavRoute, metadata, social, account caches, colonisation, power and appearance interfaces. The numeric registration IDs are initialized at runtime and are not assumed equal or read from a process.

The original gameplay CSM predicate maps 1D5F600 -> 1D5F540. Its complete 1,207-byte contiguous span and all 48 referenced ASCII state strings are checked. Local branch offsets and strings are retained exactly. Cached matchmaking mode remains an existing-read-only contract; the original lazy initializer is not called by this audit or the social reader.

All nine initially unmatched bodies

The automatic mismatches were caused by embedded image-relative addresses, including inline switch-table entries. Complete manual records explain every remaining byte difference; none of these compared bodies requires a changed managed decision rule on the evidence examined.

Pinned RVA New RVA Complete span / code / switch entries
1388680 13885A0 384 bytes / 102 code instructions / 8 entries
1399990 13998B0 76 bytes / 14 code instructions / 8 entries
2175ED0 2175E10 80 bytes / 14 code instructions / 9 entries
3B16B00 3B16A60 400 bytes / 63 code instructions / 16 entries
3B32DD0 3B32D30 260 bytes / 67 code instructions / 8 entries
3C41390 3C412F0 320 bytes / 83 code instructions / 8 entries
3C3F440 3C3F3A0 344 bytes / 90 code instructions / 8 entries
3C3F5A0 3C3F500 516 bytes / 127 code instructions / no inline switch table
3CF04B0 3CF0410 217 bytes; four embedded local RVAs accounted separately

For the first six, research-switch-table-closures.json checks every non-address byte, instruction length/mnemonic, internal direct-branch target offset and complete switch-table target offset. For the physical-colour pair, appearance-manual-triage.json independently records the same checks and all changed operands. The type palette moves 5539360 -> 5539330; prototype steps move 5539350 -> 5539320; all eight runtime luminosity-tree addresses remain unchanged. Compact classification +40, temperature +30, luminosity/subclass rules and descriptor expressions are preserved. Runtime palette values remain unknown until initialized; old extracted resource values are not declared identical to every new resource solely from this code comparison.

Verifier and remaining boundaries

research/Prepare-GalaxyClientMapping.py builds and checks the runtime-neutral ledger. It validates both complete EXE SHA-256 values, exact original/new window hashes, explicit address-field masks, preserved internal branches, foundation vtable slots, registration getter/global bindings and CSM literals. It also pins its supporting research artifact hashes. Wrong code and BSS addresses are rejected against the underlying reference evidence. The verifier rescans the current native source inventory and rejects an address omitted from both the mapping and the explicit unresolved list.

The final offline verifier test run passed 9/9 tests, covering incorrect code/global RVAs, image hashes, foundation slots, registration globals, CSM literals, omitted source addresses and attempted hook-approval flags. The positive case preserves the runtime-neutral status.

& 'C:/Users/XFEstudio/Desktop/work/AI/skill/game-client-to-server-reverse/.venv/Scripts/python.exe' -X utf8 research/Prepare-GalaxyClientMapping.py --verify artifacts/galaxy-client-compatibility/galaxy-mapping.json
& 'C:/Users/XFEstudio/Desktop/work/AI/skill/game-client-to-server-reverse/.venv/Scripts/python.exe' -X utf8 research/Test-GalaxyClientMapping.py

The three initially unresolved commerce/station aliases are now also closed without invoking their code. non-galaxy-context-closures.json records:

  • 1E84FC0 -> 1E84F00: all 19 normalized constructor candidates were checked; only this one retains the complete 2.0/elite/market/list endpoint identity.
  • 1E85EE0 -> 1E85E20: all 19 constructor candidates were checked; only this one retains 2.0/elite/market/trade.
  • 340E9E0 -> 340E980: all 27 direct call sites have counterparts, with 25 sites in independently unique matched callers. These include original maintenance updater 1E67600 -> 1E67540 at relative offset +4AA. The complete 424-byte called body and its internal branches are preserved.

During the audit, shared native sources were independently migrated to the new exact hash by another workspace activity. These tools neither performed nor reverted that migration. The proof records observed source-file hashes and reference line numbers without inferring its author. The verifier detects whether current sources use the old or new exact-hash profile, compares their RVA inventory to the corresponding side of the ledger, and reports unresolved uses explicitly. The final pass accounts for all 248 current source RVAs, with unresolved=0 and sourceUnresolvedUses=[]. This remains a static-source result, not approval of the migrated runtime behavior.

The wider research seed inventory still contains generic one-to-many helper signatures; it is not a global migration table.

Before any new executable profile is enabled, the native hook ABI/trampoline, caller argument/owner-thread assumptions and the actual profile integration still require review and appropriate fixtures. Runtime cache initialization, account response completeness, current resource values and actual dense-query coverage require a later real-client observation. None is claimed by these offline files. The research tools do not alter other navigation tasks or native profiles.