Search Archive

Extract and Repackage Image.img

By rope · Mar 21, 2012in Hacks/Mods💬 9 posts👁️ 5,137 views
Posted Mar 21, 2012 · 11:00 UTC#1

I developed a little java program which is able to extract all bmp files from my image.img located in the firmware folder AVICZ110\APL\MENU\.

 

Usage:

 

java -jar xtractor.jar

 

It generates a folder/file structure like this:

 


OutputFolder
|
|- 2M
|   |- 007_2M_AV-001.bmp
|   |- 007_2M_AV-001.bmp
|   |- 007_2M_AV-002.bmp
|   |- ...
|- 32k
|   |- 007_32K_AV-001.bmp
|   |- 007_32K_AV-002.bmp
|   |- 007_32K_AV-003.bmp
|   |- ...
|- pOver
|   |- 2M
|   |   |- 007_2M_OM-001.bmp
|   |   |- 007_2M_OM-002.bmp
|   |   |- 007_2M_OM-003.bmp
|   |   |- ...
|   |- 32K
|   |- GZ

 

Tested with Image.img from this firmware for my F9220BT:

 

Product		: AVICZ110
Release File	: APL
Release Version : 3.001000
Release Machine : BUILDL09

 

 

Only extracting is supported in this version. I'll implement repackaging of modified bmp's in the next version

and release the source code when all stuff is finished.

 

Would be great if somebody could test it with other firmwares/devices and let me know if it worked.

xtractor.zip

Edited Mar 21, 2012 by rope
Posted Mar 25, 2012 · 11:02 UTC#2

Thanks for writing this up. Any idea what's up with the block at the top of the file? Could it be a signature?

 

Also, confirmed working on X930BT image. Updated my thread with a link to your tool.

Edited Mar 25, 2012 by sebastian32
Posted Mar 25, 2012 · 18:58 UTC#3

This is the complete file format spec, as far as i understood it:

 

Image File Format

* ----------+----------------------------+-----------
*  Position |	Field			 |   Size
* ----------+----------------------------+-----------
*     0     | Header Record (F1 only)	 | 40 bytes
*     0     | Header Record (F2 only)	 | 48 bytes
* ----------+----------------------------+-----------
* variable  | GZH Record (Gzip Header)   | 12 bytes
* variable  | GZH Record (Gzip Header)   | 12 bytes
* variable  | GZH Record (Gzip Header)   | 12 bytes
* ...       | ...			 | ...
* ----------+----------------------------+-----------
* variable  | GZF Record (Gzip File)	 | variable
* variable  | GZF Record (Gzip File)	 | variable
* variable  | GZF Record (Gzip File)	 | variable
* ...       | ...			 | ...
* ----------+----------------------------+-----------
* variable  | Directory Record		 | variable
* variable  | Directory Record		 | variable
* variable  | Directory Record		 | variable
* ...	    | ...			 | ...
* ----------+----------------------------+-----------

 

Header Record

* ----------+----------------------------+-----------+------------------------
*  Position |	  Field		         |   Size    |   Example Value
* ----------+----------------------------+-----------+------------------------
*     0     | Magic Bytes (F1 only)      | 4 bytes   | F1 F1 F1 F1
*     0	    | Magic Bytes(F2 only)	 | 4 bytes   | F2 F2 F2 F2
* ----------+----------------------------+-----------+------------------------
*     4	    | Number of files	 	 | 4 bytes   | 74 0C 00 00
* ----------+----------------------------+-----------+------------------------
*     8	    | Header Size (F1 only)	 | 4 bytes   | 28 00 00 00
*     8	    | Header Size (F2 only)	 | 4 bytes   | 30 00 00 00
* ----------+----------------------------+-----------+------------------------
*    12	    | ? Unknown ?		 | 4 bytes   | 00 00 00 00
*    16	    | ? Unknown ? (F2 only)	 | 4 bytes   | 30 00 00 00
*    20     | ? Unknown ? (F2 only)	 | 4 bytes   | 00 00 00 00
* ----------+----------------------------+-----------+------------------------
*  var	    | GZH Block Offset		 | 4 bytes   | 30 00 00 00
*  var	    | GZH Block Size		 | 4 bytes   | 70 95 00 00
* ----------+----------------------------+-----------+------------------------
*  var	    | GZF Block Offset		 | 4 bytes   | A0 95 00 00
*  var	    | GZF Block Size		 | 4 bytes   | 62 E6 83 00
* ----------+----------------------------+-----------+------------------------
*  var	    | Directory Block Offset	 | 4 bytes   | 02 C7 84 00
*  var	    | Directory Block Size	 | 4 bytes   | E5 5D 01 00
* ----------+----------------------------+-----------+------------------------

 

Gzip Header Record

* ----------+----------------------------+-----------+---------------
*  Position |	  Field	   		 |   Size    | Example Value
* ----------+----------------------------+-----------+---------------
*     0	    | GZF Record Offset          | 4 bytes   | 80 68 00 00
*     4	    | GZip Filesize	         | 4 bytes   | 75 00 00 00
*     8     | Unzipped BMP Filesize      | 4 bytes   | 84 02 00 00
* ----------+----------------------------+-----------+---------------

 

GZIP File Record

* ----------+----------------------------+-----------+-----------
* Position  |	  Field			 |   Size    |  Value
* ----------+----------------------------+-----------+-----------
*    0	    | Magic Bytes (gzip)	 | 3 bytes   | 1F 8B 08
*    3	    | Rest of gzip data		 | variable  |
*/

 

Directory Record

* ----------+----------------------------+-----------+---------+---------------------------
*  Position |	  Field			 |   Size    |  Style  |   Example Value(s)
* ----------+----------------------------+-----------+---------+---------------------------
*      0    | Type1			 | variable  |  ASCII  | "pOver", "vi", ""
*     var   | Delimiter			 | 1 byte    |   HEX   | 5C
*     var   | Type2			 | 2 bytes   |  ASCII  | "2M", "32K", "GZ"
*     var   | Delimiter			 | 1 byte    |   HEX   | 5C
*     var   | Filename			 | variable  |  ASCII  | "007_2M_OM-151.bmp"
*     var   | Delimiter			 | 1 byte    |   HEX   | 00
* ----------+----------------------------+-----------+---------+---------------------------

Edited Mar 25, 2012 by rope
Posted Mar 25, 2012 · 20:56 UTC#4

I implemented repacking and tried to recreate the image file from the extracted bitmaps. It works so far. But the generated gzip data is different:

 

Original GZip Data Bytes:

00000000h: 1F 8B 08 00 00 00 00 00 00 00 95 91 31 0E 80 20
00000010h: 10 04 6F B4 31 B1 B3 F2 09 BE 83 DE 5F F9 68 3A
00000020h: 04 4F 1B D9 90 DC 26 DB CC 14 84 DB 74 5E 93 3D
00000030h: 49 B5 47 ED FE 16 5B 9C 57 BF AD DE D9 BC 2D 39
00000040h: 67 2B A5 18 98 0C 68 03 DA 80 36 A0 0D 68 03 DA
00000050h: 80 36 7F FE 99 9E BB 51 BC 19 CD A3 89 BC 1B F9
00000060h: 57 E4 6E 91 5D BA 19 07 BB 2B DA 72 03 69 D7 60
00000070h: E1 84 02 00 00

 

Recreated Gzip Data Bytes:

00000000h: 1F 8B 08 00 00 00 00 00 00 00 95 92 21 0E 80 30 
00000010h: 10 04 77 C0 90 E0 50 3C 81 77 D4 F3 2B 1E 5D 57
00000020h: 5A 0A 06 16 71 9B AC 99 11 CD DD 35 ED C7 A0 2B
00000030h: A9 76 AB 5D EF A2 A9 F3 EA 97 B9 77 54 6F 4B CE
00000040h: 59 A5 14 81 6C C0 1B F0 06 BC 01 6F C0 1B F0 06
00000050h: BC 79 F3 C7 7C 79 37 8E 37 E3 79 34 91 77 23 73
00000060h: 45 F6 16 B9 8B BF E3 97 EA F7 9F 48 27 69 D7 60 
00000070h: E1 84 02 00 00

 

I tried various libraries and compression levels but the filesize or the resulting binaries have always been different from the original ones. Maybe the pioneer firmware doesn't complain about this, but i would prefer generating the files as close as possible to the original.

 

So i'll keep trying ...

Posted Mar 26, 2012 · 05:45 UTC#5

I implemented repacking and tried to recreate the image file from the extracted bitmaps.

 

I've been trying to simply edit a bitmap and save it with the same settings as the original, but neither Paint nor GIMP are doing very well with it so far. Just opening the file, and resaving it over itself, changes the file's size.

 

I tried various libraries and compression levels but the filesize or the resulting binaries have always been different from the original ones. Maybe the pioneer firmware doesn't complain about this, but i would prefer generating the files as close as possible to the original.

 

So i'll keep trying ...

Have you tried repackaging the image file then reloading it onto a deck?

 

Something else that's odd: I ran Image.img through TrID, and it's being identified as "Lumena Paint Bitmap" (.CEL). Curiously enough, .cel files can handle multi-page bitmaps (several bitmaps per file). Unfortunately, Lumena is impossible to find, because it seems to have been an old win3.1 program. I tried a couple converters that claimed they could covert .cel files, but they failed.

Edited Mar 26, 2012 by sebastian32
Posted Apr 23, 2012 · 19:40 UTC#6

Works for Z120BT

 

2885 files extracted.

Posted Oct 22, 2012 · 07:50 UTC#7

Hi, I have a F9220BT, and wanted to draw and edit image files.

I downloaded the application that are above, but do not know how it runs.

The downloaded on my PC, I double-click on and does nothing.

 

As I can do to make it work?

 

thanks

Posted Jun 17, 2014 · 18:03 UTC#8

Too bad rope didn't follow up on his work here.  I would like to change some of the icons.

Posted Jun 14, 2018 · 08:18 UTC#9

I'm sorry that the topic died! ... :(:(:(