wip: checkpoint FIFA 17 SBC research for Windows migration

This commit is contained in:
funman300
2026-08-07 12:03:22 -07:00
parent 3d3239bab9
commit cc694774a3
47 changed files with 9105 additions and 4 deletions
@@ -0,0 +1,50 @@
"""DIMENSION 4 q2: locate the draft/tournament entry decision.
Hypothesis: entry is gated in the script layer / a manager singleton with no server
writer, NOT by any server-reachable field. Test by (a) enumerating draft/tournament
script-event + manager literals and their xrefs, (b) reading the CompetitionManager
setters FUN_180101680/FUN_1801016c0 (the Seasons lead) and looking for draft/tourney
analogues, (c) finding who READS the draft gate byte model+0x1fd3d and tournament
+0x1fd3b.
Control: 'IS_DRAFT_MODE_ENABLED' literal must resolve and xref into FUN_18006cc60
(the known publisher). If it does, the string/xref mechanics work.
"""
import traceback
try:
def show_str_xrefs(lit, blocks=(".rdata",)):
hits = find_all(lit.encode() + b"\x00", blocks)
print("\n--- literal %r : %d hit(s) ---" % (lit, len(hits)))
for h in hits:
print(" @ %#x" % h)
for frm, typ, fn, ent in xrefs_to(h):
print(" xref from %#x %s in %s (%#x)" % (frm, typ, fn, ent))
# control
show_str_xrefs("IS_DRAFT_MODE_ENABLED")
# draft / tournament script + manager literals
for lit in ("NOSEASONS", "NODRAFT", "NOTOURNAMENT", "DRAFTSQUAD_ON",
"SINGLE_PLAYER", "DRAFT_TOKEN", "DraftMode", "Draft",
"CompetitionManager", "TournamentInfo", "TournamentManager",
"DraftManager", "OnlineDraft", "OfflineDraft"):
show_str_xrefs(lit)
# substring scan for any *draft*/*tournament* ascii literal in .rdata
print("\n=== .rdata literals containing 'raft' or 'ourna' ===")
for needle in (b"raft", b"ourna"):
seen = set()
for h in find_all(needle, (".rdata",)):
# back up to string start
p = h
while p > h - 64:
b = read_bytes(p - 1, 1)
if not b or b[0] == 0 or b[0] < 0x20 or b[0] > 0x7e:
break
p -= 1
s = rd_str(p, 96)
if s and s not in seen and (b"raft" in s.encode() or b"ourna" in s.encode()):
seen.add(s)
print(" %#x %r" % (p, s))
except Exception:
traceback.print_exc()
print("QUERY_DONE")