plist

package
v0.0.0-prerelease Latest Latest
Warning

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

Go to latest
Published: Dec 5, 2025 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Extract

func Extract(ipsw string) error

Extract extracts plists from IPSW

func GetBinaryInApp

func GetBinaryInApp(path string) (string, error)

GetBinaryInApp returns the binary path of the given .app

Types

type AppInfo

type AppInfo struct {
	BuildMachineOSBuild           string   `plist:"BuildMachineOSBuild,omitempty"`
	CFBundleDevelopmentRegion     string   `plist:"CFBundleDevelopmentRegion,omitempty"`
	CFBundleDocumentTypes         []any    `plist:"CFBundleDocumentTypes,omitempty"`
	CFBundleExecutable            string   `plist:"CFBundleExecutable,omitempty"`
	CFBundleIconFile              string   `plist:"CFBundleIconFile,omitempty"`
	CFBundleIconName              string   `plist:"CFBundleIconName,omitempty"`
	CFBundleIdentifier            string   `plist:"CFBundleIdentifier,omitempty"`
	CFBundleInfoDictionaryVersion string   `plist:"CFBundleInfoDictionaryVersion,omitempty"`
	CFBundleName                  string   `plist:"CFBundleName,omitempty"`
	CFBundlePackageType           string   `plist:"CFBundlePackageType,omitempty"`
	CFBundleShortVersionString    string   `plist:"CFBundleShortVersionString,omitempty"`
	CFBundleSignature             string   `plist:"CFBundleSignature,omitempty"`
	CFBundleSupportedPlatforms    []string `plist:"CFBundleSupportedPlatforms,omitempty"`
	CFBundleURLTypes              []struct {
		CFBundleTypeRole    string   `plist:"CFBundleTypeRole,omitempty"`
		CFBundleURLIconFile string   `plist:"CFBundleURLIconFile,omitempty"`
		CFBundleURLName     string   `plist:"CFBundleURLName,omitempty"`
		CFBundleURLSchemes  []string `plist:"CFBundleURLSchemes,omitempty"`
	} `plist:"CFBundleURLTypes,omitempty"`
	CFBundleVersion                      string   `plist:"CFBundleVersion,omitempty"`
	DTCompiler                           string   `plist:"DTCompiler,omitempty"`
	DTPlatformBuild                      string   `plist:"DTPlatformBuild,omitempty"`
	DTPlatformName                       string   `plist:"DTPlatformName,omitempty"`
	DTPlatformVersion                    string   `plist:"DTPlatformVersion,omitempty"`
	DTSDKBuild                           string   `plist:"DTSDKBuild,omitempty"`
	DTSDKName                            string   `plist:"DTSDKName,omitempty"`
	DTXcode                              string   `plist:"DTXcode,omitempty"`
	DTXcodeBuild                         string   `plist:"DTXcodeBuild,omitempty"`
	LSApplicationCategoryType            string   `plist:"LSApplicationCategoryType,omitempty"`
	LSMinimumSystemVersion               string   `plist:"LSMinimumSystemVersion,omitempty"`
	LSUIElement                          bool     `plist:"LSUIElement,omitempty"`
	MinimumOSVersion                     string   `plist:"MinimumOSVersion,omitempty"`
	NSHumanReadableCopyright             string   `plist:"NSHumanReadableCopyright,omitempty"`
	NSMainNibFile                        string   `plist:"NSMainNibFile,omitempty"`
	NSPrincipalClass                     string   `plist:"NSPrincipalClass,omitempty"`
	NSSupportsAutomaticGraphicsSwitching bool     `plist:"NSSupportsAutomaticGraphicsSwitching,omitempty"`
	NSUbiquitousDisplaySet               string   `plist:"NSUbiquitousDisplaySet,omitempty"`
	NSUserActivityTypes                  []string `plist:"NSUserActivityTypes,omitempty"`
	NSUserNotificationAlertStyle         string   `plist:"NSUserNotificationAlertStyle,omitempty"`
	NSUserNotificationAlertBody          string   `plist:"NSUserNotificationAlertBody,omitempty"`
	UTExportedTypeDeclarations           []any    `plist:"UTExportedTypeDeclarations,omitempty"`
}

AppInfo is the Info.plist object found in .app files https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009248-SW1

func ParseAppInfo

func ParseAppInfo(data []byte) (*AppInfo, error)

ParseAppInfo parses the .app/Info.plist

func (*AppInfo) String

func (r *AppInfo) String() string

type AssetDataInfo

type AssetDataInfo struct {
	ActualMinimumSystemPartition int               `plist:"ActualMinimumSystemPartition,omitempty" json:"actual_minimum_system_partition,omitempty"`
	Build                        string            `plist:"Build,omitempty" json:"build,omitempty"`
	DeviceClass                  string            `plist:"DeviceClass,omitempty" json:"device_class,omitempty"`
	HardwareModel                string            `plist:"HardwareModel,omitempty" json:"hardware_model,omitempty"`
	MinimumSystemPartition       int               `plist:"MinimumSystemPartition,omitempty" json:"minimum_system_partition,omitempty"`
	PackageVersion               string            `plist:"PackageVersion,omitempty" json:"package_version,omitempty"`
	ProductType                  string            `plist:"ProductType,omitempty" json:"product_type,omitempty"`
	ProductVersion               string            `plist:"ProductVersion,omitempty" json:"product_version,omitempty"`
	RSEPDigest                   []byte            `plist:"RSEPDigest,omitempty" json:"rsep_digest,omitempty"`
	RSEPTBMDigests               []byte            `plist:"RSEPTBMDigests,omitempty" json:"rseptbm_digests,omitempty"`
	RequiredSpace                int               `plist:"RequiredSpace,omitempty" json:"required_space,omitempty"`
	ReserveFileAware             bool              `plist:"ReserveFileAware,omitempty" json:"reserve_file_aware,omitempty"`
	SEPDigest                    []byte            `plist:"SEPDigest,omitempty" json:"sep_digest,omitempty"`
	SEPTBMDigests                []byte            `plist:"SEPTBMDigests,omitempty" json:"septbm_digests,omitempty"`
	SizeArchiveRoot              int               `plist:"SizeArchiveRoot,omitempty" json:"size_archive_root,omitempty"`
	SizePatchedBinaries          int               `plist:"SizePatchedBinaries,omitempty" json:"size_patched_binaries,omitempty"`
	SizePatchedBinariesSnapshot  int               `plist:"SizePatchedBinaries-Snapshot,omitempty" json:"size_patched_binaries_snapshot,omitempty"`
	SystemPartitionPadding       map[string]int    `plist:"SystemPartitionPadding,omitempty" json:"system_partition_padding,omitempty"`
	SystemUpdatePathMap          map[string]string `plist:"SystemUpdatePathMap,omitempty" json:"system_update_path_map,omitempty"`
	SystemVolumeSealingOverhead  int               `plist:"SystemVolumeSealingOverhead,omitempty" json:"system_volume_sealing_overhead,omitempty"`
	TargetUpdate                 string            `plist:"TargetUpdate,omitempty" json:"target_update,omitempty"`
}

AssetDataInfo AssetData/Info.plist object found in OTAs

func ParseAssetDataInfoPlist

func ParseAssetDataInfoPlist(data []byte) (*AssetDataInfo, error)

ParseBuildManifest parses the AssetData/Info.plist file from an OTA

func (*AssetDataInfo) String

func (a *AssetDataInfo) String() string

AssetDataInfo Stringer

type BuildIdentity

type BuildIdentity struct {
	ApOSLongVersion                    string                      `plist:"Ap,OSLongVersion,omitempty" json:"ap_os_long_version,omitempty"`
	ApBoardID                          string                      `plist:"ApBoardID,omitempty" json:"ap_board_id,omitempty"`
	ApChipID                           string                      `plist:"ApChipID,omitempty" json:"ap_chip_id,omitempty"`
	ApSecurityDomain                   string                      `plist:"ApSecurityDomain,omitempty" json:"ap_security_domain,omitempty"`
	ApProductType                      string                      `plist:"Ap,ProductType,omitempty" json:"ap_product_type,omitempty"`
	ApProductMarketingVersion          string                      `plist:"Ap,ProductMarketingVersion,omitempty" json:"product_marketing_version,omitempty"`
	ApSDKPlatform                      string                      `plist:"Ap,SDKPlatform,omitempty" json:"ap_sdk_platform,omitempty"`
	ApTarget                           string                      `plist:"Ap,Target,omitempty" json:"ap_target,omitempty"`
	ApTargetType                       string                      `plist:"Ap,TargetType,omitempty" json:"ap_target_type,omitempty"`
	BbActivationManifestKeyHash        []byte                      `plist:"BbActivationManifestKeyHash,omitempty" json:"bb_activation_manifest_key_hash,omitempty"`
	BbChipID                           string                      `plist:"BbChipID,omitempty" json:"bb_chip_id,omitempty"`
	BbGoldCertId                       string                      `plist:"BbGoldCertId,omitempty" json:"bb_gold_cert_id,omitempty"`
	BbSkeyId                           []byte                      `plist:"BbSkeyId,omitempty" json:"bb_skey_id,omitempty"`
	BbFDRSecurityKeyHash               []byte                      `plist:"BbFDRSecurityKeyHash,omitempty" json:"bb_fdr_security_key_hash,omitempty"`
	BbProvisioningManifestKeyHash      []byte                      `plist:"BbProvisioningManifestKeyHash,omitempty" json:"bb_provisioning_manifest_key_hash,omitempty"`
	BbCalibrationManifestKeyHash       []byte                      `plist:"BbCalibrationManifestKeyHash,omitempty" json:"bb_calibration_manifest_key_hash,omitempty"`
	BbFactoryActivationManifestKeyHash []byte                      `plist:"BbFactoryActivationManifestKeyHash,omitempty" json:"bb_factory_activation_manifest_key_hash,omitempty"`
	Info                               IdentityInfo                `plist:"Info,omitempty" json:"info"`
	Manifest                           map[string]IdentityManifest `plist:"Manifest,omitempty" json:"manifest,omitempty"`
	PearlCertificationRootPub          []byte                      `plist:"PearlCertificationRootPub,omitempty" json:"pearl_certification_root_pub,omitempty"`
	UniqueBuildID                      []byte                      `plist:"UniqueBuildID,omitempty" json:"unique_build_id,omitempty"`
	NeRDEpoch                          uint64                      `plist:"NeRDEpoch,omitempty" json:"nerd_epoch,omitempty"`
	PermitNeRDPivot                    []byte                      `plist:"PermitNeRDPivot,omitempty" json:"permit_nerd_pivot,omitempty"`
	ApSikaFuse                         uint64                      `plist:"Ap,SikaFuse,omitempty" json:"ap_sika_fuse,omitempty"`
}

func (BuildIdentity) String

func (i BuildIdentity) String() string

type BuildManifest

type BuildManifest struct {
	BuildIdentities       []BuildIdentity `plist:"BuildIdentities,omitempty" json:"build_identities,omitempty"`
	ManifestVersion       int             `plist:"ManifestVersion,omitempty" json:"manifest_version,omitempty"`
	ProductBuildVersion   string          `plist:"ProductBuildVersion,omitempty" json:"product_build_version,omitempty"`
	ProductVersion        string          `plist:"ProductVersion,omitempty" json:"product_version,omitempty"`
	SupportedProductTypes []string        `plist:"SupportedProductTypes,omitempty" json:"supported_product_types,omitempty"`
}

BuildManifest is the BuildManifest.plist object found in IPSWs/OTAs

func ParseBuildManifest

func ParseBuildManifest(data []byte) (*BuildManifest, error)

ParseBuildManifest parses the BuildManifest.plist

func (*BuildManifest) GetBootLoaders

func (b *BuildManifest) GetBootLoaders() map[string][]string

func (*BuildManifest) GetBuildIdentity

func (b *BuildManifest) GetBuildIdentity(device string) (*BuildIdentity, error)

func (*BuildManifest) GetKernelCaches

func (b *BuildManifest) GetKernelCaches() map[string][]string

func (*BuildManifest) GetKernelForModel

func (b *BuildManifest) GetKernelForModel(model string) []string

func (*BuildManifest) String

func (b *BuildManifest) String() string

type IdentityInfo

type IdentityInfo struct {
	BuildNumber            string            `json:"build_number,omitempty"`
	CodeName               string            `plist:"BuildTrain,omitempty" json:"code_name,omitempty"`
	DeviceClass            string            `json:"device_class,omitempty"`
	FDRSupport             bool              `json:"fdr_support,omitempty"`
	MinimumSystemPartition int               `json:"minimum_system_partition,omitempty"`
	MobileDeviceMinVersion string            `json:"mobile_device_min_version,omitempty"`
	OSVarContentSize       int               `json:"os_var_content_size,omitempty"`
	RestoreBehavior        string            `json:"restore_behavior,omitempty"`
	SystemPartitionPadding map[string]int    `json:"system_partition_padding,omitempty"`
	Variant                string            `json:"variant,omitempty"`
	VariantContents        map[string]string `json:"variant_contents,omitempty"`
	ApTimestamp            int               `plist:"Ap,Timestamp,omitempty" json:"ap_timestamp,omitempty"`
}

func (IdentityInfo) String

func (i IdentityInfo) String() string

type IdentityManifest

type IdentityManifest struct {
	Digest                       []byte         `plist:"Digest,omitempty" json:"digest,omitempty" mapstructure:"Digest,omitempty"`
	DigestListSize               *int           `plist:"DigestListSize,omitempty" json:"digest_list_size,omitempty" mapstructure:"DigestListSize,omitempty"`
	FabRevision                  *int           `plist:"FabRevision,omitempty" json:"fab_revision,omitempty" mapstructure:"FabRevision,omitempty"`
	Name                         *string        `plist:"Name,omitempty" json:"name,omitempty" mapstructure:"Name,omitempty"`
	BuildString                  *string        `plist:"BuildString,omitempty" json:"build_string,omitempty" mapstructure:"BuildString,omitempty"`
	Info                         map[string]any `plist:"Info,omitempty" json:"info,omitempty" mapstructure:"Info,omitempty"`
	EPRO                         *bool          `plist:"EPRO,omitempty" json:"epro,omitempty" mapstructure:"EPRO,omitempty"`
	ESEC                         *bool          `plist:"ESEC,omitempty" json:"esec,omitempty" mapstructure:"ESEC,omitempty"`
	Trusted                      *bool          `plist:"Trusted,omitempty" json:"trusted,omitempty" mapstructure:"Trusted,omitempty"`
	MemoryMap                    *[]byte        `plist:"MemoryMap,omitempty" json:"memory_map,omitempty" mapstructure:"MemoryMap,omitempty"`
	ObjectPayloadPropertyDigest  *[]byte        `` /* 146-byte string literal not displayed */
	ProductionUpdatePayloadHash  *[]byte        `` /* 146-byte string literal not displayed */
	DevelopmentUpdatePayloadHash *[]byte        `` /* 149-byte string literal not displayed */
	RawDataDigest                *[]byte        `plist:"RawDataDigest,omitempty" json:"raw_data_digest,omitempty" mapstructure:"RawDataDigest,omitempty"`
	TBMDigests                   *[]byte        `plist:"TBMDigests,omitempty" json:"tbm_digests,omitempty" mapstructure:"TBMDigests,omitempty"`
}

func (IdentityManifest) MarshalMap

func (m IdentityManifest) MarshalMap() map[string]any

MarshalMap converts IdentityManifest to a map suitable for plist marshaling by dereferencing all pointer values

func (IdentityManifest) String

func (m IdentityManifest) String() string

type IdentityManifestInfo

type IdentityManifestInfo struct {
	IsFTAB                      bool   `json:"is_ftab,omitempty" mapstructure:"IsFTAB,omitempty"`
	IsFUDFirmware               bool   `plist:"IsFUDFirmware,omitempty" json:"is_fud_firmware,omitempty" mapstructure:"IsFUDFirmware,omitempty"`
	IsFirmwarePayload           bool   `plist:"IsFirmwarePayload,omitempty" json:"is_firmware_payload,omitempty" mapstructure:"IsFirmwarePayload,omitempty"`
	IsLoadedByiBoot             bool   `json:"is_loaded_byi_boot,omitempty" mapstructure:"IsLoadedByiBoot,omitempty"`
	IsLoadedByiBootStage1       bool   `json:"is_loaded_byi_boot_stage_1,omitempty" mapstructure:"IsLoadedByiBootStage1,omitempty"`
	IsiBootEANFirmware          bool   `json:"isi_boot_ean_firmware,omitempty" mapstructure:"IsiBootEANFirmware,omitempty"`
	IsiBootNonEssentialFirmware bool   `json:"isi_boot_non_essential_firmware,omitempty" mapstructure:"IsiBootNonEssentialFirmware,omitempty"`
	Path                        string `plist:"Path" json:"path,omitempty" mapstructure:"Path,omitempty"`
	Personalize                 bool   `json:"personalize,omitempty" mapstructure:"Personalize,omitempty"`
	RestoreRequestRules         []any  `json:"restore_request_rules,omitempty" mapstructure:"RestoreRequestRules,omitempty"`
}

type OTAInfo

type OTAInfo struct {
	CFBundleIdentifier            string      `plist:"CFBundleIdentifier,omitempty" json:"cf_bundle_identifier,omitempty"`
	CFBundleInfoDictionaryVersion string      `plist:"CFBundleInfoDictionaryVersion,omitempty" json:"cf_bundle_info_dictionary_version,omitempty"`
	CFBundleName                  string      `plist:"CFBundleName,omitempty" json:"cf_bundle_name,omitempty"`
	CFBundleShortVersionString    string      `plist:"CFBundleShortVersionString,omitempty" json:"cf_bundle_short_version_string,omitempty"`
	CFBundleVersion               string      `plist:"CFBundleVersion,omitempty" json:"cf_bundle_version,omitempty"`
	MobileAssetProperties         types.Asset `plist:"MobileAssetProperties,omitempty" json:"mobile_asset_properties"`
}

OTAInfo Info.plist object found in OTAs

func ParseOTAInfo

func ParseOTAInfo(data []byte) (*OTAInfo, error)

ParseOTAInfo parses the Info.plist file from an OTA

func (*OTAInfo) String

func (o *OTAInfo) String() string

OTAInfo Stringer

type Plists

type Plists struct {
	Type           string `json:"type,omitempty"`
	*BuildManifest `json:"build_manifest,omitempty"`
	*Restore       `json:"restore,omitempty"`
	*AssetDataInfo `json:"asset_data_info,omitempty"`
	*OTAInfo       `json:"ota_info,omitempty"`
	*SystemVersion `json:"system_version,omitempty"`
}

Plists IPSW/OTA plists object

func Parse

func Parse(path string) (*Plists, error)

Parse parses plist files in a local IPSW/OTA file

func ParsePlistFiles

func ParsePlistFiles(files []fs.File) (*Plists, error)

func ParseZipFiles

func ParseZipFiles(files []*zip.File) (*Plists, error)

ParseZipFiles parses plists in remote ipsw zip

func (*Plists) GetDeviceForBoardConfig

func (p *Plists) GetDeviceForBoardConfig(boardConfig string) *restoreDeviceMap

func (*Plists) GetKernelType

func (p *Plists) GetKernelType(name string) string

func (*Plists) GetOSType

func (p *Plists) GetOSType() string

func (*Plists) String

func (i *Plists) String() string

type Restore

type Restore struct {
	DeviceClass                   string             `plist:"DeviceClass,omitempty"`
	FirmwareDirectory             string             `plist:"FirmwareDirectory,omitempty"`
	KernelCachesByPlatform        map[string]any     `plist:"KernelCachesByPlatform,omitempty"`
	DeviceMap                     []restoreDeviceMap `plist:"DeviceMap,omitempty"`
	ProductBuildVersion           string             `plist:"ProductBuildVersion,omitempty"`
	ProductType                   string             `plist:"ProductType,omitempty"`
	ProductVersion                string             `plist:"ProductVersion,omitempty"`
	RamDisksByPlatform            map[string]any     `plist:"RamDisksByPlatform,omitempty"`
	RestoreKernelCaches           map[string]any     `plist:"RestoreKernelCaches,omitempty"`
	RestoreRamDisks               map[string]any     `plist:"RestoreRamDisks,omitempty"`
	SupportedProductTypeIDs       map[string][]int   `plist:"SupportedProductTypeIDs,omitempty"`
	SupportedProductTypes         []string           `plist:"SupportedProductTypes,omitempty"`
	SystemRestoreImageFileSystems map[string]string  `plist:"SystemRestoreImageFileSystems,omitempty"`
	SystemRestoreImages           map[string]string  `plist:"SystemRestoreImages,omitempty"`
}

Restore is the Restore.plist object found in IPSWs/OTAs

func ParseRestore

func ParseRestore(data []byte) (*Restore, error)

ParseRestore parses the Restore.plist

func (*Restore) String

func (r *Restore) String() string

type SystemVersion

type SystemVersion struct {
	BuildID             string `json:"build_id,omitempty"`
	ProductBuildVersion string `json:"product_build_version,omitempty"`
	ProductCopyright    string `json:"product_copyright,omitempty"`
	ProductName         string `json:"product_name,omitempty"`
	ProductVersion      string `json:"product_version,omitempty"`
	ReleaseType         string `json:"release_type,omitempty"`
	SystemImageID       string `json:"system_image_id,omitempty"`
}

SystemVersion is the SystemVersion.plist struct

func ParseSystemVersion

func ParseSystemVersion(data []byte) (*SystemVersion, error)

ParseSystemVersion parses the SystemVersion.plist

func (*SystemVersion) String

func (sv *SystemVersion) String() string

Jump to

Keyboard shortcuts

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