Mac上的DMG文件从根本上来说,是一个disk image的container。它可以对数据进行了分块、压缩、加密等。
而刻录光盘用的".iso"或".img"文件,则和数据流直接对应。
DMG文件的末尾0x200个字节是一个简称为kylo的数据结构。这个结构中标明了一个plist文件内容的存储位置。通过这个plist文件的内容,可以知道具体数据块(data block)的位置。
- set schema {
- {a4 signature : "kylo"}
- {I version}
- {I hsize : "header length. 512 bytes"}
- {I flags}
- {W runningDataForkOffset}
- {W dataForkOffset}
- {W dataForkLength}
- {W rsrcForkOffset}
- {W rsrcForkLength}
- {I iSegment}
- {I nSegment}
- {a16 idSegment - "128-bit number like GUID, but seems not a OSF GUID"}
- {a136 dataForkChecksum -}
- {W xmlForkOffset : "plist File offset"}
- {W xmlForkLength}
- {a120 - - "reserved! Good for store data"}
- {a136 masterChecksum -}
- {I imgVariant}
- {I nSector}
- {I - - "reserved"}
- {I - - "reserved"}
- {I - - "reserved"}
- }
-
- set file "mac.dmg"
- hexdump::open $file
- set values [hexdump::struct $schema -0x200 end]
- hexdump::print_struct $schema $values
- hexdump::close
-