Skip to main content
Malimite uses a standard Maven build. The build generates the ANTLR parser sources and produces a single self-contained JAR with all dependencies bundled.

Prerequisites

  • Java 11 or later — the project targets Java 11 (maven.compiler.source=11, maven.compiler.target=11)
  • Maven 3.x — used to compile, generate sources, and package the application
  • Ghidra — required to run the tool after building; Malimite calls Ghidra’s analyzeHeadless during analysis

Build steps

1

Clone the repository

git clone https://github.com/LaurieWired/Malimite.git
2

Navigate to the project directory

cd Malimite
3

Build with Maven

mvn package
This runs two key phases automatically:
  1. Source generationantlr4-maven-plugin reads CPP14Lexer.g4 and CPP14Parser.g4 from src/main/antlr4/ and writes the generated Java sources to src/main/java/com/lauriewired/malimite/decompile/antlr/.
  2. Packagingmaven-shade-plugin compiles all classes and bundles every dependency into a single shaded JAR at target/malimite-1.0-SNAPSHOT.jar.
4

Run the built JAR

java -jar target/malimite-1.0-SNAPSHOT.jar
The shade plugin sets the manifest Main-Class to com.lauriewired.malimite.Malimite, so no -cp flag or explicit class name is needed.

Maven plugins

PluginVersionRole
antlr4-maven-plugin4.13.1Generates CPP14Lexer and CPP14Parser Java sources from the ANTLR grammars during the generate-sources phase
build-helper-maven-plugin3.3.0Adds the ANTLR output directory to the compile source root so the generated classes are picked up by the compiler
maven-compiler-plugin3.13.0Compiles all Java sources targeting Java 11 (--release 11)
maven-shade-plugin3.5.0Creates an uber-JAR with all dependencies merged; excludes signature files (META-INF/*.SF, *.DSA, *.RSA) to prevent security exceptions at runtime

Key dependencies

DependencyVersionPurpose
dd-plist1.27Apple binary and XML plist parsing
gson2.10.1JSON serialization and deserialization
sqlite-jdbc3.44.1.0Local SQLite project database
org.json20231013JSON object construction (used in the Ghidra bridge)
antlr4-runtime4.13.1Runtime support for the generated CPP14 lexer/parser
rsyntaxtextarea3.4.0Syntax-highlighting code editor component
flatlaf3.5.2Modern flat look and feel for the Swing UI
bcprov-jdk15on1.70BouncyCastle cryptographic provider for provisioning profile decoding
bcpkix-jdk15on1.70BouncyCastle PKIX/CMS support for key handling
flexmark-all0.64.8Markdown rendering for AI-generated responses in the UI

The DecompilerBridge

DecompilerBridge/ghidra/DumpClassData.java is a Ghidra headless script, not a standard Java class. It is not compiled by Maven and does not appear in the shaded JAR. Malimite invokes it by passing its path to Ghidra’s analyzeHeadless command-line tool. Ghidra compiles and runs the script in its own runtime environment, communicating results back to Malimite over a local socket connection.
Do not move or rename DumpClassData.java without updating the path that Malimite uses to locate it. GhidraProject.java resolves the script directory at runtime as <user.dir>/DecompilerBridge/ghidra, so the file must remain at that relative path from wherever the JAR is launched.

IDE setup

The project follows a standard Maven layout and imports cleanly into IntelliJ IDEA and Eclipse. IntelliJ IDEA:
  1. Open the repository root as a Maven project (File → Open → select pom.xml).
  2. IntelliJ will download dependencies and index the project automatically.
  3. Run com.lauriewired.malimite.Malimite directly from the IDE.
Eclipse:
  1. Use File → Import → Existing Maven Projects and point it at the repository root.
  2. Eclipse will configure the build path from pom.xml.
The first build may take a few minutes while Maven downloads dependencies and ANTLR generates the parser sources. Subsequent builds are significantly faster.