Jump to content
AVIC411.com

rope

Members
  • Content Count

    4
  • Joined

  • Last visited

Posts posted by rope

  1. 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 ...

  2. 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
    * ----------+----------------------------+-----------+---------+---------------------------
    

  3. 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

×
×
  • Create New...