Skip to content

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' ...