Se você tem dinheiro, comprar jeb , caso contrário usar jadx , veja aqui porque
polímer
Há um novo plateform cruz (java) e ferramenta de código aberto, que permitem que você faça isso, apenas check-out bytecodeviewer: stackoverflow.com/a/36557898/795245
Gomino
Respostas:
881
É fácil
Obtenha estas ferramentas:
1) dex2jar para converter arquivos dex em arquivos jar
+1. Eu tentei tanto Baksmali e Dex2jar. O Dex2Jar + JD-Gui vence por fornecer código fonte perfeitamente legível para a maioria dos arquivos .dex.
Jonathan Dumaine
oi, por favor, compartilhe o seu caminho? Serei muito grato a você.
Arslan Anwar #
2
A frase acima tocou um sino - parece ser uma citação aqui: geeknizer.com/decompile-reverse-engineer-android-apk (ou o contrário?). Os artigos vinculados explicam brevemente as ferramentas mencionadas acima, bem como o Smali e o APKTool.
AgentKnopf
2
@JonathanDumaine que depende. Se os JARs estiverem ofuscados e você quiser fazer pequenas modificações, o Backsmali é o único caminho a percorrer. Bônus! Com o APKTool, você também recupera todos os XMLs, imagens e outros recursos. Veja minha resposta .
Alba Mendez
3
@ JonathanDumaine Concordo com jmendeth, o apktool também é o caminho a percorrer, se você deseja descompilar o apk, modificá-lo e recompilá-lo. Ao usar o dex2jar e o jd-gui, a fonte é realmente legível, mas você não pode recompilar sem alguns erros!
darkheir
138
Para esclarecer um pouco, existem dois caminhos principais que você pode seguir aqui, dependendo do que deseja realizar:
Descompile o bytecode Dalvik (dex) na fonte Java legível. Você pode fazer isso facilmente com dex2jar e jd-gui , como fred menciona. A fonte resultante é útil para ler e entender 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 reembalá-la. Observe que, se a fonte foi ofuscada com o programa, o código fonte resultante será substancialmente mais difícil de desembaraçar.
A outra alternativa importante é desmontar o bytecode para smali , uma linguagem assembly projetada exatamente para esse fim. Descobri que a maneira mais fácil de fazer isso é com o 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 inteiramente as classes, gerando o smali a partir da nova fonte Java (para fazer isso, você pode compilar a fonte .java em arquivos .class com javac e converter seus arquivos .class em arquivos .dex com o Android compilador dx e use baksmali (smali desassembler) para converter os arquivos .dex em .smali, conforme descrito nesta pergunta. Pode haver um atalho aqui). Quando terminar, você pode facilmente empacotar o apk com o apktool novamente. Observe que o apktool não assina o apk resultante, portanto, você precisará cuidar dele como qualquer outro aplicativo Android .
Se você seguir a rota smali, poderá experimentar o APK Studio , um IDE que automatiza algumas das etapas acima para ajudá-lo a descompilar e recompilar um apk e instalá-lo em um dispositivo.
Em resumo, suas escolhas são basicamente descompilar para Java, que é mais legível, mas provavelmente irreversível, ou desmontar para smali, que é mais difícil de ler, mas muito mais flexível para fazer alterações e reembalar um aplicativo modificado. Qual abordagem você escolher dependerá do que você deseja alcançar.
Por fim, a sugestão de desafio também é digna de nota. É uma ferramenta de redirecionamento para converter arquivos .dex e .apk em arquivos java .class, para que possam ser analisados usando as ferramentas típicas de análise estática de java.
Ele fornece o BAKSMALI, que é a mais excelente ferramenta de engenharia reversa para arquivos DEX. É feito por JesusFreke, o cara que criou as ROMs famosas para Android.
O smali é uma linguagem semelhante a um assembly baseada no dalvik IL, não pode ser traduzida diretamente para Java.
Reflog 15/11/10
@ Endryha Não existem ferramentas capazes de fazer isso. Veja esta pergunta para mais informações.
Alba Mendez
1
Código, código, código, ... Por que apenas código? Se você usa o APKTool, recebe tudo de volta! E é tão simples quanto ./apktool d myprogram.apk. Veja minha resposta .
Primeiro, você precisa de uma ferramenta para extrair todas as classes (compiladas) no DEX para um JAR.
Há um chamado dex2jar , feito por um estudante chinês.
Em seguida, você pode usar o jd-gui para descompilar as classes no JAR para o código-fonte.
A fonte resultante deve ser bem legível, pois o dex2jar aplica algumas otimizações.
Maneira automática
Você pode usar o APKTool . Ele irá automaticamente extrair todas as classes ( .dex), recursos ( .asrc), em seguida, ele irá converter XML binário para XML legível , e que também irá dissassemble as classes para você. A desmontagem sempre será mais robusta do que a descompilação, especialmente com
JARs ofuscados pelo Pro Guard!
Basta dizer ao APKTool para decodificar o APK em um diretório, modificar o que você deseja
e finalmente codificá- lo novamente para um APK. Isso é tudo.
Importante: o APKTool desmonta . Não descompila .
O código gerado não será fonte Java.
Mas você deve poder lê-lo e até editá-lo se estiver familiarizado com o jasmin .
Se você deseja fonte Java, consulte o manual .
Às vezes, você obtém código corrompido ao usar dex2jar/ apktool, principalmente em loops. Para evitar isso, use jadx , que decompila o bytecode do dalvik no código-fonte java, sem criar primeiro um arquivo .jar/ .classcomodex2jar (o apktool usa o dex2jar, eu acho). Também é de código aberto e em desenvolvimento ativo. Ele ainda tem uma GUI, para fanáticos por GUI. Tente!
Que tal formar um apk? colocando aulas de apk, zipalign, assinando etc.
camarada
@EnesBattal Bem, você pode ajudar a implementar que - caso contrário, você poderia usar apktool para isso .. ou sinal / zipalign com as ferramentas Android
polímer
1
@lejonl Pena de morte para você, seu monstro!
polym
17
Eu tenho usado
dex2jar + jd-gui
javadecompilers.com
enjarify
Apktool
Mas nenhum supera as próprias ferramentas do Google
Instale instruções e algumas explicações: Instalação .
Ele foi usado em um estudo bastante interessante sobre a segurança dos principais aplicativos do mercado (não muito relacionado, apenas se você estiver curioso): Uma Pesquisa sobre Segurança de Aplicativos Android
faça o download do jadx-0.9.0.zip , descompacte-o, na binpasta pode ver a linha de comando jadxou a versão da GUI jadx-gui, clique duas vezes para executar a versão da GUI:jadx-gui
estranho, mas se eu tentar executar 1 etapa (dex para descompilar o jar no Windows) através deste comando, dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dexobtive a exceção: #java.io.IOException: the src file not a .dex or zip file
28819
@ Сергей você poderia tentar: d2j-dex2jar.bat "D:\android\some_dex_file.dex"está ok ou não?
precisa saber é
sim, eu tentei exatamente, >d2j-dex2jar.bat file.dexmas não está ok. talvez seja porque meu .dexarquivo foi copiado dalvik-cache?
Сергей
1
@ Сергей sim, o motivo mais possível é o que você disse dex is copied from dalvik-cache, deveria serdex is decompiled from apk
crifan
@ Crifan, obrigado por esta resposta. JADX é impressionante. eu voltarei ao trabalho Emmanuel @ JD-Gui
Emmanuel Dupuy
13
Depois de baixar o arquivo APK, siga as etapas abaixo para obter um código / documento java editável.
Converta seu arquivo apk em zip (enquanto inicia o download, não use a opção "salvar", basta ir em "salvar como" e mencionar sua extensão como .zip), fazendo assim, para evitar o APKTOOL ...
Extraia o arquivo zip, onde você pode encontrar somefilename.dex. então agora precisamos converter dex -> .class
Para fazer isso, você precisa do "dex2jar" (você pode baixá-lo em http://code.google.com/p/dex2jar/ , após extraído, no prompt de comando, você deve mencionar como [D: \ dex2jar-0.09> dex2jar somefilename.dex] (Lembre-se de que seu somefilename.dex deve estar dentro da mesma pasta em que você mantém o seu dex2jar.)
Faça o download do jad em http://www.viralpatel.net/blogs/download/jad/jad.zip e extraia-o. Uma vez extraído, você pode ver dois arquivos como "jad.exe" e "Readme.txt" (às vezes "jad.txt" pode existir em vez de "jad.exe", renomeie sua extensão como as.exe para execução)
Finalmente, no prompt de comando, você deve mencionar como [D: \ jad> jad -sjava yourfilename.class] que ele analisará seu arquivo de classe em um documento java editável.
Mas se eu compilar novamente todo o código-fonte descompilado, ele não será executado, o compilador mostra muitos erros.
Existe alguma solução disponível para descompilar android java de código-fonte será executado no eclipse
2
Engenharia Reversa não não significa, necessariamente, decompilação . De fato, os JARs ofuscados pelo ProGuard não serão descompilados corretamente.
Alba Mendez
Se você estiver lidando com código ofuscado, é melhor desmontá- lo. Você não obterá a fonte Java, mas sempre poderá ver / modificar o código. Veja minha resposta .
Alba Mendez
Eu recomendaria descompilar e desmontar. O código descompilado resultante é mais fácil de entender, mas todas as modificações precisam ser feitas com a versão desmontada. Especialmente verdadeiro se o programa tiver sido usado. Acho que o dex2jar combinado com o jd-gui é o melhor para descompilar.
Mikko Rantalainen
6
Debian recente tem pacote 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
*Decompilerfor DEX/ODEX files
Instale os pacotes correspondentes:
sudo apt-get install androguard python-networkx
Descompile o arquivo DEX:
$ androdd -i classes.dex -o ./dir-for-output
Extrato classes.dexde Apk + Decompile:
$ androdd -i app.apk -o ./dir-for-output
O arquivo Apk nada mais é do que o Java archive (JAR), você pode extrair arquivos do archive via:
O método mais fácil de descompilar um aplicativo Android é fazer o download de um aplicativo chamado ShowJava no playstore. Basta selecionar o aplicativo que precisa ser descompilado na lista de aplicativos. Existem três descompiladores diferentes que você pode usar para descompilar um aplicativo, a saber:
CFR 0.110, JaDX 0.6.1 ou FernFlower (descompilador analítico).
Respostas:
É fácil
Obtenha estas ferramentas:
1) dex2jar para converter arquivos dex em arquivos jar
2) jd-gui para visualizar os arquivos java no jar
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:
Converta classes.dex em test_apk-debug.apk em test_apk-debug_dex2jar.jar
documentação dex2jar
Passo 2:
Abra o jar no JD-GUI
fonte
Para esclarecer um pouco, existem dois caminhos principais que você pode seguir aqui, dependendo do que deseja realizar:
Descompile o bytecode Dalvik (dex) na fonte Java legível. Você pode fazer isso facilmente com dex2jar e jd-gui , como fred menciona. A fonte resultante é útil para ler e entender 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 reembalá-la. Observe que, se a fonte foi ofuscada com o programa, o código fonte resultante será substancialmente mais difícil de desembaraçar.
A outra alternativa importante é desmontar o bytecode para smali , uma linguagem assembly projetada exatamente para esse fim. Descobri que a maneira mais fácil de fazer isso é com o 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 inteiramente as classes, gerando o smali a partir da nova fonte Java (para fazer isso, você pode compilar a fonte .java em arquivos .class com javac e converter seus arquivos .class em arquivos .dex com o Android compilador dx e use baksmali (smali desassembler) para converter os arquivos .dex em .smali, conforme descrito nesta pergunta. Pode haver um atalho aqui). Quando terminar, você pode facilmente empacotar o apk com o apktool novamente. Observe que o apktool não assina o apk resultante, portanto, você precisará cuidar dele como qualquer outro aplicativo Android .
Se você seguir a rota smali, poderá experimentar o APK Studio , um IDE que automatiza algumas das etapas acima para ajudá-lo a descompilar e recompilar um apk e instalá-lo em um dispositivo.
Em resumo, suas escolhas são basicamente descompilar para Java, que é mais legível, mas provavelmente irreversível, ou desmontar para smali, que é mais difícil de ler, mas muito mais flexível para fazer alterações e reembalar um aplicativo modificado. Qual abordagem você escolher dependerá do que você deseja alcançar.
Por fim, a sugestão de desafio também é digna de nota. É uma ferramenta de redirecionamento para converter arquivos .dex e .apk em arquivos java .class, para que possam ser analisados usando as ferramentas típicas de análise estática de java.
fonte
Na verdade, eu recomendo ir aqui: https://github.com/JesusFreke/smali
Ele fornece o BAKSMALI, que é a mais excelente ferramenta de engenharia reversa para arquivos DEX. É feito por JesusFreke, o cara que criou as ROMs famosas para Android.
fonte
./apktool d myprogram.apk
. Veja minha resposta .Uma versão mais completa de fred 's resposta :
Maneira manual
Primeiro, você precisa de uma ferramenta para extrair todas as classes (compiladas) no DEX para um JAR.
Há um chamado dex2jar , feito por um estudante chinês.
Em seguida, você pode usar o jd-gui para descompilar as classes no JAR para o código-fonte.
A fonte resultante deve ser bem legível, pois o dex2jar aplica algumas otimizações.
Maneira automática
Você pode usar o APKTool . Ele irá automaticamente extrair todas as classes (
.dex
), recursos (.asrc
), em seguida, ele irá converter XML binário para XML legível , e que também irá dissassemble as classes para você.A desmontagem sempre será mais robusta do que a descompilação, especialmente com
JARs ofuscados pelo Pro Guard!
Basta dizer ao APKTool para decodificar o APK em um diretório, modificar o que você deseja
e finalmente codificá- lo novamente para um APK. Isso é tudo.
Importante: o APKTool desmonta . Não descompila .
O código gerado não será fonte Java.
Mas você deve poder lê-lo e até editá-lo se estiver familiarizado com o jasmin .
Se você deseja fonte Java, consulte o manual .
fonte
Às vezes, você obtém código corrompido ao usar
dex2jar
/apktool
, principalmente em loops. Para evitar isso, use jadx , que decompila o bytecode do dalvik no código-fonte java, sem criar primeiro um arquivo.jar
/.class
comodex2jar
(o apktool usa o dex2jar, eu acho). Também é de código aberto e em desenvolvimento ativo. Ele ainda tem uma GUI, para fanáticos por GUI. Tente!fonte
javac "$(find . -name '*.java')"
?Eu tenho usado
Mas nenhum supera as próprias ferramentas do Google
1) Android Studio 2.x: construir> analisar apk
2) Android Studio 3.0: perfil ou depuração APK
fonte
Como ninguém mencionou isso, há mais uma ferramenta: página inicial do DED
Instale instruções e algumas explicações: Instalação .
Ele foi usado em um estudo bastante interessante sobre a segurança dos principais aplicativos do mercado (não muito relacionado, apenas se você estiver curioso): Uma Pesquisa sobre Segurança de Aplicativos Android
fonte
Desde que
Dheeraj Bhaskar
a resposta é relativamente antiga como muitos anos atrás.Aqui está minha resposta mais recente (ano de 2019):
Lógica principal
de
dex
parajava sourcecode
, atualmente, tem dois tipos de solução:One Step
: converter diretamentedex
parajava sourcecode
Two Step
: primeiro converterdex
parajar
, segundo converterjar
parajava sourcecode
Solução de uma etapa:
dex
diretamente parajava sourcecode
Ferramentas
Processo
bin
pasta pode ver a linha de comandojadx
ou a versão da GUIjadx-gui
, clique duas vezes para executar a versão da GUI:jadx-gui
dex
arquivoentão pode mostrar o código fonte do java:
File
->save as gradle project
então obtém o código-fonte java:
Solução em duas etapas
Etapa 1:
dex
parajar
Ferramentas
Processo
faça o download do dex2jar zip , descompacte o arquivo got e
d2j-dex2jar.sh
, em seguida: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:
Etapa 2:
jar
parajava sourcecode
Ferramentas
many
código irá descompilar o errominor
código descompilará o errono
erro de descompilação de códigoProcyon
Processo
aqui demo
Procyon
converta jar em código-fonte java:Download procyon-decompiler-0.5.34.jar
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 o editor VSCode para abrir o código fonte exportado, fique assim:
Conclusão
Correção de conversão:
Jadx
>Procyon
>CRF
>JD-GUI
Recomende o uso: (soluções de uma etapa)
Jadx
para uma explicação mais detalhada, consulte o meu e- livro chinês online : 安卓 应用 的 安全 和 破解
fonte
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dex
obtive a exceção: #java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
está ok ou não?>d2j-dex2jar.bat file.dex
mas não está ok. talvez seja porque meu.dex
arquivo foi copiadodalvik-cache
?dex is copied from dalvik-cache
, deveria serdex is decompiled from apk
Depois de baixar o arquivo APK, siga as etapas abaixo para obter um código / documento java editável.
fonte
Com o Dedexer , você pode desmontar o
.dex
arquivo no dalvik bytecode (.ddx
).Descompilar para Java não é possível, tanto quanto eu sei.
Você pode ler sobre o dalvik bytecode aqui .
fonte
A engenharia reversa do Android é possível . Siga estas etapas para obter o arquivo .java do arquivo apk.
Passo 1 . Usando dex2jar
dex2jar sampleApp.apk
Passo 2 . Descompilando .jar Usando JD-GUI
fonte
Debian recente tem pacote Python
androguard
:Instale os pacotes correspondentes:
Descompile o arquivo DEX:
Extrato
classes.dex
de Apk + Decompile:O arquivo Apk nada mais é do que o Java archive (JAR), você pode extrair arquivos do archive via:
fonte
Muita coisa mudou desde que a maioria dessas respostas foi publicada. Hoje em dia existem muitas ferramentas fáceis com GUIs, como estas:
O melhor lugar para encontrá-los é no fórum XDA Developers.
fonte
Você pode experimentar o JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), esta é uma ferramenta perfeita para a descompilação do DEX.
E sim, também está disponível on-line no (meu: 0)) novo site: http://www.javadecompilers.com/apk/
fonte
Isso pode ser feito nas cinco etapas a seguir:
Esta jóia faz essas coisas automaticamente, mesmo para a instalação das ferramentas necessárias
fonte
O método mais fácil de descompilar um aplicativo Android é fazer o download de um aplicativo chamado ShowJava no playstore. Basta selecionar o aplicativo que precisa ser descompilado na lista de aplicativos. Existem três descompiladores diferentes que você pode usar para descompilar um aplicativo, a saber:
fonte
Se você não deseja baixar o dex2jar, use o
apk_grabber
script python para descompilar qualquer apk em arquivos jar. Então você os lê com jd-gui.fonte