dmgutil

package
v0.0.0-...-fd57926 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 28, 2025 License: MIT Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// Magic signatures
	HFSPlusMagic = "H+"
	HFSXMagic    = "HX"

	// Block sizes
	DefaultBlockSize = 4096

	// File types
	HFSPlusFileType     = 0x0000 // Regular file
	HFSPlusFolderType   = 0x0001 // Directory
	HFSPlusAliasType    = 0x0002 // Alias/Symbolic link
	HFSPlusHardLinkType = 0x0003 // Hard link

	// Special file IDs
	HFSRootFolderID        = 2
	HFSRootParentFolderID  = 1
	HFSExtentsFileID       = 3
	HFSCatalogFileID       = 4
	HFSBadBlockFileID      = 5
	HFSAllocationFileID    = 6
	HFSStartupFileID       = 7
	HFSAttributesFileID    = 8
	HFSRepairCatalogFileID = 14
	HFSBogusExtentFileID   = 15
	HFSFirstUserCatalogID  = 16
)

HFS+ file system constants

Variables

This section is empty.

Functions

This section is empty.

Types

type BLKXChunkEntry

type BLKXChunkEntry struct {
	EntryType        uint32
	Comment          uint32
	SectorNumber     uint64
	SectorCount      uint64
	CompressedOffset uint64
	CompressedLength uint64
}

BLKXChunkEntry represents one chunk in a blkx table

type DMGPartition

type DMGPartition struct {
	Name       string
	ID         string
	Attributes string
	BlkxData   []byte
	MishHeader MishHeader
	Chunks     []BLKXChunkEntry
}

DMGPartition represents a partition in the DMG

type DMGReader

type DMGReader struct {
	// contains filtered or unexported fields
}

DMGReader represents a DMG file reader

func NewDMGReader

func NewDMGReader(filename string, verbose bool) (*DMGReader, error)

NewDMGReader creates a new DMG reader

func (*DMGReader) Close

func (r *DMGReader) Close() error

Close closes the DMG reader

func (*DMGReader) ExtractAllPartitions

func (r *DMGReader) ExtractAllPartitions(outputDir string) error

ExtractAllPartitions extracts all partitions to the specified output directory

func (*DMGReader) ExtractFile

func (r *DMGReader) ExtractFile(partitionIndex int, filePath, outputPath string) error

ExtractFile extracts a specific file from an HFS+ partition Note: This is a placeholder as HFS+ parsing would require additional implementation

func (*DMGReader) ExtractPartition

func (r *DMGReader) ExtractPartition(partitionIndex int, outputPath string) error

ExtractPartition extracts a partition to the specified output file

func (*DMGReader) GetCompressedSize

func (r *DMGReader) GetCompressedSize() uint64

GetCompressedSize returns the total compressed size of all partitions

func (*DMGReader) GetPartitions

func (r *DMGReader) GetPartitions() []DMGPartition

GetPartitions returns the partitions in the DMG

func (*DMGReader) GetUncompressedSize

func (r *DMGReader) GetUncompressedSize() uint64

GetUncompressedSize returns the total uncompressed size of all partitions

func (*DMGReader) ListPartitions

func (r *DMGReader) ListPartitions()

ListPartitions lists all partitions in the DMG

func (*DMGReader) MountPartition

func (r *DMGReader) MountPartition(partitionIndex int) (string, error)

MountPartition extracts a partition to a temporary location and returns the path This is useful for accessing the partition content without writing to disk permanently

func (*DMGReader) PrintInfo

func (r *DMGReader) PrintInfo()

PrintInfo prints detailed information about the DMG

type DirectoryEntry

type DirectoryEntry struct {
	ID             uint32
	Name           string
	IsDirectory    bool
	DataLength     uint64
	ResourceLength uint64
	CreateDate     time.Time
	ModifyDate     time.Time
	DataFork       HFSPlusForkData
	ResourceFork   HFSPlusForkData
}

DirectoryEntry represents a file or directory in the HFS+ volume

type HFSPlusBTHeaderRecord

type HFSPlusBTHeaderRecord struct {
	TreeDepth     uint16     // Current depth of the tree
	RootNode      uint32     // Node number of root node
	LeafRecords   uint32     // Number of leaf records in the tree
	FirstLeafNode uint32     // Node number of first leaf node
	LastLeafNode  uint32     // Node number of last leaf node
	NodeSize      uint16     // Size of a node in bytes
	MaxKeyLength  uint16     // Maximum length of a key
	TotalNodes    uint32     // Total number of nodes in the tree
	FreeNodes     uint32     // Number of free nodes
	Reserved1     uint16     // Reserved - initialized as zero
	ClumpSize     uint32     // Clump size
	BTreeType     uint8      // 0 for normal B-tree, 1 for index file
	Reserved2     uint8      // Reserved - initialized as zero
	Attributes    uint32     // Attributes of the B-tree
	Reserved3     [16]uint32 // Reserved - initialized as zero
}

HFSPlusBTHeaderRecord represents a B-tree header record

type HFSPlusBTNodeDescriptor

type HFSPlusBTNodeDescriptor struct {
	ForwardLink uint32 // Node number of next node
	BackLink    uint32 // Node number of previous node
	Kind        int16  // Kind of node (leaf, index, header, or map)
	Height      uint8  // Height from leaf (0 for leaf)
	NumRecords  uint16 // Number of records in this node
	Reserved    uint16 // Reserved - initialized as zero
}

HFSPlusBTNodeDescriptor represents a B-tree node descriptor

type HFSPlusCatalogFile

type HFSPlusCatalogFile struct {
	RecordType       uint16               // Record type (file)
	Flags            uint16               // File flags
	Reserved1        uint32               // Reserved - initialized as zero
	FileID           uint32               // The unique file ID
	CreateDate       uint32               // Date and time of creation
	ContentModDate   uint32               // Date and time of last content modification
	AttributeModDate uint32               // Date and time of last attribute modification
	AccessDate       uint32               // Date and time of last access
	BackupDate       uint32               // Date and time of last backup
	Permissions      HFSPlusPermissions   // BSD permissions
	UserInfo         HFSPlusFileInfo      // Finder information
	FinderInfo       HFSPlusFileExtraInfo // More Finder information
	TextEncoding     uint32               // Text encoding hint
	Reserved2        uint32               // Reserved - initialized as zero
	DataFork         HFSPlusForkData      // Data fork
	ResourceFork     HFSPlusForkData      // Resource fork
}

HFSPlusCatalogFile represents a file record in the catalog file

type HFSPlusCatalogFolder

type HFSPlusCatalogFolder struct {
	RecordType       uint16                 // Record type (folder)
	Flags            uint16                 // Folder flags
	Valence          uint32                 // Number of files and folders in this folder
	FolderID         uint32                 // The unique folder ID
	CreateDate       uint32                 // Date and time of creation
	ContentModDate   uint32                 // Date and time of last content modification
	AttributeModDate uint32                 // Date and time of last attribute modification
	AccessDate       uint32                 // Date and time of last access
	BackupDate       uint32                 // Date and time of last backup
	Permissions      HFSPlusPermissions     // BSD permissions
	UserInfo         HFSPlusFolderInfo      // Finder information
	FinderInfo       HFSPlusFolderExtraInfo // More Finder information
	TextEncoding     uint32                 // Text encoding hint for filenames
	Reserved         uint32                 // Reserved - initialized as zero
}

HFSPlusCatalogFolder represents a folder record in the catalog file

type HFSPlusCatalogKey

type HFSPlusCatalogKey struct {
	KeyLength      uint16
	ParentID       uint32
	NodeNameLength uint16
	NodeName       []uint16 // Unicode string
}

HFSPlusCatalogKey is the key for catalog B-tree nodes

type HFSPlusExtentDescriptor

type HFSPlusExtentDescriptor struct {
	StartBlock uint32 // First allocation block
	BlockCount uint32 // Number of allocation blocks
}

HFSPlusExtentDescriptor describes the physical location of a contiguous chunk of blocks

type HFSPlusFileExtraInfo

type HFSPlusFileExtraInfo struct {
	Reserved1           [4]byte
	ExtendedFinderFlags uint16
	Reserved2           uint16
	PutAwayFolderID     uint32
}

type HFSPlusFileInfo

type HFSPlusFileInfo struct {
	FileType    [4]byte
	FileCreator [4]byte
	FinderFlags uint16
	Location    [4]byte
	Reserved1   uint16
}

type HFSPlusFolderExtraInfo

type HFSPlusFolderExtraInfo struct {
	Reserved1           [4]byte
	ExtendedFinderFlags uint16
	Reserved2           uint16
	PutAwayFolderID     uint32
}

type HFSPlusFolderInfo

type HFSPlusFolderInfo struct {
	WindowBounds [8]byte
	Reserved1    uint16
	Flags        uint16
	Location     [4]byte
	Reserved2    uint16
}

Placeholder structs for Finder information

type HFSPlusForkData

type HFSPlusForkData struct {
	LogicalSize uint64                     // Fork's logical size in bytes
	ClumpSize   uint32                     // Fork's clump size in bytes
	TotalBlocks uint32                     // Total blocks used by this fork
	Extents     [8]HFSPlusExtentDescriptor // Initial set of extents
}

HFSPlusForkData represents the on-disk location of a fork

type HFSPlusParser

type HFSPlusParser struct {
	// contains filtered or unexported fields
}

HFSPlusParser represents a parser for HFS+ file systems

func NewHFSPlusParser

func NewHFSPlusParser(partitionPath string) (*HFSPlusParser, error)

NewHFSPlusParser creates a new HFS+ parser from an extracted partition

func (*HFSPlusParser) Close

func (p *HFSPlusParser) Close() error

Close closes the HFS+ parser

func (*HFSPlusParser) ExtractFile

func (p *HFSPlusParser) ExtractFile(filePath string, outputPath string) error

ExtractFile extracts a file from the HFS+ volume

func (*HFSPlusParser) ExtractFileToReader

func (p *HFSPlusParser) ExtractFileToReader(filePath string) (io.ReadCloser, error)

ExtractFileToReader extracts a file and returns a reader for its content

func (*HFSPlusParser) ListFiles

func (p *HFSPlusParser) ListFiles(rootPath string) ([]string, error)

ListFiles lists all files in the HFS+ volume

type HFSPlusPermissions

type HFSPlusPermissions struct {
	OwnerID     uint32
	GroupID     uint32
	Permissions uint32
	Special     [4]byte
}

type HFSPlusVolumeHeader

type HFSPlusVolumeHeader struct {
	Signature          [2]byte  // "H+" for HFS+, "HX" for HFSX
	Version            uint16   // Current version is 4 for HFS+
	Attributes         uint32   // Volume attributes
	LastMountedVersion uint32   // Implementation version that last mounted this volume
	JournalInfoBlock   uint32   // Journal info block (0 if no journal)
	CreateDate         uint32   // Date and time of volume creation (Mac OS format)
	ModifyDate         uint32   // Date and time of last modification
	BackupDate         uint32   // Date and time of last backup
	CheckedDate        uint32   // Date and time of last consistency check
	FileCount          uint32   // Number of files in the volume
	FolderCount        uint32   // Number of folders in the volume
	BlockSize          uint32   // Size of allocation blocks in bytes
	TotalBlocks        uint32   // Total number of allocation blocks
	FreeBlocks         uint32   // Number of unused allocation blocks
	NextAllocation     uint32   // Block number to start next allocation search
	ResourceClumpSize  uint32   // Default clump size for resource forks
	DataClumpSize      uint32   // Default clump size for data forks
	NextCatalogID      uint32   // Next unused catalog ID (for files and folders)
	WriteCount         uint32   // Number of times volume has been written to
	EncodingsBitmap    uint64   // Encoding bitmap (for text encoding conversions)
	FinderInfo         [32]byte // Information used by the Finder
	// Special file locations
	AllocationFile HFSPlusForkData // Location of allocation bitmap file
	ExtentsFile    HFSPlusForkData // Location of extents overflow file
	CatalogFile    HFSPlusForkData // Location of catalog file
	AttributesFile HFSPlusForkData // Location of attributes file
	StartupFile    HFSPlusForkData // Location of startup file
}

HFSPlusVolumeHeader represents the volume header of an HFS+ file system

type KolyTrailer

type KolyTrailer struct {
	Signature             [4]byte
	Version               uint32
	HeaderSize            uint32
	Flags                 uint32
	RunningDataForkOffset uint64
	DataForkOffset        uint64
	DataForkLength        uint64
	RsrcForkOffset        uint64
	RsrcForkLength        uint64
	SegmentNumber         uint32
	SegmentCount          uint32
	SegmentID             UUID
	DataChecksumType      uint32
	DataChecksumSize      uint32
	DataChecksum          [32]uint32
	XMLOffset             uint64
	XMLLength             uint64
	Reserved1             [120]byte
	ChecksumType          uint32
	ChecksumSize          uint32
	Checksum              [32]uint32
	ImageVariant          uint32
	SectorCount           uint64
	Reserved2             uint32
	Reserved3             uint32
	Reserved4             uint32
}

KolyTrailer represents the 512-byte trailer found at the end of DMG files

type MishHeader

type MishHeader struct {
	Signature           uint32
	Version             uint32
	SectorNumber        uint64
	SectorCount         uint64
	DataOffset          uint64
	BuffersNeeded       uint32
	BlockDescriptors    uint32
	Reserved1           uint32
	Reserved2           uint32
	Reserved3           uint32
	Reserved4           uint32
	Reserved5           uint32
	Reserved6           uint32
	ChecksumType        uint32
	ChecksumSize        uint32
	Checksum            [32]uint32
	NumberOfBlockChunks uint32
}

MishHeader represents the block metadata for a partition

type UUID

type UUID [16]byte

UUID represents a 128-bit identifier

type XMLPropertyList

type XMLPropertyList struct {
	Dict struct {
		ResourceFork struct {
			Blkx []struct {
				Attributes string `xml:"Attributes"`
				CFName     string `xml:"CFName"`
				Data       string `xml:"Data"`
				ID         string `xml:"ID"`
				Name       string `xml:"Name"`
			} `xml:"blkx>dict"`
		} `xml:"resource-fork>dict"`
	} `xml:"dict"`
}

XMLPropertyList is a simplified structure to parse the XML plist in the DMG

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL