Engenharia reversa de um arquivo APK para um projeto

244

Apaguei acidentalmente meu projeto do Eclipse , e só me resta o arquivo APK que transferi para o meu telefone. Existe uma maneira de reverter o processo de exportação de um aplicativo para o arquivo .apk, para que eu possa recuperar meu projeto?

Marko Cakic
fonte
2
você sabe que o eclipse tem um histórico de versão próprio?
eis
4
se você estiver escrevendo algo importante para você, use um VCS. Bitbucket tem repositórios privados gratuitos.
Lxknvlk 31/03
github.com/skylot/jadx
Saurabh Bhoomkar

Respostas:

287

Existem duas ferramentas úteis que geram código Java (aproximado, mas bom o suficiente) a partir de um arquivo APK desconhecido.

  1. Faça o download da ferramenta dex2jar no site dex2jar .
  2. Use a ferramenta para converter o arquivo APK em JAR :

    $ d2j-dex2jar.bat demo.apk
    dex2jar demo.apk -> ./demo-dex2jar.jar
  3. Depois que o arquivo JAR for gerado, use JD-GUI para abrir o arquivo JAR. Você verá os arquivos Java.

A saída será semelhante a:

GUI JD

rahul
fonte
6
como obter os arquivos de recursos
Srini
26
cmd está obsoleto, use d2j-dex2jar(v0.0.9.15).
Fredrick Gauss
1
@sri apenas renomeie o arquivo apk para zip e extraí-lo, você terá os arquivos de recursos em respasta
Hoang Huynh
8
@HoangHuynh você terá uma respasta com arquivos xml ilegíveis
S.Thiongane
6
Em Macse você não pode usar o dex2jar: permission deniedfaça isso $sudo chmod +x d2j-dex2jar.sh
Min2
81

Primeiro de tudo eu recomendo thisvídeo que isso seja esclarece todas as suas dúvidas

Se não, por favor, passe por isso

Procedure for decoding .apk files, step-by-step method:

Step 1:

Crie uma nova pasta e coloque o arquivo .apk nela (que você deseja decodificar). Agora renomeie a extensão deste .apkarquivo para .zip(por exemplo: renomeie de filename.apk para filename.zip) e salve-o.

Se houver problemas na conversão para .zip, consulte link

Depois de obter o arquivo .zip, agora você obtém os arquivos classes.dex, etc. Nesse estágio, você pode ver os arquivos que podem ser desenhados, mas não os arquivos xml e java, então continue. Se você não vir as extensões, verifique a configuração

Step 2:

Agora extraia esse arquivo apk zip na mesma pasta. Agora faça o download do dex2jarlink

e extraia-o para a mesma pasta. Agora abra o prompt de comando e altere o diretório para essa pasta.

Em seguida, escreva dex2jar classes.dexe pressione enter. Agora você obtém o classes.dex.dex2jararquivo na mesma pasta.

Então baixe o descompilador java

E agora clique duas vezes em jd-gui e clique em arquivo aberto. Em seguida, abra o classes.dex.dex2jararquivo dessa pasta. Agora você obtém os arquivos de classe e salva todos esses arquivos de classe (clique no arquivo e clique em "salvar todas as fontes" em jd-gui) pelo nome do src. Extraia esse arquivo zip (classes_dex2jar.src.zip)e você obterá todos os arquivos java do aplicativo.

Nesta fase, você obtém a fonte java, mas os arquivos xml ainda são ilegíveis, portanto continue.

Step 3:

Agora abra outra nova pasta e coloque esses arquivos

  1. coloque o arquivo .apk que você deseja decodificar

  2. baixar Apktool para windows v1.xAndApktool

instale a janela usando o google e coloque na mesma pasta

  1. baixe o arquivo framework-res.apk usando o google e coloque na mesma pasta (nem todos os arquivos apk precisam do arquivo framework-res.apk)

  2. Abra uma janela de comando

  3. Navegue para o diretório raiz do APKtool e digite o seguinte comando: apktool if framework-res.apk.

O comando acima deve resultar em Framework installed ....

  1. apktool d "appName" .apk ("appName" indica o aplicativo que você deseja decodificar) agora você obtém uma pasta de arquivo nessa pasta e agora também pode ler facilmente arquivos xml.

Step 4: Finalmente, obtivemos o res/código do projeto, bem como o java, que é o nosso objetivo no início.

P.S. Se você não conseguir obter a pasta res pelas etapas acima, instale um novo apktool

  • O Java 1.7 está instalado? Instale o Apktool 2.x
  • O Java 1.6 ou superior está instalado? Instale o Apktool 1.x

Enjoy and happy coding

Swapnil Sonar
fonte
realmente útil. Apenas algo que você não mencionou: o apktool.jarnão está no mesmo pacote, eu o peguei de um pacote anterior e colei no mesmo diretório que apktool.
S.Thiongane
1
i inverteu a engenharia do código, mas porque é o nome da classe, variável são como aa, bc, etc e também muitos erros
user2934930
1
incapaz de fazer isso no cmd
Meghal Agrawal
alguma outra maneira de fazer isso?
Meghal Agrawal 15/07
2
@ user2934930 Isso significa que o código foi ofuscado usando o ProGuard.
Cascal
58

Sem software e sem muitas etapas.

Faça o upload do seu APK e obtenha todos os recursos deste site.

https://www.apkdecompilers.com/

Este site descompilará o código incorporado nos arquivos APK e extrairá todos os outros ativos no arquivo.

Observação: descompile meu arquivo APK e obtenho o código em um minuto dentro deste site

Atualização 1 :

Encontrei outro site de descompilador online,

http://www.javadecompilers.com/apk/ - Não está funcionando continuamente, solicitando bloqueio de pop-ups

Atualização 2:

Encontrei o aplicativo decompiler apk na play store,

https://play.google.com/store/apps/details?id=com.njlabs.showjava

Podemos descompilar os arquivos apk em nosso telefone Android. e também podemos visualizar os arquivos java e xml nesta aplicação

Atualização 3:

Podemos usar outra opção Analisar APK recurso da versão Android studio 2.2

Construir -> Analisar APK -> Selecione seu APK -> fornece resultados

insira a descrição da imagem aqui

Ranjith Kumar
fonte
3
no último método, podemos classe java não aberta, só mostra nomes de métodos
Choletski
@Choletski você está experimentando o ShowJava? Se nenhuma tentativa e atualizar-me
Ranjith Kumar
O @RanjithKumar está limitado ao tamanho do APK de 50 MB. Eu tenho um APK de 85 MB para descompilar.
Ravi Sharma
1
Como executar esse projeto descompilado no android studio? alguém pode escrever sobre isso.
mayur kukadiya
4

Na verdade não. Existem vários conjuntos de desmontadores / descompiladores dex por aí , como smali ou dex2jar, que geram uma saída semi-humana (no caso de dex2jar, você pode obter código java usando algo como JD-GUI, mas o processo é não é perfeito e é muito improvável que você seja capaz de recriar 100% o seu código-fonte, no entanto, isso pode dar a você um lugar para começar a reconstruir sua árvore de origem.

Chris Thompson
fonte
@ MAC: Ele precisa de fonte, não o arquivo APK!
Shashank Kadne
2
@ShashankKadne pode ser que eu não estou recebendo tomar minhas palavras para trás
MAC
3

Sim, você pode recuperar seu projeto. Apenas renomeie o yourproject.apkarquivo para yourproject.zipe você obterá todos os arquivos dentro desse arquivo ZIP. Estamos alterando a extensão do arquivo de .apk para .zip. A partir desse arquivo ZIP, extraia oclasses.dex arquivo e descompile-o da seguinte maneira.

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. O código fonte resultante deve ser bastante legível, pois o dex2jar aplica algumas otimizações.

Estrela
fonte
3

Para a plataforma Android, você pode experimentar o ShowJava , disponível na Play Store.

Você pode consultar o código gerado por meio da interface do aplicativo e a estrutura de arquivos e pastas java gerada é armazenada na ShowJavapasta /sdcard, junto com o .jararquivo resultante da conversão.

O aplicativo é gratuito com um banner de anúncio na parte inferior da tela principal, mas existe uma opção de compra no aplicativo (US $ 3,99) para removê-lo. A compra no aplicativo não adiciona nenhuma funcionalidade além de remover o banner do anúncio.

Divulgação: não sou o desenvolvedor do aplicativo nem sou afiliado a ele de forma alguma.

Stephane Piriou
fonte
Eu costumo usá-lo para ... Bom aplicativo
Rahul Kushwaha 19/10/19
2

Siga as etapas abaixo para fazer isso ou simplesmente use o apkToJava gem para esse processo, ele ainda se encarrega de instalar as ferramentas necessárias para que ele funcione.

  • converter arquivo apk para zip
  • descompacte o arquivo
  • extrair classes.dex 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
Ajit Singh
fonte
2

Se você está procurando uma alternativa profissional, dê uma olhada no JEB Decompiler da PNF Software.

Existe uma versão demo que permitirá descompilar a maioria dos códigos.

usuario
fonte
2

Abaixo estão algumas das ferramentas que você pode usar para executar a engenharia reversa de um arquivo APK para o código fonte:

  1. Dex2jar
  2. Descompilador Java
  3. Apktool
  4. Analisador Apk
Mandeep Yadav
fonte
2

No Android Studio 3.5, é tão fácil que você pode alcançá-lo em um minuto. A seguir, é um processo passo a passo.

1: Abra o Android Studio, pressione o botão da janela -> Digite Android Studio -> clique no ícone para abrir a tela inicial do Android Studio, que será assim.

insira a descrição da imagem aqui

2: Aqui você pode ver uma opção "Perfil ou depurar APK", clique nela e selecione seu arquivo apk e pressione ok.

insira a descrição da imagem aqui

3: Ele abrirá todas as suas classes de manifesto e java em um minuto, dependendo do tamanho do apk.

insira a descrição da imagem aqui

É isso aí.

Imran Qamer
fonte
2

Experimente esta ferramenta: https://decompile.io , é executada no iPhone / iPad / Mac insira a descrição da imagem aqui

Qing Xu
fonte