Skip to main content

Docker-isolated static reverse engineering orchestrator

Project description

decompile

decompile is a Docker-first static reverse-engineering CLI.

Install the small host command, run decompile ./file, and the heavy tools run inside the Docker image. The host does not need Ghidra, JADX, apktool, ILSpy, or binutils installed.

Install

pip install decompile
decompile --update

Other package targets:

yay -S decompile
sudo apt install ./decompile_0.1.0_all.deb

Docker is required for the normal published workflow.

Quick Start

decompile ./crackme
decompile --no-ai ./crackme
decompile --image docker.io/admin12121/decompile:stable ./crackme
decompile --local ./crackme

Default output goes to:

./crackme.ghidra-out/

You can choose the output directory:

decompile ./crackme ./out

What It Does

decompile detects the input format, chooses the matching static toolchain, and writes useful reverse-engineering output into one directory.

Supported routes:

Input Tooling Output
ELF, PE, EXE, DLL, SYS, Mach-O Ghidra headless, objdump, optional AI cleanup ASM, pseudocode C, enhanced C, summary
APK, AAB, DEX JADX, apktool Java/Kotlin source, resources, summary
JAR, WAR, EAR, .class JADX Java source, summary
.NET EXE/DLL ilspycmd C# source, summary
IPA, .app bundle IPA/app extraction plus native analysis Native output and app metadata

Native binary output:

<name>.disassembly.asm
<name>.pseudocode.c
<name>.enhanced.c
<name>.summary.txt

Android, Java, and .NET output usually includes:

source/
resources/
<name>.summary.txt

Docker Model

Published installs use this image by default:

docker.io/admin12121/decompile:stable

The image is pulled only when it is missing locally. Normal runs reuse the local image and do not check the registry.

Update manually:

decompile --update

Use a custom image:

decompile --image ghcr.io/you/decompile:dev ./file

Run host tools directly:

decompile --local ./file

Inside Docker:

  • input is mounted read-only
  • output is mounted read-write
  • the container runs as your current UID/GID
  • temporary projects and scratch files are removed
  • --no-ai disables network access for the analysis container

AI Enhancement

For native binaries, enhanced.c can be generated from pseudocode, disassembly, objdump context, and summary data.

Use this when you want cleaner function names, variables, and reconstructed C-like output:

decompile ./file

Disable it for malware, private samples, offline work, or reproducible local-only output:

decompile --no-ai ./file

When AI is enabled, analysis context may be sent to GitHub Copilot through gh. Pass authentication with GH_TOKEN, GITHUB_TOKEN, or your local GitHub CLI config.

Options

decompile <file-or-bundle> [output-dir]
decompile --no-ai <file-or-bundle> [output-dir]
decompile --update [--image <image>]
decompile --image <image> <file-or-bundle> [output-dir]
decompile --local <file-or-bundle> [output-dir]
decompile --type <native|apk|aab|dex|jar|class|dotnet|ipa|app-bundle> <file> [output-dir]

Useful environment variables:

DECOMPILE_DOCKER_IMAGE      override the Docker image
DECOMPILE_USE_DOCKER=0      run local host tools
DECOMPILE_NO_AI=1           skip AI enhancement
DECOMPILE_KEEP_DEBUG=1      keep objdump and prompt/debug files
GHIDRA_TIMEOUT=120          per-function decompile timeout

Limits

This is static analysis only. It does not run the target, debug it, emulate it, unpack it, or bypass runtime protections.

Packed binaries, heavy obfuscation, anti-disassembly tricks, encrypted IPA files, and protected mobile apps can still produce weak or incomplete output.

Docker isolation reduces host writes, but it is not a malware sandbox. Do not execute unknown samples with this tool.

Development

Build the Docker image:

docker build -t decompile:latest .

Use the local image:

decompile --image decompile:latest ./sample

Build Python release artifacts:

python3 -m build

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

decompile-0.1.0.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

decompile-0.1.0-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file decompile-0.1.0.tar.gz.

File metadata

  • Download URL: decompile-0.1.0.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for decompile-0.1.0.tar.gz
Algorithm Hash digest
SHA256 66cbe57d1bf5d22c975f4c39aed4b8b7e4cead9315bfef41727351ee7f8f685c
MD5 c1856554e177b4ba9d88f76553484b66
BLAKE2b-256 08f8daaea7a22bdc622f4a8e203476a5509c061a0628869b3bdf8407335c6ae6

See more details on using hashes here.

File details

Details for the file decompile-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: decompile-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for decompile-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 51af59176252d37175fac5f078d19336c08475e083edf23165e4ce1505aaed56
MD5 ab8f506615afffaf6d33e62ceda43ca9
BLAKE2b-256 d619b6461b1593a327f1be3f94fdd278622f3da7995b19c324d9826689312d4b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page