É possível descompilar um arquivo .apk do Android?

86

Os usuários podem converter o arquivo apk do meu aplicativo de volta para o código real? Se o fizerem - há alguma maneira de evitar isso?

aryaxt
fonte
1
Existem vários métodos de descompilar o APK . Acabei de fazer o APKTool com mais frequência, é o melhor e mais poderoso. É muito fácil modificar arquivos apk com ele.
Taranfx
Eu escrevi uma postagem no blog aqui: codexplo.wordpress.com/2012/03/15/… mas, novamente, seria difícil para o código ofuscado ...
rokonoid
1
yeblon.com/how-to-decompile-android-apk-app-files - Isso pode acontecer
Badr Hari

Respostas:

80

Primeiro, um arquivo apk é apenas um arquivo jar modificado. Portanto, a verdadeira questão é se eles podem descompilar os arquivos dex dentro dele. A resposta é mais ou menos. Já existem desmontadores, como dedexer e smali . Você pode esperar que eles apenas melhorem e, teoricamente, deve ser possível descompilar para o código-fonte Java real (pelo menos às vezes). Consulte a pergunta anterior descompilando DEX em código fonte Java .

O que você deve lembrar é que a ofuscação nunca funciona. Escolha uma boa licença e faça o seu melhor para aplicá-la por meio da lei. Não perca tempo com medidas técnicas não confiáveis.

Matthew Flaschen
fonte
45
Nunca diga nunca. A ofuscação não deterá um ladrão determinado, mas diminuirá ou deterá muitos outros. Processar com Proguard é uma maneira fácil e CONFIÁVEL de ofuscar seu código e, como bônus, ele também irá otimizá-lo. E está incluído no Android SDK, por isso é endossado pelo Google.
Barry Fruitman
3
A ofuscação definitivamente funciona, mas você precisa definir mais claramente qual é o seu objetivo. Obviamente, a única maneira de manter seu código-fonte verdadeiramente seguro é nunca dar a ninguém acesso a ele, servidor ou cliente. Observe que o Proguard não funciona bem em classes que possuem referências em arquivos XML. Você precisa utilizar a ofuscação manual para contornar isso.
MattC
35

A descompilação do arquivo APK é possível. Mas pode ser difícil entender o código se ele estiver ofuscado.

ApkTool para visualizar recursos dentro do arquivo APK

  • Extrai AndroidManifest.xml e tudo na pasta res (arquivos de layout xml, imagens, htmls usados ​​no webview etc.)
  • comando: apktool.bat d sampleApp.apk
  • NOTA: Você pode fazer isso usando um utilitário zip como o 7-zip. Mas, também extrai o arquivo .smali de todos os arquivos .class.

Usando dex2jar

  • Gera um arquivo .jar a partir do arquivo .apk, precisamos do JD-GUI para visualizar o código-fonte deste .jar.
  • comando: dex2jar sampleApp.apk

Descompilar .jar usando JD-GUI

  • descompila os arquivos .class (ofuscados - no caso do aplicativo Android, mas um código original legível é obtido no caso de outro arquivo .jar). ou seja, obtemos .java de volta do aplicativo.
gtiwari333
fonte
apktool não cospe arquivos de origem java! Apenas smali
IgorGanapolsky
1
como já disse na resposta, apktool cria .jar a partir de .apk e temos que usar a ferramenta JD-GUI para descompilar .jar para obter arquivos de origem .java.
gtiwari333
1
você salvou minha vida! que postagem incrível! Perdi os últimos dois dias de código por causa de um SSD com falha (infelizmente, não me comprometi com o git). No entanto, eu tinha o apk e agora tenho minha fonte, veja bem, um pouco diferente, mas fonte!
farcrats de
3

Devo acrescentar que hoje em dia é possível descompilar o aplicativo Android online, sem a necessidade de software!

Aqui estão 2 opções para você:

Andrew Rukin
fonte
decompileandroid.com está offline (quando você carregar o apk, você terá problemas para baixá-lo novamente) e javadecompilers.com/apk colocou meu apk em uma fila por um longo tempo. Fiquei offline, depois online, ainda estava na fila. Limpei todo o histórico de navegação e agora o apk que carreguei pela segunda vez está na fila.
iOSAndroidWindowsMobileAppsDev
1

Baixe esta ferramenta jadx https://sourceforge.net/projects/jadx/files/

Descompacte-o e, na pasta lib, execute o arquivo jadx-gui-0.6.1.jar e navegue no arquivo apk. Está feito. O apk irá descompilar automaticamente e salvá-lo pressionando o botão Salvar. Espero que funcione para você. obrigado

akhilesh Jha
fonte
0

Às vezes, você obtém código quebrado, ao usar dex2jar/ apktool, principalmente em loops. Para evitar isso, use jadx , que decompila o bytecode dalvik em código-fonte java, sem criar um arquivo .jar/ .classprimeiro como dex2jarfaz (apktool usa dex2jar, eu acho). Ele também é de código aberto e está em desenvolvimento ativo. Ele ainda tem uma GUI, para fanáticos por GUI. Tente!

polym
fonte
0

Os usuários podem converter o arquivo apk do meu aplicativo de volta para o código real?

sim.

As pessoas podem usar várias ferramentas para:

  • análise: seu apk
  • decodificar / hackear seu apk
    • usando FDex2para despejar o dexarquivo
      • então usando dex2jarpara converter parajar
        • em seguida, usando jadxpara converter para o javacódigo-fonte

Se o fizerem - há alguma maneira de evitar isso?

sim. Várias (podem ser combinadas) maneiras de prevenir (certo grau) isso:

  • nível baixo: ofuscação de código
    • usando Android ProGuard
  • alto nível: use o cenário de proteção do Android

Mais detalhes podem consultar meu tutorial chinês :安卓 应用 的 安全 和 破解

crifan
fonte
0

Sim, existem muitos softwares disponíveis para descompilar um arquivo .apk.

Recentemente, eu compilei uma lista definitiva dos 47 melhores descompiladores de APK no meu site. Organizei-os em 4 seções diferentes.

  1. Descompiladores de APK de código aberto
  2. Descompiladores de APK online
  3. APK Decompiler para Windows, Mac ou Linux
  4. Aplicativos descompiladores de APK

Espero que esta coleção seja útil para você.

Link: https://www.edopedia.com/blog/best-apk-decompilers/

Muhammad Furqan Ul Haq
fonte