From 7b295f44f8a4315895ed11c33fcb5037a4bbac55 Mon Sep 17 00:00:00 2001 From: SashegDev Date: Fri, 11 Sep 2026 08:15:45 +0000 Subject: [PATCH] ffu_extract: pick store by blkSize sanity --- tools/ffu_extract.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/tools/ffu_extract.py b/tools/ffu_extract.py index de01ec9..f49b47f 100644 --- a/tools/ffu_extract.py +++ b/tools/ffu_extract.py @@ -24,11 +24,20 @@ def load(ffu): sec = f.read(32) _, _, chunk_kb, _, cat, hsh = struct.unpack(" 0 - vals = struct.unpack("<11I", f[st + 204:st + 248]) - assert vals[0] == CHUNK, vals # blkSize sanity + # store header: ASCII PlatformId inside it; header starts 12B before. + # (manifest has one too — pick the occurrence with sane blkSize) + st = -1 + i = 0 + while True: + i = f.find(b"Microsoft.MSM", i) + if i < 0: + break + vals = struct.unpack("<11I", f[i - 12 + 204:i - 12 + 248]) + if vals[0] == CHUNK: + st = i - 12 + break + i += 1 + assert st > 0, "store header not found" wcnt = vals[1] pos = st + 248 disk = {} # diskchunk -> datachunk