fifa17-recon: card identity is a DATA problem -- live probe proves the record model
Adds tools/card_identity_probe.py, a read-only /proc/PID/mem walk of the CardsDb card map that reports the identity the CLIENT resolved for every card it holds. Why it matters: identity never comes from us. The item-parser tail registers every parsed item into the map, and immediately before that FUN_180141660 -> FUN_180135890 queries the client's own local players table by resourceId & 0xffffff. On a hit it fills name/face and leaves our rating/position/attributes alone; on a miss it writes a fixed generic card (rating 0x32, teamid 0x78d, nation 0xe, position 2, attrs 1, name ' '). That miss fingerprint is exactly the blank card photographed in a pack today, so the chain is confirmed by live evidence and not only in Ghidra. First live run, 11 nodes, 0 failed reads, size counter agrees with the walk: Ronaldo/Messi/Suarez/Kroos/Hazard all resolve with real names, so every record offset derived statically (+0x18 resourceId, +0xb4 rating, +0x94 teamid, +0x148 nation, +0x146 position, names inline at +0xb8/+0xc8/+0xdd) is correct live. This makes card identity a pure DATA problem: serve real playerids. The probe is the bulk oracle for finding them -- N candidate ids served, one read classifies all N. Also flips FUT_STORE_DISPLAYGROUP to default on; it shipped off pending proof that the key does not switch FIFA17.exe to another tile render path, and it was then run live and the store tiles showed their real names. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VUT92pz6RWKih9dSr8ZpxW
This commit is contained in:
@@ -676,10 +676,12 @@ MOVE_BODY = os.environ.get("FUT_MOVE_BODY", "ack")
|
||||
# leaving two loaded guns on the table. The fix that replaces them is below.
|
||||
#
|
||||
# FUT_STORE_DISPLAYGROUP: send the ONE key that actually names a tile,
|
||||
# displayGroup(0xd9) as {"value": "<pack name>"}. DEFAULT OFF: the parser-side proof
|
||||
# is airtight but does not cover whether the presence of this key switches FIFA17.exe
|
||||
# to a different (packed, unreadable) tile render path. See _pack_body.
|
||||
STORE_DISPLAYGROUP = os.environ.get("FUT_STORE_DISPLAYGROUP") == "1"
|
||||
# displayGroup(0xd9) as {"value": "<pack name>"}. DEFAULT ON since 2026-08-04: it was
|
||||
# shipped off because the parser-side proof did not cover whether the key switches
|
||||
# FIFA17.exe to a different (packed, unreadable) tile render path. It was then run live
|
||||
# with FUT_STORE_DISPLAYGROUP=1 and the store tiles rendered their real names instead of
|
||||
# "unknown", so the live-proven value is now on. See _pack_body.
|
||||
STORE_DISPLAYGROUP = os.environ.get("FUT_STORE_DISPLAYGROUP", "1") == "1"
|
||||
|
||||
|
||||
def quick_sell_route(h):
|
||||
|
||||
Reference in New Issue
Block a user