39 lines
1.4 KiB
Python
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()
|