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

48 lines
1.9 KiB
Python

"""DIMENSION 3 SEASONS q8 (final): confirm the SeasonList deser is the SOLE populator
of the season-list vector by enumerating every call [reg+0x898] site; confirm
FUN_180174630 is the massinfo body handler; resolve atom names for the season keys.
"""
import traceback, struct
try:
print("### all call [reg+0x898] sites (season-vector consumers) ###")
for modrm in range(0x90, 0x98):
pat = bytes([0xff, modrm]) + struct.pack("<i", 0x898)
for h in find_all(pat, blocks=(".text",)):
f = fm.getFunctionContaining(addr(h))
print(" ", hex(h), "in", f.getName() if f else "?")
print("\n### FUN_180174630 identity: does it parse the massinfo body? head ###")
d = dec(0x180174630)
print("LEN", len(d))
# print the first 1500 chars to see the member dispatch + userInfo/settings/season calls
print(d[:1800])
print("\n### resolve atom names via fut_atoms.tsv ###")
import os as _os
tsv = "/home/alex/Documents/OpenFUT/fifa17-recon/docs/fut_atoms.tsv"
want = {0x2ad,0x354,0x35e,0x24b,0x27b,0xdd,0xdc,0x253,0x1b8,0x330,0x11c,0x2d4}
try:
with open(tsv) as f:
for line in f:
parts = line.rstrip("\n").split("\t")
if len(parts) >= 2:
try:
v = int(parts[0], 0)
except ValueError:
try:
v = int(parts[1], 0)
except (ValueError, IndexError):
continue
parts = [parts[1], parts[0]] + parts[2:]
if v in want:
print(" ", hex(v), parts[1] if len(parts) > 1 else parts)
except Exception as e:
print(" tsv err", e)
sys.stdout.flush()
os._exit(0)
except Exception:
traceback.print_exc()
sys.stdout.flush()
os._exit(0)