descompilando DEX em código-fonte Java
-
12-09-2019 - |
Pergunta
Como descompilar arquivos Android DEX (VM bytecode) no código-fonte Java correspondente?
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
Passo 2:
Abra o frasco em JD-gui
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
Depois de baixar seu arquivo APK, você precisa fazer as seguintes etapas para obter um código/documento Java editável.
- 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 ...
- Extraia o arquivo zip, você pode encontrar algum nome.dex. Então agora precisamos converter dex -> .class
- 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.)
- 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)
- 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.
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 Bhaskar
A 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 diretamentedex
parajava sourcecode
Two Step
: primeiro converterdex
parajar
, Segunda convertidajar
parajava sourcecode
Solução de uma etapa: dex
Diretamente a java sourcecode
Ferramentas
Processo
- download jadx-0.9.0.zip, descompactando -o, em
bin
Pasta pode ver a linha de comandojadx
ou versão da GUIjadx-gui
, clique duas vezes para executar a versão da GUI:jadx-gui
- abrir
dex
Arquivo
então pode mostrar o código -fonte Java:
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
parajar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
parajar
: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
- JD-gui: mais popular, mas
many
Código vai descompilar o erro - CRF: popular,
minor
Código vai descompilar o erro - Procyon: popular,
no
Erro de decompilo de código- Ferramenta GUI com base em
Procyon
- Ferramenta GUI com base em
- outros
- Krakatau
- Fernflower
- antigo: Androchef
- etc.
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
- Converta o arquivo APK em ZIP
- descompactar o arquivo
- extrair classes.dex a partir dele
- Use dex para jar para converter classes.dex em arquivo jar
- 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.