sexta-feira, 15 de agosto de 2014

Python + Android + RE = AndroGuard

Pessoal,

Hoje eu decidi escrever um pouco sobre uma ferramenta que eu descobri recentemente e achei muito interessante (vou fazer um pequeno tutorial hehe)! O AndroGuard é uma ferramenta escrita em Python para realizar engenharia reversa em aplicações para Android (muito bom para análise estática e automatização de tarefas comuns de RE). Espero mostrar nessa postagem uma pouco sobre a utilização do AndroGuard e algumas de suas principais funcionalidades.

Instalação 

 

Você pode instalar o AndroGuard facilmente:
  • hg clone https://androguard.googlecode.com/hg/ androguard 
Python 2.6 (ou superior) é necessário para rodar o AndroGuard. Você também pode instalar alguns pacotes opcionais (Ubuntu/Debian):
  • sudo apt-get install python-dev python-bzutils libbz2-dev libmuparser-dev libsparsehash-dev python-ptrace python-pygments python-pydot graphviz liblzma-dev libsnappy-dev
  • sudo easy_install ipython

 

Análise Estática: Iniciando o Androlyze


Para iniciar o androguard, vamos utilizar o  'androlyze.py' (Figura 01)

Figura 01: Rodando o androlyze.py
 O método 'AnalyzeAPK' pode ser utilizado para iniciar uma análise em um determinado arquivo apk (Figura 02). Este método recebe dois parâmetros de entrada (path do apk e o nome do decompiler que vai ser utilizado) e devolve três variáveis (objetos): apk (APK), dvm (DalvikVMFormat) e dex (VMAnalysis). Vamos ver que informações podemos tirar de cada um desses objetos.

Figura 02: AnalyzeAPK

 

Análise Estática: AndroidManifest.xml


Podemos utilizar nosso objeto apk para tirar algumas informações básicas do AndroidManifest.xml (como por exemplo: Permissões, Activities e Services). Vamos começar visualizando as permissões utilizadas pelo aplicativo (Figura 03).

Figura 03: Listando permissões
Activities também podem ser facilmente exibidas com o método 'get_activities'.

Figura 04: Listando Activities
Broadcast receivers e Services também podem ser listados (Figura 05).

Figura 05: Broadcast receivers e Services
O objeto apk oferece outros métodos muito interessantes para retirar informações básicas sobre o AndroidManifest. Você pode utilizar o método 'show' para pegar uma descrição mais detalhada sobre o arquivo Apk e o AndroidManifest.xml. Eu não coloquei nenhum exemplo de Content Providers por que o apk que eu estou analisando não possui nenhum deles.

Análise Estática: Decompilação

 

O próximo passo é listar os métodos e variáveis de cada classe. Podemos utilizar os método 'get_classes', 'get_methods' e 'get_fields' do objeto dvm para obter as informações desejadas. A figura 06 apresenta um exemplo contendo um pequeno loop para exibir os nomes das variáveis e métodos de todas as classes.

Figura 06: Obtendo informações de classes
Podemos utilizar o método 'get_class' para pegar uma classe específica. Para terminar este pequeno tutorial, podemos também obter o código fonte (ou algo próximo ao original) das classes com o método 'source'. A figura 07 apresenta um exemplo de código fonte obtido de uma classe específica.

Figura 07: Exemplo de decompilação

Conclusão


Nesta postagem eu escrevi um pequeno tutorial sobre o AndroGuard. Esta ferramenta é ótima para análise estática de aplicações desenvolvidas para Android. Eu acredito que a vantagem do AndroGuard é centralizar as funcionalidades de várias ferramentas e um único lugar. Você também utilizar esta ferramenta para automatizar algumas tarefas em seu processo de análise estática. Por favor escrevam suas sugestões e comentários!

Obrigado :)

Keep Hacking!

Nenhum comentário:

Postar um comentário