Desempacotando APK’s da Google Play Store
Olá pessoal, acredito que esse post poderá ser bastante polêmico tendo em vista que algumas pessoas não gostariam que esse conteúdo fosse disseminado. No entanto acredito que para a evolução do ecossistema de desenvolvimento híbrido isso se faz necessário. Particularmente aprendi muito ao inspecionar e realizar engenharia reversa em aplicativos de terceiros baixados da Play Store e espero que com esse artigo mais pessoas sejam capazes de otimizar seus aplicativos através das descobertas proporcionadas pela técnica aqui descrita.
Bom, como todos sabem existe uma categoria de aplicativos híbridos que rodam em um navegador no dispositivo e são códigos HTML, CSS e Javascript. Esses códigos são armazenados no dispositivo sem nenhum tipo de compilação. Portanto, se tivéssemos acesso a esses códigos conseguiríamos ler o mesmos. O fato é que muita gente sabe que esse processo é possível mas nunca o realizou, nem mesmo nos seus próprios aplicativos.
Os APK's são arquivos compactados com as instruções necessárias para que o Android leia e execute uma aplicação. No caso dos aplicativos Cordova/Ionic esses arquivos carregam em si códigos HTML, CSS e Javascript e no caso de aplicativos React Native eles carregam um bundle Javascript.
No React Native o próprio processo de build do framework já realizada a minificação do código, fato que não ocorre em aplicações Cordova/Ionic, ficando por conta do desenvolvedor realizá-lo. As vantagens de se ter um código minificado fica para um outro artigo, mas é importante notar que alguns dos aplicativos desempacotados possuírão o código minificado e outros não. Nos que não tiverem será possível ler todo o código do mesmo sem nenhum esforço de engenharia reversa.
Também é importante ressaltar que essa técnica também é aplicável para aplicativos não híbridos, porém ela irá necessitar de um conhecimento em engenharia reversa de códigos Java.
Desempacotando os Aplicativos
Para desempacotar um aplicativo a primeira coisa que se deve fazer é possuir o arquivo APK do mesmo. Para isso você pode utilizar o site apkpure.com ou alguma extensão para o Google Chrome, em meus experimentos eu utilizei a extensão APK Downloader for Google Play, porém ela não está mais disponível na Chrome Web Store.
Além do APK, nós precisaremos de uma ferramenta chamada Apktool (http://ibotpeaches.github.io/Apktool/) que é quem efetivamente irá desempacotar o aplicativo.
Após instalar o Apktool e possuir o APK do aplicativo basta ir no terminal, navegar até a pasta onde o arquivo está localizado e rodar o comando:
apktool d NOME_DO_ARQUIVO.apk
Logo, para desempacotar o meu aplicativo Mini Receitas eu rodaria o comando:
apktool d Mini Receitas_v1.1.0_apkpure.com.apk
O Apktool irá criar uma pasta com o mesmo nome do seu APK, para visualizar o código é só entrar nessa pasta.
A estrutura de cada aplicação poderá variar, mas aplicações Cordova sempre possuirão as pastas www e dentro dela a pasta plugins. Na pasta www vocês poderão encontrar os códigos do aplicativo e na pasta plugins os plugins Cordova utilizados. Foi através da inspeção da pasta plugins que eu descobri ferramentas como o Branch e o Flurry. Do código do meu aplicativo pode ser interessante que vocês procurem saber um pouco mais sobre o CodePush.
Enfim…
É isso. Na realidade o procedimento é muito fácil, mas acredito que por falta de interesse ou curiosidade muitas pessoas nunca tinham procurado saber como se é feito. A verdade é que esses simples passos podem ajudar, e muito, no seu processo de aprendizado. Saber como outras pessoas fazem em produção pode te ajudar a fazer melhores escolhas e a cada dia criar aplicativos melhores.