Les images dans la partition logo sont des données brutes en pixels 32 bits, éventuellement bgra ou rgba, compressées avec zlib mais avec pas d'en-tête de compression .
Passez l'en-tête de 512 octets, et voici ce que vous voyez (le vôtre sera différent, ceci provient d'un téléphone BLU Dash X2).
00000200: 2700 0000 f929 1300 a400 0000 012e 0000 '....)..........
00000210: 3b36 0d00 05bb 0d00 4e07 0e00 4a09 0e00 ;6......N...J...
00000220: d709 0e00 b20b 0e00 060e 0e00 8f0f 0e00 ................
00000230: ac11 0e00 0814 0e00 3c15 0e00 d517 0e00 ........<.......
00000240: 451a 0e00 2b1d 0e00 d82b 0e00 763b 0e00 E...+....+..v;..
00000250: f84a 0e00 a959 0e00 4d67 0e00 3874 0e00 .J...Y..Mg..8t..
00000260: 1382 0e00 4f91 0e00 f6a0 0e00 6bb0 0e00 ....O.......k...
00000270: f90b 0f00 0068 0f00 bcc3 0f00 9b1c 1000 .....h..........
00000280: d573 1000 9cca 1000 6223 1100 647e 1100 .s......b#..d~..
00000290: c8da 1100 f536 1200 ae89 1200 658b 1200 .....6......e...
000002a0: 9cfc 1200 78da ecdd 3daf e458 42c7 e1fe ....x...=..XB...
Les nombres sont des entiers de 32 bits, et le premier à l'offset 0x200 est 0x27, ou 39, images dans la partition logo. 0x1329f9 est la longueur totale des données ; le reste de la partition sera probablement rempli de zéros. Les 39 entiers suivants sont les décalages de chaque image, par exemple la première est au décalage 0xa4, plus 0x200 pour tenir compte de l'en-tête, et vous avez 0x2a4. Vous pouvez donc voir les 12 premiers octets de données dans la sortie xxd ci-dessus, 0x78 0xda 0xec 0xdd...
La taille de l'image sera le décalage suivant moins "ce" décalage : dans ce cas, 0x2d01 - 0xa4 = 0x2d5d, ou 11613 décimal.
Vous avez maintenant ce dont vous avez besoin pour extraire la première image : dd if=/tmp/logo.bin of=/tmp/img1.z bs=1 skip=$((0x2a4)) count=11613
Pour le décompresser, puisqu'il n'a pas d'en-tête, vous devez en ajouter un : printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" | cat - /tmp/img1.z | gzip -dc >/tmp/img1.dat
.
Vous pouvez ensuite l'afficher en utilisant ImageMagick : display -size 360x$(($(stat -c %s /tmp/img1.dat)/$((360*4)))) rgba:/tmp/img1.dat
Les informations proviennent de rigacci.org . Niccolo inclut un script Python qui extrait toutes les images pour vous.