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/dex2jarOverview
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.xmlfor 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.xmlpour 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