#!/usr/bin/env python3 """Reassemble a mission egg from a captured console->pod TCP stream. Input: a hex dump of the concatenated console->pod TCP payloads, e.g. tshark -r cap.pcapng -Y 'ip.src== && tcp.len>0' \ -T fields -e tcp.payload | tr -d '\n' > c2p.hex The console delivers the mission as a series of ReceiveEggFileMessage packets (decoded from CODE/RP/MUNGA/NETWORK.HPP, wire is little-endian): NetworkPacketHeader (16B) + Receiver::Message hdr (12B: messageLength@+16, messageID@+20, flags@+24) + [egg body when messageLength==1024: sequenceNumber, notationFileLength, thisMessageLength, notationData[1000]]. StateQuery packets (messageLength=16) are interleaved and skipped. Usage: python decode_egg.py c2p.hex out.egg """ import sys, struct data = bytes.fromhex(open(sys.argv[1]).read()) out = sys.argv[2] if len(sys.argv) > 2 else "reassembled.egg" i, chunks, total = 0, {}, None while i + 28 <= len(data): mlen, mid = struct.unpack(" 4000: break pkt = data[i:i+16+mlen] if len(pkt) < 16 + mlen: break if mlen == 1024: # ReceiveEggFileMessage seq, flen, tlen = struct.unpack("= total} -> {out}")