10.2. Splash partition¶
The splash partition (lun4/splash.bin, 32.6 MB, 8356 × 4 KB sectors)
is entirely 0x00 in this dump — empty by design. The boot and charging
imagery does not live in any flash partition; it is embedded in XBL
(xbl_a.bin), because XBL disables splash-partition loading as a security
measure.
10.2.1. Blank partition¶
Every one of splash.bin’s 8356 blocks is zero, verified three ways:
4 KB non-zero-block scan: 0 / 8356 non-zero.
cmpagainst an all-zero blob of identical size: identical.SHA256 = efd199079045…443d7a6eequals the SHA256 of a same-size zero blob and equals the value recorded in../_READONLY/SHA256SUMS. The dump is faithful; the partition is empty.
There is nothing to decode or extract from splash.bin — no header, no
image, no format.
The “Blank (all-0x00) partitions” list in
Partition map and checksums (keystore, catefv, cdt, fsc, storsec,
dip, toolsfv, catecontentfv) also includes splash. splash is grouped
separately only because its all-zero hash is unique to its size (32.6 MB) and
therefore not clustered with the shared 512 KB / 1 MB zero-hash groups.
10.2.2. Why it is blank: XBL disables splash-partition loading¶
XBL (xbl_a.bin) treats loading an image from the splash partition as an
attack surface and turns it off:
## NOTE: Enabling splash partition is a security risk ##
EnableSecurityHoleForSplashPartition = 0x0
With that flag 0, XBL never reads or paints from the splash partition,
so the OEM leaves it empty. The likely motive (general security reasoning
about the vendor’s intent, not a documented OEM statement) is that a
populated splash partition is generally a pre-auth image-parser attack
surface, and disabling it avoids parsing untrusted image data before
authentication — that inference is consistent with XBL’s own “security risk”
comment and the EnableSecurityHoleForSplashPartition flag name above, but
those two labels are as far as the OEM’s own documented reasoning goes; the
specific attack-surface mechanism above is this analysis’s inference from
them, not spelled out further anywhere in this dump.
10.2.3. Where the boot logo comes from: embedded in XBL¶
XBL references its logos as internal files, not the partition:
logo1.bmp logo2.bmp
MDPSystem: Display_Utils_GetContinuousSplashInfo failed.
/reserved-memory/splash_region
The images are stored inside the XBL DXE firmware volume and painted via the
MDP continuous splash path into the splash_region reserved memory, which
ABL then preserves and hands to the kernel (ABL strings: Backup the boot
logo blt buffer, Splash memory region before/after updating, Could not
get splash memory region node).
10.2.3.1. Extracted logos¶
Three 8-bpp (256-color palette) BMPs — palettized, e-ink/grayscale-friendly but retaining the Boox brand orange:
File |
Dimensions |
Content |
|---|---|---|
|
120×473 (portrait) |
BOOX wordmark (rotated 90° for panel orientation), with an orange accent on the “X” — the boot splash. |
|
480×520 |
Charger + battery + charging bolt (“connect charger” graphic). |
|
446×300 |
Battery + charging bolt + power symbol (low-battery / charging indicator). |
logo2/logo3 are the charging-screen graphics used by the XBL/charger
UI (QcomChargerApp, see Physical keys: power, volume, and the boot-mode dispatcher,
PMIC reset timers, charging and reachability); logo1 is the brand splash. All
three render on the color e-ink panel via the MDP framebuffer handed forward
through ABL.
10.2.4. A second boot-UI asset volume: imagefv_a¶
imagefv_a.bin (LUN4, 2 MB partition, 0x80000/512 KB payload) is a
separate signed firmware volume from XBL’s own embedded logos above —
its own MBN/ELF32 envelope (test-key cert chain, Secure boot and image signing)
wrapping a single data segment (entry 0, i.e. data, not code). The
payload is a UEFI Firmware Volume in its own right: it carries the _FVH
header with the standard EDK2 FFS2 GUID
(8c8ce578-8a3d-4f1c-9935-896185c32dd3) and FvLength 0x80000. It
holds one FIRMWARE_VOLUME_IMAGE FFS whose single LZMA-GUIDed section
decompresses (720 KB) to a nested FV of 9 ``FREEFORM`` files, each a
Windows BMP — a second, distinct boot-UI symbol set from the
xbl_logo{1,2,3} graphics above. By their VERSION strings:
Battery_symbol_Soc10, …_NoBattery, …_Nocharger, …_LowBattery,
…_LowBatteryCharging, …_DebugBoot, …_DebugStay, and
Sens_thermal_symbol / Sens_thermal_err_symbol — the battery /
charger / thermal glyphs XBL draws in charger-mode and low-battery/thermal
states. The DebugBoot/DebugStay glyphs pair with the boot-mode entry
in Physical keys: power, volume, and the boot-mode dispatcher. imagefv carries no executable DXE — it is a
signed image-asset volume only. The partition is 2 MB; the rest is pad.
Both volumes feed the same charger-mode UI, from separately signed sources.
10.2.5. Artifacts¶
../artifacts/splash/xbl_logo{1,2,3}.bmp(carved) and.png(converted) — the boot/charging logos.
10.2.6. Provenance¶
- Source:
../_READONLY/lun4/splash.bin(READ-ONLY);xbl_a.bin; decompressed XBL DXE FV (/tmp/boox_xbl/dxe_fv.bin). Extracted logos in../artifacts/splash/.- Method:
Zero-scan of
splash.bin(per-4 KB block +cmp+ SHA) confirmed blank; searchedxbl_a.binfor splash/logo strings (found the disable flag andlogoN.bmpnames); scanned the decompressed XBL DXE FV for BMP headers (magicBM, reserved==0, DIB∈{40}, sane W×H×bpp), carved 3,sipsto PNG.- Cross-refs:
Partition map and checksums (blank-partition list), Boot image: kernel, DTB, ramdisk, config, Physical keys: power, volume, and the boot-mode dispatcher, PMIC reset timers, charging and reachability.