Files
OpenFUT/fifa17-recon/tools/ghidra_queries/q_md_v1_B.py
T

39 lines
1.4 KiB
Python

"""ADVERSARIAL VERIFY Dimension 2: gate-byte writers + readers.
Attacks (priority = claims that change what we send):
D2.6 Objectives deser cases 0xfd/0xfe are CLEAR-ONLY (value==0 => field=0, no set).
-> action "DO NOT send enableObjectives:0". If it also SETs, action is wrong.
D2.5 Draft: FUN_1800b2680 reads slot 0x2c8 (0x1fd3d) / 0x2d0 (0x1fd3e) and gates the
tile GOTO_DRAFT_*; the byte ACTUALLY gates (a cmp/test on the model slot result).
D2.3 Seasons: FUN_1800b2680 season tiles drawn UNCONDITIONALLY (no cVar gate).
D2.2 Applier FUN_18011dc50 writes byte = (field==1); one MOV per byte.
D2.1 Publisher FUN_18006cc60 IS_* names.
Control: draft slot 0x2c8 must decode to disp 0x1fd3d via the accessor stub; if not the
whole slot->disp table is unreliable.
"""
import traceback
try:
PUB = 0x18006cc60
DESER = 0x18013c6d0
APPLY = 0x18011dc50
HUB = 0x1800b2680
SEASONPANEL = 0x1800b0e20
print("=== PUBLISHER FUN_18006cc60 ===")
print(dec(PUB, 240))
print("\n=== APPLIER FUN_18011dc50 ===")
print(dec(APPLY, 240))
print("\n=== HUB-TILE BUILDER FUN_1800b2680 ===")
print(dec(HUB, 300))
# deser: only print the arms for the mode atoms we care about
print("\n=== DESER FUN_18013c6d0 (full) ===")
ds = dec(DESER, 300)
print("len=%d" % len(ds))
print(ds)
except Exception:
traceback.print_exc()