Changes

Jump to navigation Jump to search
324 bytes added ,  12:06, 15 October 2011
→‎Partitions: more on dpfs and ivfc
Line 150: Line 150:  
'''DIFI'''
 
'''DIFI'''
   −
These 0x130 large blobs describe the partitions. Every DIFI blob describes a partition. In order to find the partitions, you will need the uint32_t at 0x9C into the DIFI block, and the uint32_t at 0xA4. The uint32_t at 0x9C describes the length of the hash table at the start of the partition, the uint32_t at 0xA4 is the length of the filesystem. Partitions are catted together, so after the end of one partition is the beginning of the next (on the next 0x1000 block).
+
These 0x130 large blobs describe the partitions. Every DIFI blob describes a partition. Partitions are catted together, so after the end of one partition is the beginning of the next.
    
Actually DIFI blobs are 0x12C large because the last 4 are not used and appear 0xFFFFFFFF at the encrypted image.
 
Actually DIFI blobs are 0x12C large because the last 4 are not used and appear 0xFFFFFFFF at the encrypted image.
   −
For most games there's only 1 partition (The SAVE partition) and some (like Asphalt 3D and Steel Diver) has 2 partitions.
+
For most games there's only 1 partition (The SAVE partition) and some (like Asphalt 3D, Steel Diver & Lego Star Wars III) has 2 partitions.
    
* 2 Partitions means that the files inside the SAVE partition is on the other partition (we would call it DATA partition).
 
* 2 Partitions means that the files inside the SAVE partition is on the other partition (we would call it DATA partition).
   −
* No more than 2 partitions have been seen yet.
+
* No more than 2 partitions have been seen yet (and can't be becuase of the DISA known structure).
    
{| class="wikitable"
 
{| class="wikitable"
Line 172: Line 172:  
| 0x04
 
| 0x04
 
| 4
 
| 4
| Unknown
+
| Magic Number (0x10000)
 
|-
 
|-
 
| 0x08
 
| 0x08
Line 192: Line 192:  
| 0x28
 
| 0x28
 
| 8
 
| 8
| Offset to the hashes in DIFI (usually 0x010C)
+
| Offset to the hash in DIFI (usually 0x010C)
 
|-
 
|-
 
| 0x30
 
| 0x30
 
| 8
 
| 8
| Size of this hashes
+
| Size of this hash
 
|-
 
|-
 
| 0x38
 
| 0x38
 
| 4
 
| 4
| Flags
+
| Flags (1 means DATA partition)
 
|-
 
|-
 
| 0x3C
 
| 0x3C
Line 220: Line 220:  
|-
 
|-
 
| 0x04
 
| 0x04
| 0x3C
+
| 4
| Unknown
+
| Magic Number (0x20000)
 +
|-
 +
| 0x08
 +
| 8
 +
| Unknown (0x20?)
 +
|-
 +
| 0x10
 +
| 8
 +
| First Hash Offset
 +
|-
 +
| 0x18
 +
| 8
 +
| First Hash Length
 +
|-
 +
| 0x20
 +
| 8
 +
| First Hash Block Size (1<<value)
 +
|-
 +
| 0x28
 +
| 8
 +
| Second Hash Offset
 +
|-
 +
| 0x30
 +
| 8
 +
| Second Hash Length
 +
|-
 +
| 0x38
 +
| 8
 +
| Second Hash Block Size (1<<value)
 
|-
 
|-
 
| 0x40
 
| 0x40
 
| 8
 
| 8
| Hash Table Offset
+
| HashTable Offset
 
|-
 
|-
 
| 0x48
 
| 0x48
 
| 8
 
| 8
| Hash Table Length
+
| HashTable Length
 
|-
 
|-
 
| 0x50
 
| 0x50
 
| 8
 
| 8
| Unknown (=12?)
+
| HashTable Block Size (1<<value)
 
|-
 
|-
 
| 0x58
 
| 0x58
Line 245: Line 273:  
| 0x68
 
| 0x68
 
| 8
 
| 8
| Hashed Block Length (1<<value)
+
| FileSystem Block Size (1<<value)
 
|-
 
|-
 
| 0x70
 
| 0x70
Line 252: Line 280:  
|-
 
|-
 
|}
 
|}
 +
 +
* First & Second hash are not understood yet.
    
'''DPFS'''
 
'''DPFS'''
Line 266: Line 296:  
|-
 
|-
 
| 0x04
 
| 0x04
| 0x3C
+
| 4
| Unknown
+
| Magic Number (0x10000)
 +
|-
 +
| 0x08
 +
| 8
 +
| Offset To First table
 +
|-
 +
| 0x10
 +
| 8
 +
| First table length
 +
|-
 +
| 0x18
 +
| 8
 +
| First table block size (1<<value)
 +
|-
 +
| 0x20
 +
| 8
 +
| Offset To Second table
 +
|-
 +
| 0x28
 +
| 8
 +
| Second table length
 +
|-
 +
| 0x30
 +
| 8
 +
| Second table block size (1<<value)
 +
|-
 +
| 0x38
 +
| 8
 +
| Offset to Data
 
|-
 
|-
 
| 0x40
 
| 0x40
 
| 8
 
| 8
| Offset To Next Partition (or to the end of this partiton)
+
| Data Length
 
|-
 
|-
 
| 0x48
 
| 0x48
 
| 8
 
| 8
| Unknown
+
| Data block size (1<<value)
 
|-
 
|-
 
|}
 
|}
   −
* The u64 at 0x40 is an offset because if you summarize the hashtable's length and the partition's length you'll get sometimes less then this value. so it isn't the length of the total partition but an offset.
+
* Every block this table point to is written twice (concatenated). You can see that the offset to the next block is twice the length (except the data which always begin after 0x1000).
   −
* Every partition is preceded by a 0x1000 block which has a 0x108 long block whose perpose is still unknown.
+
The first partition's data starts at 0x2000. First comes the hashtable (usually start @ 0x40 into the partition) and then the filesystem.
   −
The first partition starts at 0x2000. First comes the hashtable (usually start @ 0x40 into the partition) and then the filesystem.
+
The hashtable entries' size is 2^x where x is the 'Hashed block size' from the IVFC block.
   −
The hashtable entries' size is 2^x where x is the 'Hashed block size' from the IVFC block.
+
'''Hash'''
   −
* The first 0x40 bytes are still unknown (possibly hash of some kind).
+
After the DIFI,IVFC & DPFS comes a 0x20 long hash, it is unknown what it's hashing.
    
==== The SAVE file system ====
 
==== The SAVE file system ====
399

edits

Navigation menu