# Outil Medusa / Mango

## Description

Medusa est un framework extensible et modularisé qui automatise les processus et les techniques pratiqués lors de l'analyse dynamique des applications Android et iOS.

Lien vers le repo github: <https://github.com/Ch0pin/medusa>

## Résumé&#x20;

Medusa fonctionne de la même manière que Metasploit ce qui en fait un outil parfait pour les utilisateurs déjà à l'aise avec le fonctionnement et les commandes de Metasploit. Il regroupe un ensemble de scripts Frida classés en modules par catégories (exp: http\_communications, root\_detection). Cela permet une organisation et un gain de temps considérable car tout est déjà installé et disponible depuis une seule et même interface.

## Commandes utiles

### Dump de mémoire

`medusa> dump com.target.xyz`

### Frappes clavier vers l'appareil

`medusa> type "Hello World!"`

### Voir / Modifier les configuration de l'outil

```
medusa> set
Name                  Value                           Description                                                 
==================================================================================================================
allow_style           Terminal                        Allow ANSI text style sequences in output (valid values:    
                                                      Always, Never, Terminal)                                    
always_show_hint      False                           Display tab completion hint even when completion suggestions
                                                      print                                                       
debug                 False                           Show full traceback on exception                            
echo                  False                           Echo command issued into output                             
editor                None                            Program used by 'edit'                                      
feedback_to_output    False                           Include nonessentials in '|', '>' results                   
max_completion_items  50                              Maximum number of CompletionItems to display during tab     
                                                      completion                                                  
quiet                 False                           Don't print nonessential feedback                           
timing                False                           Report execution times
```

### Lister les librairies natives d'un package

`medusa> libs com.target.xyz`

### Afficher les stack traces d'une fonction

`medusa> jtrace com.target.xyz.function`

### Hook une activité pour en exrtraire les arguments

`medusa> hook -a com.target.xyz.test.MyActvity`

### Exporter les modules chargés pour un usage futur

`medusa> export exportname.medusa`&#x20;

### Enumerer les fonctions exportées d'une librairie native:

`medusa> enumerate com.target.xyz libtest.so`&#x20;

### Lister/Créer/Supprimer des alias

`medusa> alias create <alias> <command>`

#### Exemple:

```
medusa> alias list
medusa> alias create pin search ssl
medusa> pin
http_communications/instagram_ssl_pinning_bypass
http_communications/snapchat_ssl_pinning_bypass
http_communications/universal_SSL_pinning_bypass
http_communications/ssl-pinning-bypass
http_communications/tiktok_ssl_pinning_bypass
http_communications/openssl_boringssl_key_capture
http_communications/libssl_ssl_set_custom_verify
http_communications/facebook_ssl_pinning_bypass
madusa> alias delete pin
```

## Modules&#x20;

Il est possible de lister les catégories disponibles avec la commande:

`medusa> show categories`

### Recherche de modules

De manière plus précise, on peut êgalement faire des recherches par mot clés dans les noms des modules disponibles.

Exemple:

```
medusa> search universal 
http_communications/universal_SSL_pinning_bypass 
root_detection/universal_root_detection_bypass 
```

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2FLj5x6Xd8YOcadoeVb9D2%2Fimage.png?alt=media&#x26;token=7d697132-09f6-4c63-bbdc-9e518a8c6160" alt=""><figcaption></figcaption></figure>

On peut également si besoin utiliser la commande info pour lire des informations sur un module spécifique.

`medusa> info <module>`

### Choix des modules

orsqu'on trouve le(s) module(s) souhaités, on peut alors les ajouter aux modules en attente de lancement avec la commande:

`medusa> use <module>`

Enfin, on exécute les modules en exécutant l'application grâce à la commande:

`medusa> run -f com.target.xyz`&#x20;

{% hint style="info" %}
**Note**: l'ordre d'exécution des modules est définie par l'ordre dans lequel ils ont été choisis
{% endhint %}

Exemple:

```
medusa> use root_detection/universal_root_detection_bypass
...
...
medusa> use http_communications/universal_SSL_pinning_bypass
...
...

medusa> run -f com.target.xyz
---------LOADING ANTI ROOT DETECTION SCRIPT-------------------
Loaded 11200 classes!
...
...

-------------Universal ssl pinning bypass V2------------------

===
* Injecting hooks into common certificate pinning methods *
===
...
...
```

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2F0qHRLA83OjeZObJ8ES47%2Fimage.png?alt=media&#x26;token=2ff904e3-0d0a-44f0-a02f-143df1502357" alt=""><figcaption><p>Exemple de résultats</p></figcaption></figure>

{% hint style="info" %}
**Tips**: la commande swap permet d'inverser l'ordre d'execution entre deux modules en attente.
{% endhint %}

```
Current Mods:
0) http_communications/universal_SSL_pinning_bypass
1) root_detection/universal_root_detection_bypass

medusa> swap 0 1

Current Mods:
0) root_detection/universal_root_detection_bypass
1) http_communications/universal_SSL_pinning_bypass
```

### Réinistialisation des modules

`medusa> reset`

### Suppression d'un ou plusieurs modules (Tout ce qui commence par ...)

`medusa> rem <module>`

Si un module a été modifié

`medusa> reload <module>`

### Scripts et modules custom

Si aucun des modules préinstallés ne convient, il est possible d'importer un script avec la commande suivante:

`medusa> import [tab]`&#x20;

Les scripts custom sont stockés dans /medusa/snippets/, il est donc possible d'ajouter simplement des scripts personnels en les stockants dans ce répértoire.

**Exemple**: /medusa/snippets/example.js => import example

{% hint style="warning" %}
**Attention**: La partie `Java.perform(function() { }` doit être supprimée du script pour être compatible.
{% endhint %}

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2Fm4i7dNZ02t25nQAHznVr%2Fimage.png?alt=media&#x26;token=10122e9b-cfe7-471b-90a3-5fbdd70e4907" alt=""><figcaption><p>Exemple de script</p></figcaption></figure>

{% hint style="info" %}
**Note**: Afin de vérifier le code du module on peut utiliser la commande:

`medusa> snippet example`
{% endhint %}

## Mango

Mango fait partie de Medusa mais à été séparé du script python medusa.py (c'est un autre script nommé mango.py). Il est séparé car ses cas d'usage sont différents et se concentres principalement sur de l'analyse statique à quelques exceptions prés.

### Installer l'agent sur le device

`mango> installagent`

### Importer un APK pour analyse

#### Depuis le PC

`mango> import /path/to/target.apk`

### Depuis le device

`medusa> pull com.target.xyz`

Cela créer un fichier .db qui contient les informations de l'application et qui peut être réutilisé comme une session. De plus, Mango affiche les informations importantes du AndroidManifest dés l'importation de l'application.

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2F7f3PQE2sd5gxXUGn6Lk0%2Fimage.png?alt=media&#x26;token=965465d3-b6ac-458d-bce6-d87517b38557" alt=""><figcaption><p>Exemple d'appication importée</p></figcaption></figure>

## Enumeration

### Enumeration des composants

`mango>  show [activities, activityAlias, applications, database, deeplinks, exposure, info, intentFilters, manifest, permissions, providers, receivers, services, strings]`&#x20;

### Recherche par mot clé dans le AndroidManifest

`mango> search keyword`

### Evaluation de la surface d'attaque

`mango> show exposure`

## Setup d'environnement

Mango contient également quelques outils pour préparer son environnement de travail.

### Installer le certificat Burp

`mango> InstallBurpCert`

### Activer le mode Debug dans le AndroidManifest

`mango> patch /path/to/target.apk`

### Configurer le proxy du device

`mango> proxy set <ip>:<port>`

`mango> proxy reset`

## Analyse dynamique

### Envoie de notifications aux listener

`mango> notify "test" "hello world!"`

### Initialiser une session frida-trace

`mango> trace com.target.xyz.*`

### Ouvrir des deeplinks

`mango> deeplink app://deeplink`
