Android APK Reverse Engineering — 01

Daiane Santos
2 min readApr 26, 2020

Avengers, Disassemble!

Aqui encontraremos um passo-a-passo de como realizar a Engenharia Reversa de um APK.

Começando pelo básico, podemos dividir o nosso Android Package (APK) em algumas partes:

  • AndroidManifest.xml

Composto por todas as permissões que a aplicação vai ter, é responsável por fazer a definição da arquitetura desse apk. Dentro dele encontramos requisição de acesso a internet, GPS, notificações e qualquer outra coisa que o aplicativo venha a necessitar, são geralmente os acessos que o aplicativo pede na hora da instalação. Além disso, encontramos informações voltadas a versionamento, nome da aplicação, requisitos mínimos para que ela funcione, componentes voltados para Receivers, Senders e Providers e componentes

Abaixo temos um exemplo do que encontramos nesse xml:

uses-permission android:name="android.permission.INTERNET" uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" uses-permission android:name="android.permission.VIBRATE" uses-permission android:name="android.permission.WAKE_LOCK" uses-permission android:name="com.android.vending.BILLING"

Note que, em diversas aplicações, várias requisições de permissões são feitas mesmo que o app em si não necessite de tais funções.

  • META-INF/

Essa pasta contém dados relacionados ao Manifest e outros metadatas carregados pelo arquivo .jar.

Dentro dele encontraremos os seguintes arquivos:

- MANIFEST.MF: versão do pacote, número da compilação, criador, etc. 
- CERT.SF: Nesse doc encontramos a lista de todos os arquivos junto com o resumo do SHA-1.
- CERT.RSA: Aqui temos o conteúdo assinado do arquivo CERT.SF, juntamente com os certificados da chave pública usada para assinatura.
  • classes.dex

Quando descompilamos o apk, no .dex teremos todas as classes java que estão presentes no código do aplicativo. Esses arquivos são os exexutados pelo DVM (Dalvik Virtual Machine)e não inclui os recursos, que são mantidos separadamente na pasta /res.

Caso você decida modificar esse arquivo, estará alterando o comportamento dos programas; se excluir, ele deixará de ter um código executável.

  • lib/

Composto pelas bibliotecas nativas da aplicação.

  • assets/

Carregam consigo bibliotecas adicionais e outros arquivos que possam ser necessários para o App.

.

.

.

(Mais detalhes podem ser encontrados aqui.)

--

--