Algum tempo atrás eu publiquei um artigo que ensinava como desempacotar aplicativos da Google Play para auxiliar no aprendizado através de engenharia reversa. No artigo eu busquei deixar claro que o objetivo era fazer com que "mais pessoas sejam capazes de otimizar seus aplicativos através das descobertas proporcionadas pela técnica".
E muita gente entendeu isso, mas ainda assim rolou bastante polêmica. Muita gente acredita que esse tipo de conhecimento não pode ser propagado. Talvez por medo ou algo do tipo. A questão é que eu acredito que só através do conhecimento nós seremos capazes de melhorar nossos aplicativos. Inclusive a engenharia reversa pode nos ajudar em diversas áreas, como segurança, performance, tooling, usabilidade, etc.
Enfim, eu poderia me estender mais, falando das questões éticas e morais do tema, mas já fiz isso no meu artigo anterior então vamos ao que interessa.
É importante ressaltar que para realizar os passos a seguir é necessário possuir um Mac e um dispositivo com iOS (iPhone, iPad ou iPod).
Novamente nós usaremos o meu aplicativo Mini Receitas como exemplo, já que eu não quero problemas com ninguém.
- No seu Mac, abra o iTunes e pesquise pelo aplicativo "Mini Receitas";
- Mande instalar no seu dispositivo;
- E então, ainda no iTunes, clique em "Apps";
- Selecione o aplicativo que você quer desempacotar (no nosso caso o Mini Receitas), clique com o botão direito nele e selecione "Show in Finder";
- Você verá um arquivo com a extensão
.ipa
no Finder, faça uma cópia desse arquivo para o desktop; - Altere a extensão de
.ipa
para.zip
(nesse caso,MiniReceitas.ipa
paraMiniReceitas.zip
), ignore o aviso e confirme a alteração da extensão para.zip
; - Agora dê um duplo clique no arquivo
.zip
e extraia seu conteúdo; - No diretório recém criado abra a pasta "Payload";
- Clique com o botão direito no nome do aplicativo (MiniReceitas.app) e seleciona "Show Package Contents";
- Pronto. Agora você já pode explorar o conteúdo do MiniRecitas.
Você pode e provavelmente vai encontrar um monte de coisas interessantes ao realizar esse processo em alguns aplicativos. Note que nas versões mais recentes do iTunes, a sessão "Apps~ é uma subsessão acessível através do menu do iTunes.
Uma coisa que você vai notar é que todo o javascript do aplicativo é minificado. Por padrão o Ionic 2 já faz diversas otimizações no seu código para que ele tenha um menor tamanho e execute mais rápido. Dentre essas otimizações estão a minificação, o tree-shaking, a ofuscação, a compilação angular, etc.. Embora nenhuma dessas otimizações garantam a segurança do seu aplicativo, algumas delas ajudam a deixar o código mais difícil de ler para quem está desempacotando o aplicativo.
Até por que isso é uma questão muito mais relacionada com direitos autorais do que com segurança em si. Como essa resposta no Stack Overflow pontua, a não ser que você possua algum tipo de conteúdo/código/algoritmo proprietário no seu aplicativo, você não deve se preocupar com alguém espiando os seus arquivos. Inclusive, como eu citei no meu artigo anterior, também é possível realizar engenharia reversa em aplicativos nativos e existem diversas ferramentas por aí com esse propósito (Apktool, Hopper, etc.).
Portanto se você está preocupado com a segurança do seu aplicativo é melhor focar em outros aspectos e esses links podem te ajudar nisso: