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

55 lines
2.1 KiB
Python

"""DIMENSION 3 SEASONS q1.
HYPOTHESIS: the Seasons refusal is decided in the front-end SCRIPT layer, not in
CardsDLL. If so, the CardsDLL season loaders make no network call, only read a
u16 count, and the CompetitionManager mode setters have ZERO in-DLL callers
(driven from outside). Prove or refute by enumerating callers of the mode setters,
decompiling the loader chain, and tracing the NOSEASONS event.
CONTROL: for the "zero callers" claim, a control with KNOWN callers must be in the
same batch -- I use FUN_180057560 (LoadOfflineSeasons) itself, which per prior work
is reached from the RPC dispatch, so callers() must be NON-empty for it if the
mechanism is sound; if callers() returns [] for a function I know is called, the
query form is broken and no absence claim is valid.
"""
import traceback
try:
targets = {
"FUN_180101680 (CompMgr mode set A)": 0x180101680,
"FUN_1801016c0 (CompMgr mode set B)": 0x1801016c0,
"FUN_180057560 LoadOfflineSeasons": 0x180057560,
"FUN_1800576b0 LoadSeasons": 0x1800576b0,
"FUN_180057230 LoadCurrentOfflineSeason": 0x180057230,
"FUN_180057330 (NOSEASONS fire?)": 0x180057330,
}
for name, a in targets.items():
print("=" * 70)
print(name, hex(a))
try:
cs = callers(a)
except Exception as e:
cs = "ERR %r" % e
print(" callers:", cs)
# NOSEASONS literal
print("=" * 70)
print("NOSEASONS literal search")
for lit in (b"NOSEASONS\x00", b"NOSEASONS"):
hits = find_all(lit)
print(" ", lit, "->", [hex(h) for h in hits])
# xrefs to the reported literal addr
print(" xrefs to 0x1801f92c0:")
for x in xrefs_to(0x1801f92c0):
print(" ", hex(x[0]), x[1], x[2], hex(x[3]))
# CompetitionManager singleton
print("=" * 70)
print("DAT_1802e6328 (CompetitionManager singleton) xrefs:")
for x in xrefs_to(0x1802e6328):
print(" ", hex(x[0]), x[1], x[2], hex(x[3]))
sys.stdout.flush()
os._exit(0)
except Exception:
traceback.print_exc()
sys.stdout.flush()
os._exit(0)