Pergunta

Como descompilar arquivos Android DEX (VM bytecode) no código-fonte Java correspondente?

Foi útil?

Solução

É fácil

Obtenha estas ferramentas:

1) Dex2jar Para traduzir arquivos DEX em arquivos JAR

2) JD-gui Para ver os arquivos java no frasco

O código -fonte é bastante legível, pois o DEX2JAR faz algumas otimizações.

Procedimento:

E aqui está o procedimento sobre como descompilar:

Passo 1:

Convert Classes.dex em test_apk-debug.apk para test_apk-debug_dex2jar.jar

d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex

Observação: Nas máquinas Windows todas as .sh scripts são substituídos por .bat scripts

Documentação Dex2jar

Passo 2:

Abra o frasco em JD-gui

The decompiled source

Outras dicas

Para esclarecer um pouco, existem dois caminhos principais que você pode seguir aqui, dependendo do que deseja realizar:

Descompile o bytecode Dalvik (dex) em uma fonte Java legível.Você pode fazer isso facilmente com dex2jar e jd-gui, como Fred menciona.A fonte resultante é útil para ler e compreender a funcionalidade de um aplicativo, mas provavelmente não produzirá código 100% utilizável.Em outras palavras, você pode ler a fonte, mas não pode realmente modificá-la e reempacotá-la.Observe que se a fonte tiver sido ofuscada com o proguard, o código-fonte resultante será substancialmente mais difícil de desembaraçar.

A outra alternativa importante é desmontar o bytecode para pequeno, uma linguagem assembly projetada exatamente para esse propósito.Descobri que a maneira mais fácil de fazer isso é com apktool.Depois de instalar o apktool, basta apontá-lo para um arquivo apk e você receberá um arquivo smali para cada classe contida no aplicativo.Você pode ler e modificar o smali ou até mesmo substituir classes inteiramente gerando smali a partir de uma nova fonte Java (para fazer isso, você pode compilar sua fonte .java em arquivos .class com javac e, em seguida, converter seus arquivos .class em arquivos .dex com o Android dx e, em seguida, use baksmali (smali disassembler) para converter os arquivos .dex em .smali, conforme descrito em essa questão.Pode haver um atalho aqui).Quando terminar, você pode facilmente empacotar o apk novamente com o apktool.Observe que o apktool não assina o apk resultante, então você precisará cuidar disso assim como qualquer outro aplicativo Android.

Se você seguir o caminho smali, talvez queira tentar Estúdio APK, um IDE que automatiza algumas das etapas acima para ajudá-lo a descompilar e recompilar um apk e instalá-lo em um dispositivo.

Resumindo, suas opções são descompilar em Java, que é mais legível, mas provavelmente irreversível, ou desmontar em smali, que é mais difícil de ler, mas muito mais flexível para fazer alterações e reempacotar um aplicativo modificado.A abordagem escolhida dependerá do que você deseja alcançar.

Por último, a sugestão de ousar também é digno de nota.É uma ferramenta de retargeting para converter arquivos .dex e .apk em arquivos java .class, para que possam ser analisados ​​usando ferramentas típicas de análise estática java.

Eu realmente recomendo ir aqui:https://github.com/jesusfreke/smali

Ele fornece Baksmali, que é uma excelente ferramenta de engenharia reversa para arquivos DEX. É feito por Jesusfreke, o cara que criou as ROMs famamas para o Android.

Uma versão mais completa de Fred's responda:

Maneira manual

Primeiro você precisa de uma ferramenta para extrair Todas as classes (compiladas) no dex para um frasco.
Há um chamado Dex2jar, que é feito por um estudante chinês.

Então, você pode usar JD-gui para descompilar as classes no frasco para o código -fonte.
A fonte resultante deve ser bastante legível, pois o DEX2JAR aplica algumas otimizações.

Maneira automática

Você pode usar Apktool. Será automaticamente Extraia todas as classes (.dex), Recursos (.asrc), então ele converterá XML binário para XML legível pelo homem, e também vai dissimular as aulas para você.
A desmontagem sempre será mais robusta do que se descompilar, especialmente com
Jars ofuscados com Pro Guard!

Apenas diga a apktool para decodificar o apk em um diretório, então modificar o que você quer,
e finalmente codificar de volta a um apk. Isso é tudo.

Importante: Apktool dissimula. Não descompilar.
O código gerado não será a fonte Java.
Mas você deve ser capaz de lê -lo e até editá -lo se estiver familiarizado com jasmim.
Se você quer a fonte Java, por favor, vá sobre o Maneira manual.

Às vezes você tem código quebrado, ao usar dex2jar/apktool, principalmente em loops. Para evitar isso, use jadx, que descompila o bytecode Dalvik para o código -fonte java, sem criar um .jar/.class Arquive primeiro como dex2jar (Apktool usa o DEX2JAR, eu acho). Também é de código aberto e em desenvolvimento ativo. Ele ainda tem uma GUI, para gui-fanáticos. Tente!

Como ninguém mencionou isso, há mais uma ferramenta: Ded Homepage

Instale como fazer e algumas explicações: Instalação.

Foi usado em um estudo bastante interessante da segurança dos principais aplicativos de mercado (não realmente relacionados, apenas se você estiver curioso): Uma pesquisa da segurança do aplicativo Android

Eu tenho usado

  1. DEX2JAR + JD-GUI
  2. javadecompilers.com
  3. determinar
  4. Apktool

Mas nenhum supera as próprias ferramentas do Google

1)Android Studio 2.x:Construir> Analisar APKenter image description here

2)Android Studio 3.0:Perfil ou depuração apkenter image description here enter image description here

Depois de baixar seu arquivo APK, você precisa fazer as seguintes etapas para obter um código/documento Java editável.

  1. Converta seu arquivo apk em zip (enquanto inicia o seu download Não vá com a opção "Salvar", basta ir com "Salvar como" e mencione sua extensão como .zip) fazendo assim, você pode evitar o apktool ...
  2. Extraia o arquivo zip, você pode encontrar algum nome.dex. Então agora precisamos converter dex -> .class
  3. Para fazer isso, você precisa de "dex2jar" (você pode fazer o download de http://code.google.com/p/dex2jar/ , depois de extraído, no prompt de comando, você deve mencionar como, D: DEX2JAR-0.09> DEX2JAR SomeFileName.dex (Lembre -se de que seu nome de algum nome.dex deve estar dentro da mesma pasta em que você mantém seu dex2jar.)
  4. Baixar jad de http://www.viralpatel.net/blogs/download/jad/jad.zip e extrai -lo. Uma vez extraído, você pode ver dois arquivos como "jad.exe" e "readme.txt" (às vezes "jad.txt" pode lá em vez de "jad.exe", então apenas renomeie sua extensão como.exe para executar)
  5. Finalmente, no prompt de comando, você deve mencionar como D: jad> jad -sjava yourfileName.class Ele analisará seu arquivo de classe no documento Java editável.

Com DedExer, você pode desmontar o .dex Arquivo no Dalvik Bytecode (.ddx).

A decomposição em direção a Java não é possível até onde eu sei.
Você pode ler sobre Dalvik Bytecode aqui.

A engenharia reversa do Android é possível . Siga estas etapas para obter o arquivo .java do arquivo APK.

Passo 1 . Usando dex2jar

  • Gerar arquivo .jar a partir do arquivo .apk
  • comando: dex2jar sampleApp.apk

Passo 2 . Descompilar .jar usando JD-gui

  • Ele descompila os arquivos .class, ou seja, vamos conseguir ofusco .Java de volta do apk.

Pacote Recente Debian Have Python androguard:

Description-en: full Python tool to play with Android files
 Androguard is a full Python tool to play with Android files.
  * DEX, ODEX
  * APK
  * Android's binary xml
  * Android resources
  * Disassemble DEX/ODEX bytecodes
  * Decompiler for DEX/ODEX files

Instale pacotes correspondentes:

sudo apt-get install androguard python-networkx

Arquivo DEX decompile:

$ androdd -i classes.dex -o ./dir-for-output

Extrair classes.dex De apk + decompile:

$ androdd -i app.apk -o ./dir-for-output

O arquivo APK não é mais nada que o Java Archive (JAR), você pode extrair arquivos do arquivo via:

$ unzip app.apk -d ./dir-for-output

Muita coisa mudou desde que a maioria dessas respostas foi publicada. Hoje em dia, existem muitas ferramentas fáceis com a GUI, como estes:

APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit

O melhor lugar para encontrá -los é no fórum do XDA Developers.

Desde Dheeraj BhaskarA resposta é relativamente antiga no passado.

Aqui está a minha mais recente resposta (ano de 2019):

Lógica principal

a partir de dex para java sourcecode, atualmente tem dois tipos de solução:

  • One Step: converter diretamente dex para java sourcecode
  • Two Step: primeiro converter dex para jar, Segunda convertida jar para java sourcecode

Solução de uma etapa: dex Diretamente a java sourcecode

Ferramentas

Processo

  1. download jadx-0.9.0.zip, descompactando -o, em bin Pasta pode ver a linha de comando jadx ou versão da GUI jadx-gui, clique duas vezes para executar a versão da GUI: jadx-gui

  1. abrir dex Arquivo

então pode mostrar o código -fonte Java:

  1. File -> save as gradle project

Em seguida, peguei Java SourCecode:


Solução de duas etapas

Passo 1: dex para jar

Ferramentas

Processo

download zip dex2jar, UNZIP GOT d2j-dex2jar.sh, então:

  • apk para jar: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
  • dex para jar: sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex

exemplo:

➜  v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜  v3.4.8 ll
-rw-------  1 crifan  staff   9.5M  3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw-------  1 crifan  staff   8.4M  3 19 14:04 com.huili.readingclub8825612.dex

Passo 2: jar para java sourcecode

Ferramentas

Processo

aqui demonstração Procyon Converta JAR para Java Código fonte:

download Procyon-Decompiler-0.5.34.Jar

Em seguida, usando a sintaxe:

java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName

exemplo:

java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612

Usando editor Vscode Para abrir o código fonte exportado, fique assim:

Conclusão

Correção de conversão: Jadx > Procyon > CRF > JD-GUI

Recomendar uso: (Solução de uma etapa) Jadx


Para uma explicação mais detalhada, consulte meu online chinês Ebook: 安卓 应用 的 安全 和 破解

Você pode experimentar JADX (https://bitbucket.org/mstrobel/procyon/wiki/java%20Decompiler), esta é uma ferramenta perfeita para a descompilação de Dex.

E sim, também está disponível online em (meu: 0)) novo site: http://www.javadecompilers.com/apk/

Isso pode ser feito nas seguintes cinco etapas:

Esta jóia faz essas coisas para você automaticamente, mesmo a instalação das ferramentas necessárias

  1. Converta o arquivo APK em ZIP
  2. descompactar o arquivo
  3. extrair classes.dex a partir dele
  4. Use dex para jar para converter classes.dex em arquivo jar
  5. Use JADX GUI para abrir o arquivo JAR como código -fonte Java

Método mais fácil de descompilar um aplicativo Android é baixar um aplicativo nomeado Showjava de Playstore. Basta selecionar o aplicativo que precisa ser descompilado da lista de aplicativos. Existem três decompiladores diferentes que você pode usar para descompilar um aplicativo, a saber -

CFR 0.110, JADX 0.6.1 ou Fernflower (Decompilador analítico).

Se você não deseja baixar o dex2jar, basta usar o apk_grabber Script Python Para descompilar qualquer apk em arquivos JAR. Então você os lê com JD-Gui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top