From 5230a2163f04f0ed612aa931642477b76dfe2e26 Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Tue, 18 Nov 2025 15:22:26 +0100 Subject: [PATCH] docs: bootstrap chapter on unpacking firmware Signed-off-by: Daniel Maslowski --- docs/SUMMARY.md | 1 + docs/analyze_unpack.drawio | 89 +++++++++++++++++++++++++++++++++++++ docs/analyze_unpack.png | Bin 0 -> 88276 bytes docs/unpacking.md | 50 +++++++++++++++++++++ 4 files changed, 140 insertions(+) create mode 100644 docs/analyze_unpack.drawio create mode 100644 docs/analyze_unpack.png create mode 100644 docs/unpacking.md diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 2918b08..e71799f 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -3,3 +3,4 @@ - [Intel platforms](platforms.md) - [Knowledge on Firmware Images](knowledge.md) - [Obtaining firmware images](images.md) + - [Unpacking firmware](unpacking.md) diff --git a/docs/analyze_unpack.drawio b/docs/analyze_unpack.drawio new file mode 100644 index 0000000..f9f796a --- /dev/null +++ b/docs/analyze_unpack.drawio @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/analyze_unpack.png b/docs/analyze_unpack.png new file mode 100644 index 0000000000000000000000000000000000000000..0205b78cdc167be231f00f40631a0f3d3188efa4 GIT binary patch literal 88276 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 literal 0 HcmV?d00001 diff --git a/docs/unpacking.md b/docs/unpacking.md new file mode 100644 index 0000000..7ab5899 --- /dev/null +++ b/docs/unpacking.md @@ -0,0 +1,50 @@ +# Unpacking Firmware + +Firmware images are typically packed and consist of various pieces henceforth +called _components_. In different places, they may be called more specific +terms, such as partitions, directories, modules, files, etc. + +Many components are _containers_, which in turn are comprised of other things. +As it happens over time, a firmware image for a platform of today may look very +different from one meant for a platform from the past. It may be, however, that +the target platform cannot be recognized right away, making analysis harder. +Such is the case for Intel. We thus need an [architecture](./architecture.md) +that is able to distinguish at any given level and allows for extraction. + +## Partitions + +The following diagram is a generic example of a partitioned firmware image with +a container that may be of either one or another kind. +And in turn, it would contain one or another kind of entries. + +![](./analyze_unpack.png) + +In Rust, we can use `enum` types to express this: + +```rs +enum Container { + AContainer(Vec), + BContainer(Vec), +} +``` + +## Intel ME Generation 3 + +With the third hardware generation of Intel ME based platforms, a new operating +system was introduced, based on MINIX 3. It needs bootstrapping first. + +There are multiple kinds of partitions, including Code Partition Directory (CPD) +partitions. Those contain executables, their corresponding metadata files, and a +manifest that holds a signature over the manifest. + +The signed data in the manifest includes hashes of the metadata files and other +things, so that the manifest suffices to verify the entire CPD's integrity. +Each metadata file contains the counterpart binary's hash. +The binaries themselves are mostly compressed, commonly using LZMA and a few via +Huffman encoding. + +Knowledge on CPDs, manifests, metadata and binaries can be found in PT Research +utilities for unpacking: + +- +-