JADX

Build status Alerts from lgtm.com semantic-release Maven Central License

jadx - Descompilador de Dex a Java

Herramientas de línea de comandos y GUI para producir código fuente Java a partir de archivos Dex y Apk de Android

Tenga en cuenta que, en la mayoría de los casos, jadx no puede descompilar el 100 % del código, por lo que se producirán errores. Consulte la guía de solución de problemas para obtener soluciones alternativas

Main features:

  • descompilar bytecode Dalvik a clases java desde archivos APK,dex,aar,aab y zip
  • decodificar AndroidManifest.xml y otros recursos de resources.arsc
  • deobfuscator included

jadx-gui features:

  • ver el código descompilado con la sintaxis resaltada
  • saltar a la declaración
  • find usage
  • búsqueda de texto completo
  • depurador pequeño, consulte la página wiki para la configuración y el uso

Las combinaciones de teclas Jadx-gui se pueden encontrar aquí

Vea estas funciones en acción aquí: descripción general de las funciones de jadx-gui

Download

Después de descargar, descomprima el archivo zip, vaya al directorio bin y ejecute:

  • jadx - versión de línea de comandos
  • jadx-gui - versión de interfaz de usuario

En Windows, ejecute archivos .bat con doble clic
Nota: asegúrese de haber instalado Java 11 o una versión posterior de 64 bits. Para Windows, puede descargarlo desde oracle.com (seleccione el instalador x64).

Install

  1. Arch linux
        sudo pacman -S jadx
  2. macOS
        brew install jadx

Utilizar jadx como biblioteca

Puede usar jadx en sus proyectos java, verifique los detalles en la página wiki

Construir desde el origen

Debe instalarse el JDK 8 o superior:

git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist

(en Windows, use gradlew.bat en lugar de ./gradlew )

Los scripts para ejecutar jadx se colocarán en build/jadx/bin y también se empaquetarán en build/jadx-<version>.zip

Usage

jadx[-gui] [options] <input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab)
options:
  -d, --output-dir - directorio de salida
  -ds, --output-dir-src - directorio de salida para las fuentes
  -dr, --output-dir-res - directorio de salida para recursos
  -r, --no-res - no decodificar recursos
  -s, --no-src - no descompilar el código fuente
  --single-class: descompila una sola clase, nombre completo, sin formato o alias
  --single-class-output - archivo o directorio para escritura si se descompila una sola clase
  --formato de salida - puede ser 'java' o 'json', por defecto: java
  -e, --export-gradle - guardar como proyecto gradle de Android
  -j, --threads-count - recuento de subprocesos de procesamiento, predeterminado: 4
  -m, --decompilation-mode - modo de salida de código:
                                         'auto' - trying best options (default)
                                         'restructure' - restore code structure (normal java code)
                                         'simple' - simplified instructions (linear, with goto's)
                                         'fallback' - raw instructions without modifications
  --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
  --add-debug-lines                   - add comments with debug line numbers if available
  --no-inline-anonymous               - disable anonymous classes inline
  --no-inline-methods                 - disable methods inline
  --no-replace-consts                 - don't replace constant value with matching constant field
  --escape-unicode - escape de caracteres no latinos en cadenas (con \u)
  --respect-bytecode-access-modifiers - no cambie los modificadores de acceso originales
  --deobf - activar la desofuscación
  --deobf-min - longitud mínima del nombre, renombrado si es más corto, predeterminado: 3
  --deobf-max - longitud máxima del nombre, renombrado si es más largo, predeterminado: 64
  --deobf-cfg-file - archivo de mapa de desofuscación, predeterminado: mismo directorio y nombre que el archivo de entrada con la extensión '.jobf'
  --deobf-cfg-file-mode - establece el modo para manejar el archivo de mapa de desofuscación:
                                         'read' - read if found, don't save (default)
                                         'read-or-save' - read if found, save otherwise (don't overwrite)
                                         'overwrite' - don't read, always save
                                         'ignore' - don't read and don't save
  --deobf-rewrite-cfg                 - set '--deobf-cfg-file-mode' a 'sobrescribir' (obsoleto)
  --deobf-use-sourcename - usa el nombre del archivo fuente como alias de nombre de clase
  --deobf-parse-kotlin-metadata: analiza los metadatos de kotlin en nombres de clases y paquetes
  --use-kotlin-methods-for-var-names: use los métodos intrínsecos de kotlin para cambiar el nombre de las variables, valores: deshabilitar, aplicar, aplicar y ocultar, predeterminado: aplicar
  --rename-flags - opciones de corrección (lista separada por comas de):
                                         'case' - fix case sensitivity issues (according to --fs-case-sensitive option),
                                         'valid' - rename java identifiers to make them valid,
                                         'printable' - remove non-printable chars from identifiers,
                                        or single 'none' - to disable all renames
                                        or single 'all' - to enable all (default)
  --fs-sensible a mayúsculas y minúsculas: trata el sistema de archivos como sensible a mayúsculas y minúsculas, falso de forma predeterminada
  --cfg - guardar el gráfico de flujo de control de métodos en un archivo de puntos
  --raw-cfg - guardar el gráfico de flujo de control de métodos (usar instrucciones sin formato)
  -f, --fallback - establece '--decompilation-mode' en 'fallback' (obsoleto)
  --use-dx - use dx/d8 para convertir el código de bytes de Java
  --comentarios-nivel: establece el nivel de comentarios del código, valores: error, advertencia, información, depuración, solo para el usuario, ninguno, predeterminado: información
  --log-level - establece el nivel de registro, valores: silencio, progreso, error, advertencia, información, depuración, predeterminado: progreso
  -v, --verbose - salida detallada (establecer --log-level en DEBUG)
  -q, --quiet - apaga la salida (establece --log-level en QUIET)
  --version - imprime la versión jadx
  -h, --help - imprime esta ayuda

Plugin options (-P<name>=<value>):
  1) dex-input (Load .dex and .apk files)
    -Pdex-input.verify-checksum       - Verify dex file checksum before load, values: [yes, no], default: yes
  2) java-convert (Convert .jar and .class files to dex)
    -Pjava-convert.mode               - Convert mode, values: [dx, d8, both], default: both
    -Pjava-convert.d8-desugar         - Use desugar in d8, values: [yes, no], default: no

Examples:
  jadx -d out classes.dex
  jadx --rename-flags "ninguno" clases.dex
  jadx --rename-flags clases "válidas e imprimibles".dex
  jadx --log-level ERROR app.apk
  jadx -Pdex-input.verify-checksum=no app.apk

Estas opciones también funcionan en jadx-gui ejecutado desde la línea de comandos y anulan las opciones del diálogo de preferencias

Troubleshooting

Consulte la página wiki Preguntas y respuestas sobre solución de problemas

Contributing

Para apoyar este proyecto puedes:

  • Publique sus opiniones sobre las nuevas características/optimizaciones que le resulten importantes
  • Envíe problemas de descompilación, lea antes de continuar: Problema abierto
  • Abra una solicitud de extracción, siga estas reglas: Proceso de solicitud de extracción

Con licencia bajo la licencia Apache 2.0