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