
Kommandozeilen- und GUI-Tool zum Dekompilieren von Android-Dex- und APK-Dateien in lesbaren Java-Quellcode, mit Ressourcendekodierung, Entschleierung und Smali-Debugging-Funktionen.
jadx - Dex-zu-Java-Decompiler
Kommandozeilen- und GUI-Tools zum Erzeugen von Java-Quellcode aus Android-Dex- und Apk-Dateien
[!WARNING] Bitte beachten Sie, dass jadx in den meisten Fällen nicht 100% des Codes dekompilieren kann, daher treten Fehler auf.
Überprüfen Sie den Leitfaden zur Fehlerbehebung für Workarounds.
Hauptfunktionen:
AndroidManifest.xml und andere Ressourcen aus resources.arscjadx-gui-Funktionen:
Die Tastenkombinationen von Jadx-gui finden Sie hier
Sehen Sie diese Funktionen in Aktion: Übersicht über jadx-gui-Funktionen
Nach dem Download entpacken Sie die Zip-Datei, wechseln Sie in das bin-Verzeichnis und führen Sie aus:
jadx - Kommandozeilenversionjadx-gui - GUI-VersionUnter Windows führen Sie .bat-Dateien durch Doppelklick aus.
Hinweis: Stellen Sie sicher, dass Sie Java 11 oder eine spätere 64-Bit-Version installiert haben. Für Windows können Sie es von oracle.com herunterladen (wählen Sie x64-Installer).
sudo pacman -S jadx
brew install jadx
flatpak install flathub com.github.skylot.jadx
Sie können jadx in Ihren Java-Projekten verwenden, Details finden Sie auf der Wiki-Seite
JDK 17 oder höher muss installiert sein:
git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist
(Unter Windows verwenden Sie gradlew.bat anstelle von ./gradlew)
Skripte zum Ausführen von jadx werden im build/jadx/bin-Verzeichnis abgelegt und auch in build/jadx-<version>.zip verpackt.
jadx[-gui] [command] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab, .xapk, .apkm, .jadx.kts)
commands (use '<command> --help' for command options):
plugins - jadx-Plugins verwalten
options:
-d, --output-dir - Ausgabeverzeichnis
-ds, --output-dir-src - Ausgabeverzeichnis für Quellen
-dr, --output-dir-res - Ausgabeverzeichnis für Ressourcen
-r, --no-res - Ressourcen nicht dekodieren
-s, --no-src - Quellcode nicht dekompilieren
-j, --threads-count - Anzahl der Verarbeitungsthreads, Standard: 16
--single-class - Eine einzelne Klasse dekompilieren, vollständiger Name, roh oder Alias
--single-class-output - Datei oder Verzeichnis zum Schreiben, wenn eine einzelne Klasse dekompiliert wird
--output-format - kann 'java' oder 'json' sein, Standard: java
-e, --export-gradle - als Gradle-Projekt speichern (setzen Sie '--export-gradle-type' auf 'auto')
--export-gradle-type - Gradle-Projektvorlage für den Export:
'auto' - automatisch erkennen
'android-app' - Android-Anwendung (apk)
'android-library' - Android-Bibliothek (aar)
'simple-java' - einfaches Java
-m, --decompilation-mode - Code-Ausgabemodus:
'auto' - beste Optionen versuchen (Standard)
'restructure' - Codestruktur wiederherstellen (normaler Java-Code)
'simple' - vereinfachte Anweisungen (linear mit goto)
'fallback' - rohe Anweisungen ohne Änderungen
--show-bad-code - inkonsistenten Code anzeigen (falsch dekompiliert)
--no-xml-pretty-print - XML nicht verschönern
--no-imports - Importe deaktivieren, immer den vollständigen Paketnamen schreiben
--no-debug-info - Debug-Informationen nicht parsen und verarbeiten
--add-debug-lines - Kommentare mit Debug-Zeilennummern hinzufügen, falls verfügbar
--no-inline-anonymous - anonyme Klassen nicht inlinen
--no-inline-methods - Methoden nicht inlinen
--no-move-inner-classes - innere Klassen nicht in die Elternklasse verschieben
--no-inline-kotlin-lambda - Kotlin-Lambdas nicht inlinen
--no-finally - finally-Block nicht extrahieren
--no-restore-switch-over-string - switch über String nicht wiederherstellen
--no-replace-consts - Konstantenwerte nicht durch passende Konstantenfelder ersetzen
--escape-unicode - nicht-lateinische Zeichen in Strings escapen (mit \u)
--respect-bytecode-access-modifiers - ursprüngliche Zugriffsmodifikatoren nicht ändern
--mappings-path - Deobfuscation-Mappings-Datei oder -Verzeichnis. Erlaubte Formate: Tiny und Tiny v2 (beide '.tiny'), Enigma (.mapping) oder Enigma-Verzeichnis
--mappings-mode - Modus für die Behandlung der Deobfuscation-Mapping-Datei festlegen:
'read' - nur lesen, Benutzer kann immer manuell speichern (Standard)
'read-and-autosave-every-change' - lesen und nach jeder Änderung automatisch speichern
'read-and-autosave-before-closing' - lesen und vor dem Beenden der App oder Schließen des Projekts automatisch speichern
'ignore' - nicht lesen oder speichern (kann verwendet werden, um das Laden von Mapping-Dateien zu überspringen, auf die in der Projektdatei verwiesen wird)
--deobf - Deobfuscation aktivieren
--deobf-min - Mindestlänge des Namens, umbenannt wenn kürzer, Standard: 3
--deobf-max - Maximallänge des Namens, umbenannt wenn länger, Standard: 64
--deobf-whitelist - Leerzeichen-getrennte Liste von Klassen (vollständiger Name) und Paketen (endet mit '.*') zum Ausschluss von der Deobfuscation, Standard: android.support.v4.* android.support.v7.* android.support.v4.os.* android.support.annotation.Px androidx.core.os.* androidx.annotation.Px
--deobf-cfg-file - Deobfuscation-Mappings-Datei für JADX-automatisch generierte Namen (im JOBF-Dateiformat), Standard: gleiches Verzeichnis und Name wie Eingabedatei mit Erweiterung '.jobf'
--deobf-cfg-file-mode - Modus für die Behandlung der Deobfuscation-Map-Datei für JADX-automatisch generierte Namen:
'read' - lesen falls vorhanden, nicht speichern (Standard)
'read-or-save' - lesen falls vorhanden, sonst speichern (nicht überschreiben)
'overwrite' - nicht lesen, immer speichern
'ignore' - nicht lesen und nicht speichern
--deobf-res-name-source - bessere Namensquelle für Ressourcen:
'auto' - automatisch den besten Namen auswählen (Standard)
'resources' - Ressourcennamen verwenden
'code' - R-Klassen-Feldnamen verwenden
--use-source-name-as-class-name-alias - Quellnamen als Klassenname-Alias verwenden:
'always' - Quellnamen immer verwenden falls verfügbar
'if-better' - Quellnamen verwenden falls er besser erscheint als der aktuelle
'never' - Quellnamen nie verwenden, auch wenn verfügbar
--source-name-repeat-limit - Quellnamen erlauben, wenn er weniger als eine Grenzzahl vorkommt, Standard: 10
--use-kotlin-methods-for-var-names - Kotlin-intrinsische Methoden zum Umbenennen von Variablen verwenden, Werte: disable, apply, apply-and-hide, Standard: apply
--use-headers-for-detect-resource-extensions - Header zur Erkennung von Ressourcenerweiterungen verwenden, wenn Ressourcen obfuskiert sind
--rename-flags - Korrekturoptionen (kommaseparierte Liste von):
'case' - Groß-/Kleinschreibungsprobleme beheben (gemäß Option --fs-case-sensitive),
'valid' - Java-Bezeichner umbenennen, um sie gültig zu machen,
'printable' - nicht druckbare Zeichen aus Bezeichnern entfernen,
oder einzelnes 'none' - um alle Umbenennungen zu deaktivieren
oder einzelnes 'all' - um alle zu aktivieren (Standard)
--integer-format - Anzeigeformat für Ganzzahlen:
'auto' - automatisch auswählen (Standard)
'decimal' - dezimal
'hexadecimal' - hexadezimal
--type-update-limit - Typaktualisierungslimit (pro Anweisung), Standard: 10
--fs-case-sensitive - Dateisystem als case-sensitiv behandeln, standardmäßig false
--cfg - Methoden-Kontrollflussgraphen in Dot-Datei speichern
--raw-cfg - Methoden-Kontrollflussgraphen speichern (rohe Anweisungen)
--call-graph - App-Aufrufgraphen speichern im Format: 'dot' oder 'json', Standard: none
-f, --fallback - setze '--decompilation-mode' auf 'fallback' (veraltet)
--use-dx - dx/d8 zum Konvertieren von Java-Bytecode verwenden
--comments-level - Code-Kommentarebene festlegen, Werte: error, warn, info, debug, user-only, none, Standard: info
--log-level - Log-Level festlegen, Werte: quiet, progress, error, warn, info, debug, Standard: progress
-v, --verbose - ausführliche Ausgabe (setzt --log-level auf DEBUG)
-q, --quiet - Ausgabe ausschalten (setzt --log-level auf QUIET)
--disable-plugins - Kommaseparierte Liste von Plugin-IDs zum Deaktivieren
--config <config-ref> - Konfiguration aus Datei laden, <config-ref> kann sein:
Pfad zu '.json'-Datei
Kurzname - verwendet Datei mit diesem Namen aus dem Konfigurationsverzeichnis
'none' - um Konfigurationsladen zu deaktivieren
--save-config <config-ref> - aktuelle Optionen in Konfigurationsdatei speichern und beenden, <config-ref> kann sein:
leer - für Standardkonfiguration
Pfad zu '.json'-Datei
Kurzname - Datei wird im Konfigurationsverzeichnis gespeichert
--print-files - von jadx verwendete Dateien und Verzeichnisse ausgeben (Konfiguration, Cache, Temp)
--version - jadx-Version ausgeben
-h, --help - diese Hilfe ausgeben
Plugin-Optionen (-P<name>=<value>):
dex-input: Lädt .dex- und .apk-Dateien
- dex-input.verify-checksum - Prüfsumme der Dex-Datei vor dem Laden verifizieren, Werte: [yes, no], Standard: yes
java-convert: Konvertiert .class-, .jar- und .aar-Dateien nach dex
- java-convert.mode - Konvertierungsmodus, Werte: [dx, d8, both], Standard: both
- java-convert.d8-desugar - Desugar in d8 verwenden, Werte: [yes, no], Standard: no
kotlin-metadata: Verwendet kotlin.Metadata-Annotation zur Codegenerierung
- kotlin-metadata.class-alias - Klassenalias umbenennen, Werte: [yes, no], Standard: yes
- kotlin-metadata.method-args - Funktionsargumente umbenennen, Werte: [yes, no], Standard: yes
- kotlin-metadata.fields - Felder umbenennen, Werte: [yes, no], Standard: yes
- kotlin-metadata.companion - Companion-Objekt umbenennen, Werte: [yes, no], Standard: yes
- kotlin-metadata.data-class - Data-Class-Modifikator hinzufügen, Werte: [yes, no], Standard: yes
- kotlin-metadata.to-string - Felder mit toString umbenennen, Werte: [yes, no], Standard: yes
- kotlin-metadata.getters - einfache Getter auf Feldnamen umbenennen, Werte: [yes, no], Standard: yes
kotlin-smap: Verwendet kotlin.SourceDebugExtension-Annotation zum Umbenennen des Klassenalias
- kotlin-smap.class-alias-source-dbg - Klassenalias von SourceDebugExtension umbenennen, Werte: [yes, no], Standard: no
rename-mappings: Unterstützung für verschiedene Mappings
- rename-mappings.format - Mapping-Format, Werte: [AUTO, TINY_FILE, TINY_2_FILE, ENIGMA_FILE, ENIGMA_DIR, PROGUARD_FILE, SRG_FILE, XSRG_FILE, JAM_FILE, CSRG_FILE, TSRG_FILE, TSRG_2_FILE, INTELLIJ_MIGRATION_MAP_FILE, RECAF_SIMPLE_FILE, JOBF_FILE], Standard: AUTO
- rename-mappings.invert - Mapping beim Laden invertieren, Werte: [yes, no], Standard: no
smali-input: Lädt .smali-Dateien
- smali-input.api-level - Android-API-Level, Standard: 27
Umgebungsvariablen:
JADX_DISABLE_XML_SECURITY - auf 'true' setzen, um alle Sicherheitsüberprüfungen für XML-Dateien zu deaktivieren
JADX_DISABLE_ZIP_SECURITY - auf 'true' setzen, um alle Sicherheitsüberprüfungen für ZIP-Dateien zu deaktivieren
JADX_ZIP_MAX_ENTRIES_COUNT - maximal zulässige Anzahl von Einträgen in ZIP-Dateien (Standard: 100.000)
JADX_CONFIG_DIR - benutzerdefiniertes Konfigurationsverzeichnis, standardmäßig System
JADX_CACHE_DIR - benutzerdefiniertes Cache-Verzeichnis, standardmäßig System
JADX_TMP_DIR - benutzerdefiniertes Temp-Verzeichnis, standardmäßig System
Beispiele:
jadx -d out classes.dex
jadx --rename-flags "none" classes.dex
jadx --rename-flags "valid, printable" classes.dex
jadx --log-level ERROR app.apk
jadx -Pdex-input.verify-checksum=no app.apk
Diese Optionen funktionieren auch in jadx-gui, wenn es von der Kommandozeile aus gestartet wird, und überschreiben die Optionen aus dem Einstellungsdialog.
Verwendung des Befehls plugins
usage: plugins [options]
options:
-i, --install <locationId> - Plugin mit locationId installieren
-j, --install-jar <path-to.jar> - Plugin aus einer JAR-Datei installieren
-l, --list - installierte Plugins auflisten
-a, --available - verfügbare Plugins aus jadx-plugins-list (auch Marktplatz genannt) auflisten
-u, --update - installierte Plugins aktualisieren
--uninstall <pluginId> - Plugin mit pluginId deinstallieren
--disable <pluginId> - Plugin mit pluginId deaktivieren
--enable <pluginId> - Plugin mit pluginId aktivieren
--list-all - alle Plugins auflisten, einschließlich gebündelter und Dropins
--list-versions <locationId> - neueste Versionen des Plugins von locationId abrufen (lädt alle Artefakte herunter, begrenzt auf 10)
-h, --help - diese Hilfe ausgeben
Bitte überprüfen Sie die Wiki-Seite Troubleshooting Q&A
Um dieses Projekt zu unterstützen, können Sie:
Lizenziert unter der Apache 2.0 Lizenz