#!/usr/bin/env python3 """Scan for FIFA17 match-team records by the invariant header prefix. Anchors ONLY on (11,7,0,0,76) at +0x00..+0x10. Never filter on +0x18: it is a per-record marker whose value varies between sessions (-1 on 2026-08-24, 344065/344064 on 2026-08-25), and filtering on it produced a false negative. scan_mt.py [pid] """ import glob import os import re import struct import sys PAT = struct.pack("<5i", 11, 7, 0, 0, 76) def find_pid(): for d in glob.glob("/proc/[0-9]*"): try: if open(os.path.join(d, "comm")).read().strip() == "FIFA17.exe": return int(os.path.basename(d)) except OSError: pass return None pid = int(sys.argv[1]) if len(sys.argv) > 1 else find_pid() if not pid: print(" no FIFA17.exe") raise SystemExit(2) mem = open(f"/proc/{pid}/mem", "rb", 0) found = [] for line in open(f"/proc/{pid}/maps"): m = re.match(r"([0-9a-f]+)-([0-9a-f]+)\s+(\S{4})\s+\S+\s+\S+\s+\S+\s*(.*)", line) if not m or m.group(3)[0] != "r": continue lo, hi, path = int(m.group(1), 16), int(m.group(2), 16), m.group(4) if path.startswith(("/dev", "/memfd")) or hi - lo > 512 * 1024 * 1024: continue try: mem.seek(lo) buf = mem.read(hi - lo) except (OSError, ValueError, OverflowError): continue i = buf.find(PAT) while i >= 0: rec = buf[i:i + 0x80] if len(rec) >= 0x80: tid = struct.unpack_from("