MASTG-TECH-0117: Obtenção de Informações do AndroidManifest
O arquivo AndroidManifest.xml) é um componente crítico de qualquer aplicação Android, fornecendo informações essenciais sobre a estrutura, permissões, componentes e configurações do aplicativo. Durante uma avaliação de segurança, a análise do manifesto pode revelar vulnerabilidades potenciais ou más configurações que poderiam ser exploradas por atacantes.
O AndroidManifest é armazenado em um formato binário XML e não pode ser simplesmente extraído do APK ao descompactá-lo. Para analisar adequadamente o manifesto, primeiro é necessário extraí-lo e decodificá-lo em um formato XML legível por humanos.
Diferentes ferramentas extraem o manifesto em vários formatos, com algumas preservando mais a estrutura bruta enquanto outras interpretam ou modificam durante a decodificação.
Usando jadx¶
Use a CLI do jadx com --no-src para extrair apenas os recursos sem descompilar todas as fontes:
jadx --no-src -d out_dir MASTG-DEMO-0001.apk
O jadx gera o manifesto completo em out_dir/resources/AndroidManifest.xml, incluindo o elemento <uses-sdk> que não é incluído ao usar outras ferramentas como o apktool.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<uses-sdk
android:minSdkVersion="29"
android:targetSdkVersion="35" />
Usando Ferramenta Apktool¶
O AndroidManifest pode ser extraído usando apktool:
$ apktool d -s -f -o output_dir MASTG-DEMO-0001.apk
I: Using Apktool 2.11.1 on MASTG-DEMO-0001.apk with 8 threads
I: Copying raw classes.dex file...
...
I: Loading resource table...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Decoding AndroidManifest.xml with resources...
-s ignora o baksmali dos arquivos dex e é mais rápido.
O AndroidManifest.xml é extraído e decodificado para output_dir/AndroidManifest.xml, onde você pode simplesmente abri-lo e visualizá-lo.
Quando você decodifica um APK com apktool, pode notar que o elemento <uses‑sdk> (que inclui minSdkVersion e targetSdkVersion) está ausente do AndroidManifest.xml descompilado. Isso é um comportamento esperado.
O apktool move esses valores para um arquivo separado chamado apktool.yml em vez de inseri-los no manifesto XML decodificado. Nesse arquivo você verá algo como:
sdkInfo:
minSdkVersion: 29
targetSdkVersion: 35
Usando aapt2¶
Se você está interessado apenas em valores específicos do manifesto, pode usar aapt2.
Note que a saída não é um arquivo XML.
```bash $ aapt2 d badging MASTG-DEMO-0001.apk package: name='org.owasp.mastestapp' versionCode='1' versionName='1.0' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15' sdkVersion:'29' targetSdkVersion:'35' uses-permission: name='android.permission.INTERNET' uses-permission: name='org.owasp.mastestapp.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION' application-label:'MASTestApp' ...