"""ADVERSARIAL VERIFY BATCH 5 -- attacking dim5 claim 5. dim5 claim 5: "model+0x20950 ... is read only through model vtable slot 0x4d8 (accessor 0x18011c200). Its THREE consumers render a notification badge (FUN_1800b1d00), a tab counter (FUN_1800aeb90), and a flow-state selector (FUN_1800af3a0). No HTTP request is originated on any of those paths." My independent objdump census of `call QWORD PTR [reg+0x4d8]` over the whole PE found NINE sites, and of `call [reg+0x4e0]` (the SETTER) found SIX: 0x4d8: 1800160c0 180019816 18007136b 18007e498 1800ad460 1800aeccf 1800aece6 1800af449 1800b1d48 0x4e0: 1800173d1 180019861 18007137b 1800ad498 1800bcb71 18013f222 Three of the 0x4d8 sites are immediately followed by a 0x4e0 site in the same function -- a read-modify-WRITE of the counter that dim5 did not mention. Resolve every containing function, and decompile the ones dim5 never examined. CONTROL: 0x18013f222 must resolve to the userInfo deser 0x18013ec10 and 0x1800173d1 to FUN_180017390 -- the two sites dim5 DID identify. Same method for all nine. """ import traceback try: S48 = [0x1800160c0, 0x180019816, 0x18007136b, 0x18007e498, 0x1800ad460, 0x1800aeccf, 0x1800aece6, 0x1800af449, 0x1800b1d48] S4E = [0x1800173d1, 0x180019861, 0x18007137b, 0x1800ad498, 0x1800bcb71, 0x18013f222] print("=== containing functions ===") news = [] for tag, lst in (("GET +0x4d8", S48), ("SET +0x4e0", S4E)): for a in lst: f = func(a) e = int(f.getEntryPoint().getOffset()) if f else 0 print(" %s %#x -> %s @ %#x" % (tag, a, f.getName() if f else "NONE", e)) if e and e not in news: news.append(e) KNOWN = {0x1800b1d00, 0x1800aeb90, 0x1800af3a0, 0x180017390, 0x18013ec10} todo = [e for e in news if e not in KNOWN] print("\nfunctions dim5 never examined: %s" % ", ".join("%#x" % e for e in todo)) for e in todo: s = dec(e) print("=" * 100) print("### DECOMPILE %#x len=%d" % (e, len(s))) print("=" * 100) print(s) print("### END %#x len=%d PRINTED IN FULL" % (e, len(s))) except Exception: traceback.print_exc()