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/

3 comentários:

  1. Bom dia amigo!
    Estou tentando o comando python ResourceCarUnpacker.py -h -p /tmp/resourece.car -d /tmp/unluac_2015_06_13.jar mas sem sucesso no que estou errando? Obrigado

    ResponderExcluir
  2. Olá, sem o -h ele não dá erro mas não faz nada também, com o -h aparece:
    python ResourceCarUnpacker.py -h -p resource.car -d unluac_2015_06_13.jar
    usage: ResourceCarUnpacker.py [-h] -p PATH -d DCP

    Corona SDK - resource.car extractor

    optional arguments:
    -h, --help show this help message and exit
    -p PATH, --path PATH resource.car path
    -d DCP, --dcp DCP Decompiler (unluac.jar) path

    Github: https://github.com/pasknel/hacking-com-tapioca/

    ResponderExcluir