From e2c18ee70b2cb7854c612270e98d60c0631bc341 Mon Sep 17 00:00:00 2001 From: SDD Date: Sun, 18 Oct 2026 17:06:12 +0300 Subject: [PATCH] dwt: NVRAM dump over rdebug (settings block) and LANCE address ROM read; both match the model --- dwt/evidence/real-unit-nvram-raw.bin | Bin 0 -> 4096 bytes dwt/evidence/real-unit-nvram-settings.bin | Bin 0 -> 2048 bytes dwt/notes/REAL_UNIT.md | 31 ++++++++ dwt/nvram_dump.py | 90 ++++++++++++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 dwt/evidence/real-unit-nvram-raw.bin create mode 100644 dwt/evidence/real-unit-nvram-settings.bin create mode 100644 dwt/nvram_dump.py diff --git a/dwt/evidence/real-unit-nvram-raw.bin b/dwt/evidence/real-unit-nvram-raw.bin new file mode 100644 index 0000000000000000000000000000000000000000..7a150538d015a003b063d2a000d8c69f76668e0a GIT binary patch literal 4096 zcmeHKJ5Iwu5ZySDphOfDsUlGm5r^=Jkfzgt?aX@q-hK9-p(#&tjAf{Ry6B3MTj}9mUSxnpN(y(dsa3@S zER;||nfg_7&zxVmc7>9ZskcJ;0~N8!&q_K*?n&jog8aXOqJr-_@IKGGvw?L|9eQqZ z_W4O`ZeWY3SLe`{E&91xf?Zc7Yz7I!kq%YS}mrGd_chHkl zITwerL*jqI4}9g*=k;3_`qYO*8N7!BHZh?^9dFJeD>HsO7C(!Krq5*jG&Qp3lkhw1 zm~sEs7v>-00G)q~|9*b{_s-m(8)#z_JAayebU%&D@xDh_%zE^>^UkI|mr>1RxdR6- zTw>S-(aW6zzm`Uk9(nIkyz_XH8r_U^#0TtRFUZBB#x!(-BkZF_ {a.out}") + if a.raw: + with open(a.raw, "wb") as fh: + fh.write(raw) + print(f"[+] raw copy -> {a.raw}") + + # Known landmarks from the NVRAM report and the unit's settings. + for needle in (b"ROM", b"100.103", b"LAT_", b"DECW$FONT", b"192.168", b":69"): + idx = settings.find(needle) + if idx >= 0: + print(f" {needle!r} at settings offset 0x{idx:03x}") + + # Printable ASCII runs, useful for reading the settings block. + runs, cur = [], bytearray() + for i, b in enumerate(settings): + if 32 <= b < 127: + cur.append(b) + else: + if len(cur) >= 3: + runs.append((i - len(cur), bytes(cur))) + cur.clear() + if len(cur) >= 3: + runs.append((len(settings) - len(cur), bytes(cur))) + print(f"[+] {len(runs)} printable runs:") + for off, s in runs[:80]: + print(f" 0x{off:03x} {s.decode('latin-1')}") + return 0 + + +if __name__ == "__main__": + try: + sys.exit(main(sys.argv)) + except (exploit.ProtocolError, OSError) as exc: + print(f"error: {exc}", file=sys.stderr) + sys.exit(1)