dex2jar

Convertit le bytecode DEX Android en fichiers JAR pour la décompilation Java. Première étape essentielle pour reverser des APK Android : produit un JAR ouvrable dans JD-GUI ou JADX. Converts Android DEX bytecode to JAR files for Java decompilation. Essential first step when reversing Android APKs — produces JAR that can be opened in JD-GUI or JADX.

↗ https://github.com/pxb1988/dex2jar

Overview

dex2jar converts Android’s DEX (Dalvik Executable) format to standard Java JAR files. Once converted, the JAR can be decompiled with tools like JD-GUI, Procyon, or CFR to recover readable Java source code. It’s the classic first step in Android APK analysis.

Basic Usage

Convert APK directly to JAR

d2j-dex2jar app.apk
# Output file: app-dex2jar.jar

Specify output filename

d2j-dex2jar app.apk -o output.jar

Convert a DEX file directly

d2j-dex2jar classes.dex -o output.jar

Force overwrite output

d2j-dex2jar app.apk -o output.jar --force

Full APK Analysis Workflow

# Step 1: Extract APK (it's a ZIP)
mkdir apk_contents
cp app.apk app.zip
unzip app.zip -d apk_contents/
# → classes.dex, resources, AndroidManifest.xml

Step 2: Convert DEX to JAR

d2j-dex2jar apk_contents/classes.dex -o classes.jar

Step 3: Open in JD-GUI for visual decompilation

jd-gui classes.jar

Or use jadx (all-in-one, better results)

jadx -d output/ app.apk

Handling Multiple DEX Files

# Modern apps often have multiple dex files (classes.dex, classes2.dex, etc.)
# Convert each one:
d2j-dex2jar classes.dex -o classes.jar
d2j-dex2jar classes2.dex -o classes2.jar
d2j-dex2jar classes3.dex -o classes3.jar

Or use jadx which handles multiple DEX automatically:

jadx -d output/ app.apk

Other dex2jar Tools

Decompile JAR with d2j-jar2jasmin (to Jasmin assembly)

d2j-jar2jasmin classes.jar

Convert smali back to dex

d2j-smali2dex smali_dir/

Dump dex file info

d2j-dex-dump classes.dex

Fast mode (less accurate but faster)

d2j-dex2jar --fast-mode app.apk

Opening the JAR

JD-GUI (graphical Java decompiler)

jd-gui output.jar

Or decompile to source files with jadx (recommended over dex2jar + JD-GUI)

jadx -d src/ app.apk

Or with procyon (command-line)

procyon -jar output.jar -o decompiled_src/

Or with cfr

java -jar cfr.jar output.jar --outputdir decompiled_src/

Tips

  • jadx usually gives better results and handles the full workflow in one step
  • dex2jar + JD-GUI is the classic approach — still useful when jadx fails on specific apps
  • Pay attention to com.example.BuildConfig — often contains server URLs, API keys, debug flags
  • Check AndroidManifest.xml for permissions, activities, exported components, and deeplinks
Help / Man page
d2j-dex2jar [options] <file>

<file>          APK, DEX, or AAR file
-o FILE         Output file (default: <input>-dex2jar.jar)
--force         Force overwrite output
--fast-mode     Less accurate but faster decompilation
--skip-exceptions  Skip exceptions during conversion
-d              Debug output

Vue d’ensemble

dex2jar convertit le format DEX (Dalvik Executable) d’Android en fichiers JAR Java standard. Une fois converti, le JAR peut être décompilé avec des outils comme JD-GUI, Procyon ou CFR pour récupérer du code source Java lisible. C’est la première étape classique de l’analyse d’un APK Android.

Utilisation de base

# Convertir un APK directement en JAR
d2j-dex2jar app.apk
# Fichier de sortie : app-dex2jar.jar

# Spécifier le nom du fichier de sortie
d2j-dex2jar app.apk -o output.jar

# Convertir directement un fichier DEX
d2j-dex2jar classes.dex -o output.jar

# Forcer l'écrasement de la sortie
d2j-dex2jar app.apk -o output.jar --force

Workflow complet d’analyse d’APK

# Étape 1 : extraire l'APK (c'est un ZIP)
mkdir apk_contents
cp app.apk app.zip
unzip app.zip -d apk_contents/
# → classes.dex, ressources, AndroidManifest.xml
# Étape 2 : convertir le DEX en JAR
d2j-dex2jar apk_contents/classes.dex -o classes.jar

# Étape 3 : ouvrir dans JD-GUI pour une décompilation visuelle
jd-gui classes.jar

# Ou utiliser jadx (tout-en-un, meilleurs résultats)
jadx -d output/ app.apk

Gérer plusieurs fichiers DEX

# Les apps modernes ont souvent plusieurs fichiers dex (classes.dex, classes2.dex, etc.)
# Convertir chacun :
d2j-dex2jar classes.dex -o classes.jar
d2j-dex2jar classes2.dex -o classes2.jar
d2j-dex2jar classes3.dex -o classes3.jar
# Ou utiliser jadx qui gère plusieurs DEX automatiquement :
jadx -d output/ app.apk

Autres outils dex2jar

# Décompiler un JAR avec d2j-jar2jasmin (vers de l'assembleur Jasmin)
d2j-jar2jasmin classes.jar

# Convertir du smali de retour en dex
d2j-smali2dex smali_dir/

# Dumper les infos d'un fichier dex
d2j-dex-dump classes.dex

# Mode rapide (moins précis mais plus rapide)
d2j-dex2jar --fast-mode app.apk

Ouvrir le JAR

# JD-GUI (décompilateur Java graphique)
jd-gui output.jar

# Ou décompiler en fichiers source avec jadx (recommandé plutôt que dex2jar + JD-GUI)
jadx -d src/ app.apk

# Ou avec procyon (ligne de commande)
procyon -jar output.jar -o decompiled_src/

# Ou avec cfr
java -jar cfr.jar output.jar --outputdir decompiled_src/

Conseils

  • jadx donne généralement de meilleurs résultats et gère tout le workflow en une seule étape
  • dex2jar + JD-GUI est l’approche classique : toujours utile quand jadx échoue sur certaines apps
  • Faites attention à com.example.BuildConfig : contient souvent des URLs serveur, des clés d’API, des flags de debug
  • Vérifiez l’AndroidManifest.xml pour les permissions, activités, composants exportés et deeplinks
Aide / Page de manuel
d2j-dex2jar [options] <file>

<file>          APK, DEX, or AAR file
-o FILE         Output file (default: <input>-dex2jar.jar)
--force         Force overwrite output
--fast-mode     Less accurate but faster decompilation
--skip-exceptions  Skip exceptions during conversion
-d              Debug output