# Analisis Estatico Android

## Herramientas

Entre las herramientas más conocidas tenemos:

* [MARA Framework](https://github.com/xtiankisutsa/MARA_Framework)
* [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
* [Qark](https://github.com/linkedin/qark)

{% hint style="info" %}

#### IMPORTANTE! ES NECESARIO TENER EN CUENTA QUE CUALQUIER HERRAMIENTA AUTOMATICA PUEDE GENERAR <mark style="color:red;">FALSOS POSITIVOS</mark>, POR LO QUE SE DEBEN ANALIZAR LOS RESULTADOS OBTENIDOS MANUALMENTE PARA DESCARTARLOS.

{% endhint %}

## Analizar

### Permisos de AndroidManifest.xml

* Debuggable

Este atributo permite depurar la aplicación.&#x20;

```bash
android:debuggable="true"|"false"
```

En el caso de no estar indicado el valor (es decir, si nos encontramos solamente `android:debuggable`), el apk NO es depurable.

* AllowBackup

```bash
android:allowBackup="true"|"false"
```

En el caso de estar como "true", permite realizar backups de los datos que contiene a través de ADB.

```bash
adb backup -f app_backup.ab -apk [apkName.apk]
```

* WAKE\_LOCK

```bash
<uses-permission android:name="android.permission.WAKE_LOCK" />
```

Permite que el dispositivo permanezca activo y evita que entre en estado de suspensión.

* GET\_TASKS

```bash
<uses-permission android:name="android.permission.GET_TASKS" />
```

Permite a la aplicación acceder a los procesos que se encuentran activos/corriendo en el dispositivo.

* WRITE\_EXTERNAL\_STORAGE

```bash
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```

Permite a la aplicación acceso de escritura al contenido de la tarjeta SD.

### Directorios y ficheros&#x20;

Para analizar el código fuente de la aplicación, podemos usar [JADX](https://github.com/skylot/jadx).

{% hint style="info" %}
En los WebView, debemos tener en cuenta\
\
`myWebView.settings.javaScriptEnabled = true`\
\
ya que puede facilitar la ejecución de XSS.
{% endhint %}

### Almacenamiento y Base de datos

Buscar palabras clave y llamadas a APIs usadas para almacenar información. Algunas de las clases y funciones son:

* clase `SharedPreferences` ( almacena parejas de clave-valor)
* clase `FileOutPutStream` (usa almacenamiento interno o externo)
* funciones `getExternal*` (usa almacenamiento externo)
* función`getWritableDatabase` (devuelve una bdd SQLiteDatabase con permisos de escritura)

{% hint style="info" %}
Buscar en el código fuente:

```
this.db = localUserSecretStore.getWritableDatabase("Password");
```

{% endhint %}

* función `getReadableDatabase` (devuelve una bdd SQLiteDatabase con permisos de lectura)
* funciones `getCacheDir` y `getExternalCacheDirs` (usan ficheros cacheados)

Ubicación común de claves/API keys/contraseñas:

* res/values/strings.xml
* build configs (local.properties o gradle.properties)
* `/data/data/<package-name>/shared_prefs`
* `/data/data/<package-name>/files/`

#### Base de datos

La ruta donde se almacenan las bdd de las aplicaciones es

`/data/data/<package-name>/databases/`

Copiar la base datos de la aplicación al entorno de pruebas con

```bash
adb pull /data/data/AppName/.. /destination/path/for/the/file
```

y posteriormente abrir SQLite e importar la base de datos.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.securiters.com/securiters-wiki/movil/analisisestaticoandroid.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
