Difference between revisions of "IMG3 File Format"

From The iPhone Wiki
Jump to: navigation, search
m (Minor wording change.)
(moving explanation to top)
Line 1: Line 1:
This is the replacement for the [[S5L File Formats#IMG2|IMG2 file format]] for iOS 2.0 and onward. iOS 7.0.1 introduced the [[IM4P File Format]] and the [[IMG4 File Format]] for [[A7]] and newer devices.
+
The '''IMG3 File Format''' is the replacement for the [[S5L File Formats#IMG2|IMG2 file format]] for iOS 2.0 and onward. iOS 7.0.1 introduced the [[IM4P File Format]] and the [[IMG4 File Format]] for [[A7]] and newer devices.
  +
  +
==Encryption==
  +
Apple got smarter this time, requiring the Hardware AES engine to be run per file. Decrypt the [[KBAG]] tag data with the [[GID Key]] to get the key and IV, and use those to decrypt the [[DATA]] section of the firmware file.
  +
  +
In the current method, iBoot will always use the first 16 bytes of the [[KBAG]] as the IV, then the remaining 16 (aes-128, used with [[S5L8900]] and [[S5L8720]]), 24 (aes-192), or 32 (aes-256, used with [[S5L8920]]) bytes for the key.
   
 
==Header==
 
==Header==
Line 42: Line 47:
 
Decryption is done using the modulus at cert + 0xA15
 
Decryption is done using the modulus at cert + 0xA15
 
0xC to [[SHSH]] is SHAed
 
0xC to [[SHSH]] is SHAed
 
==Encryption==
 
Apple got smarter this time, requiring the Hardware AES engine to be run per file. Decrypt the [[KBAG]] tag data with the [[GID Key]] to get the key and IV, and use those to decrypt the [[DATA]] section of the firmware file.
 
 
In the current method, iBoot will always use the first 16 bytes of the [[KBAG]] as the IV, then the remaining 16 (aes-128, used with [[S5L8900]] and [[S5L8720]]), 24 (aes-192), or 32 (aes-256, used with [[S5L8920]]) bytes for the key.
 
   
 
[[Category:File Formats]]
 
[[Category:File Formats]]

Revision as of 09:15, 10 March 2015

The IMG3 File Format is the replacement for the IMG2 file format for iOS 2.0 and onward. iOS 7.0.1 introduced the IM4P File Format and the IMG4 File Format for A7 and newer devices.

Encryption

Apple got smarter this time, requiring the Hardware AES engine to be run per file. Decrypt the KBAG tag data with the GID Key to get the key and IV, and use those to decrypt the DATA section of the firmware file.

In the current method, iBoot will always use the first 16 bytes of the KBAG as the IV, then the remaining 16 (aes-128, used with S5L8900 and S5L8720), 24 (aes-192), or 32 (aes-256, used with S5L8920) bytes for the key.

Header

typedef struct Img3_t {
    uint32_t magic;       // ASCII_LITTLE_ENDIAN("Img3")
    uint32_t fullSize;    // full size of fw image
    uint32_t sizeNoPack;  // size of fw image without header
    uint32_t sigCheckArea;// although that is just my name for it, this is the
                          // size of the start of the data section (the code) up to
                          // the start of the RSA signature (SHSH section)
    uint32_t iden;        // identifier of image, used when bootrom is parsing images
                          // list to find LLB (illb), LLB parsing it to find iBoot (ibot),
                          // etc.
    Img3Tag_t tags[];     // continues until end of file
};

Tag Format

typedef struct Img3Tag_t {
    uint32_t magic;             // see below
    uint32_t total_length;      // length of tag including "magic"
                                // and these two length values
    uint32_t data_length;       // length of tag data
    uint8_t  data[data_length];
    uint8_t  pad[total_length - data_length - 12]; // padding
};

Tags

VERS: iBoot version of the image
SEPO: Security Epoch
SDOM: Security Domain
PROD: Production Mode
CHIP: Chip to be used with. example: "0x8900" for S5L8900.
BORD: Board to be used with
KBAG: contains the KEY and IV required to decrypt encrypted with the GID Key
SHSH: RSA encrypted SHA1 hash of the file
CERT: Certificate
ECID: Exclusive Chip ID unique to every device with iPhone OS.
TYPE: Type of image, should contain the same string as 'iden' of the header
DATA: Real content of the file

Signature Check

Decryption is done using the modulus at cert + 0xA15
0xC to SHSH is SHAed