#!/usr/bin/env python3 """ffu_parse.py — разбор FFU v1 (Lumia): security header, manifest, GPT, store. Использование: ./tools/ffu_parse.py fw/dl/XXX.ffu [--gpt] [--manifest] WIP: только чтение, без проверки подписей/hashtable. """ import struct import sys import uuid import mmap ACC = {0: "BEGIN", 1: "SEQ", 2: "END"} def guid_le(b): return str(uuid.UUID(bytes_le=b)) def parse(path): raw = open(path, "rb") f = mmap.mmap(raw.fileno(), 0, access=mmap.ACCESS_READ) sec = f.read(32) cb, sig, chunk_kb, alg, cat_sz, hash_sz = struct.unpack(" 0, "no valid GPT" assert gpt_off > 0, "no GPT" info["gpt_chunk"] = (gpt_off - hdr_size) // chunk hdr = bytes(f[gpt_off:gpt_off + 92]) assert hdr[:8] == b"EFI PART", "no GPT" nent, esz = struct.unpack("