terça-feira, 26 de agosto de 2014

Engenharia Reversa no Corona SDK (Android / iOS)

Pessoal,

Hoje eu vou estar falando um novamente sobre aplicações mobile e também sobre o framework Corona SDK. Eu também vou estar publicando uma ferramenta que acabei desenvolvendo durante alguns projetos que eu peguei contendo aplicações geradas com o Corona SDK.

Introdução


O Corona SDK é um framework para a criação de aplicações mobile (Android e iOS). As aplicações são geradas utilizando a linguagem LUA e posteriormente são "convertidas" para a linguagem específica de cada plataforma (Java para Android e Objective-C para iOS). O Corona SDK se apresenta bastante famoso no cenário de games para dispositivos mobile.

Processo de criação / decompilação


O Corona SDK na realidade transforma os códigos LUA em uma representação intermediária (bytecodes) e armazena tudo em um arquivo chamado 'resource.car'. Para realizar a decompilação vamos ter que realizar os seguintes passos:
  1. Obter o arquivo 'resource.car' de dentro do arquivo apk / ipa (Tarefa fácil de realizar com um dispositivo jailbroken/rooted)
  2. Extrair os bytecodes de cada arquivo no 'resource.car'
  3. Realizar a decompilação do bytescodes e obter o código fonte (este passo pode ser realizado com alguns decompilers públicos ja existentes)

ResourceCarUnpacker.py


Eu criei um pequeno script em Python para automatizar os passos 2 e 3 do processo de extração / decompilação. O script abre o arquivo 'resource.car', extrai os bytecodes de cada arquivo fonte (em um diretorio chamado 'byteCode') e utiliza o 'unluac.jar' para realizar a decompilação dos bytecodes do LUA (o código fonte é guardado em um diretório chamado 'source').

Figura 01: ResourceCarUnpacker.py

A ferramenta esta disponível para download no github:

https://github.com/pasknel/hacking-com-tapioca/blob/master/ResourceCarUnpacker/ResourceCarUnpacker.py

O unluac (decompiler) esta disponível no sourceforge:

http://sourceforge.net/projects/unluac/

quarta-feira, 20 de agosto de 2014

OWASP Chapter: Fortaleza

Pessoal!

Eu e o Alan Aquino estamos reativando o capítulo OWASP de Fortaleza. Aos que não conhecem, OWASP(Open Web Application Security Project) é uma organização sem fins lucrativos que atua em todo o mundo e é focada em melhorar a segurança de aplicações Web através de pesquisas e compartilhamento de conhecimento.

Acesse a página pelo link abaixo e inscreva-se na lista.
https://www.owasp.org/index.php/Fortaleza

Por favor, divulguem!

Keep Hacking!

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!