Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/LaurieWired/Malimite/llms.txt

Use this file to discover all available pages before exploring further.

Malimite accepts iOS and macOS application packages and the Mach-O executables they contain. You can open a file by clicking Select File on the home screen, dragging and dropping onto the window, or reopening a recent project.

Input file types

An IPA file (.ipa) is a ZIP archive that holds an iOS application. Malimite extracts the archive, locates the Payload/*.app bundle inside, reads Info.plist to find the main executable name, and then loads that Mach-O binary for analysis.What Malimite reads from an IPA:
ResourceHow it is parsed
Payload/<App>.app/<Executable>Mach-O binary, passed to Ghidra for decompilation
Info.plistBinary and XML formats via the dd-plist library; CFBundleExecutable and CFBundleIdentifier are extracted
embedded.mobileprovisionCMS-signed file decoded with BouncyCastle; embedded XML plist is displayed
Asset catalogs and other bundle resourcesListed in the file tree for inspection
Malimite treats IPA files as ZIP archives internally. If the archive is malformed or the Payload/ directory structure is missing, the file may not load correctly.

Mach-O binary formats

Malimite passes the located executable to Ghidra’s headless analyzer. Before doing so, it reads the Mach-O header to determine the binary type.

Single-architecture binaries

A standard Mach-O file contains code for one CPU architecture. Malimite detects it by reading the magic number at the start of the file and passes it directly to Ghidra.

Universal (fat) binaries

A universal binary (fat Mach-O) bundles multiple architecture slices in a single file. Malimite identifies universal binaries using the Mach-O magic numbers:
Magic numberDescription
0xcafebabeUniversal binary (big-endian header)
0xbebafecaUniversal binary (little-endian / CIGAM byte-swapped header)
When a universal binary is detected, Malimite displays an architecture selection dialog listing all slices found in the file. Select the architecture you want to analyze and Malimite extracts that slice before passing it to Ghidra.

Supported architectures

ArchitectureCPU type constantTypical use
Intel x860x0000000732-bit macOS applications
Intel x86_640x0100000764-bit macOS, Intel Mac apps
ARM0x0000000C32-bit iOS (ARMv7, legacy devices)
ARM640x0100000CApple Silicon Macs, iPhone, iPad
Most modern iOS apps target ARM64 only. macOS apps distributed via the App Store may include both ARM64 (Apple Silicon) and x86_64 (Intel) slices in a universal binary.

Language support

Swift

Malimite detects Swift binaries by scanning for runtime markers in the binary content: Swift Runtime, SwiftCore, _swift_, and the _$s name-mangling prefix. When a binary is detected as Swift, Malimite demangles mangled symbol names using its built-in DemangleSwift parser. The demangler handles names that start with the _$s prefix — the standard Swift ABI mangling scheme — and reconstructs the class name and method name from the encoded length-prefixed segments.

Objective-C

For Objective-C binaries, Ghidra’s built-in Objective-C analyzer reconstructs class hierarchies, method selectors, and instance variable layouts. The results are stored in Malimite’s local SQLite project database and displayed in the class tree.

Decoded resources

Malimite automatically decodes Apple-specific resource formats found inside the bundle:
ResourceFormatParser
Info.plistBinary plist or XML plistdd-plist (PropertyListParser)
embedded.mobileprovisionCMS-signed envelope containing an XML plistBouncyCastle (CMSSignedData)
Other bundle filesRaw bytesListed in the file tree; viewable as text
Binary plists are detected by checking for the bplist magic bytes. Both binary and XML plists are fully parsed and displayed as readable XML in the analysis view.

Build docs developers (and LLMs) love