jadX : Android Reverse Engineering dari Android Dex ke File Java
Jadx merupakan aplikasi berbasis Command line dan GUI yang memungkinkan untuk melakukan konversi ke file source java dan file android Dex atau file apk.
Fitur utama:
- decompile Dalvik bytecode ke java classes dari APK, dex, aar dan file zip
- decode AndroidManifest.xml
- termasuk melakukan deobfuscator
Fitur jadx-gui:
- melihat hasil code yang sudah di decopile dilengkapi dengan highlighted syntax
- jump to declaration
- find usage dan full text search
Jadx tersedia di windows, linux, mac. Untuk menjalankannya pastikan sudah terinstall java 8 atau terbaru untuk versi 64-bit.
Install
1. Arch linux
sudo pacman -S jadx
2. macOS
brew install jadx
Build from source
git clone https://github.com/skylot/jadx.git cd jadx ./gradlew dist
(on Windows, use gradlew.bat instead of ./gradlew)
Scripts for run jadx will be placed in build/jadx/bin and also packed to build/jadx-<version>.zip
Usage
jadx[-gui] [options] <input file> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc)
options:
-d, –output-dir – output directory
-ds, –output-dir-src – output directory for sources
-dr, –output-dir-res – output directory for resources
-r, –no-res – do not decode resources
-s, –no-src – do not decompile source code
–single-class – decompile a single class
–output-format – can be ‘java’ or ‘json’, default: java
-e, –export-gradle – save as android gradle project
-j, –threads-count – processing threads count, default: 4
–show-bad-code – show inconsistent code (incorrectly decompiled)
–no-imports – disable use of imports, always write entire package name
–no-debug-info – disable debug info
–no-inline-anonymous – disable anonymous classes inline
–no-replace-consts – don’t replace constant value with matching constant field
–escape-unicode – escape non latin characters in strings (with \u)
–respect-bytecode-access-modifiers – don’t change original access modifiers
–deobf – activate deobfuscation
–deobf-min – min length of name, renamed if shorter, default: 3
–deobf-max – max length of name, renamed if longer, default: 64
–deobf-rewrite-cfg – force to save deobfuscation map
–deobf-use-sourcename – use source file name as class name alias
–rename-flags – what to rename, comma-separated, ‘case’ for system case sensitivity, ‘valid’ for java identifiers, ‘printable’ characters, ‘none’ or ‘all’ (default)
–fs-case-sensitive – treat filesystem as case sensitive, false by default
–cfg – save methods control flow graph to dot file
–raw-cfg – save methods control flow graph (use raw instructions)
-f, –fallback – make simple dump (using goto instead of ‘if’, ‘for’, etc)
-v, –verbose – verbose output (set –log-level to DEBUG)
-q, –quiet – turn off output (set –log-level to QUIET)
–log-level – set log level, values: QUIET, PROGRESS, ERROR, WARN, INFO, DEBUG, default: PROGRESS
–version – print jadx version
-h, –help – print this help
Example:
- jadx -d out classes.dex
- jadx –rename-flags “none” classes.dex
- jadx –rename-flags “valid,printable” classes.dex
- jadx –log-level error app.apk
untuk lebih ke jelasnya bisa meluncur ke https://github.com/skylot/jadx