# Outil Drozer

## Description

Drozer est un framework d'exploitation dédié à Android permettant de faire de l'analyse statique et dynamique via l'installation et la communication avec un agent .apk à installer sur la machine cible et qui va permettre de faire un grand nombre d'interactions allant de la collecte d'informations jusqu'à l'exploitation d'applications.

## Installation

### Prérequis

* Python2.7 (Modules [Protobuf](https://pypi.python.org/pypi/protobuf) 2.6 ou supérieur, [Pyopenssl](https://pypi.python.org/pypi/pyOpenSSL) 16.2 ou supérieur, [Twisted](https://pypi.python.org/pypi/Twisted) 10.2 ou supérieur)
  * twisted (python2 -m pip install twisted)
  * service\_identity (python2 -m pip install service\_identity)
* [Java Development Kit 1.7](http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html)
* [Android Debug Bridge](https://developer.android.com/studio/releases/platform-tools.html)

### Téléchargement et configuration

Rendez vous sur <https://github.com/WithSecureLabs/drozer/releases/tag/2.4.4> puis télécharger le fichier [drozer-2.4.4-py2-none-any.whl](https://github.com/WithSecureLabs/drozer/releases/download/2.4.4/drozer-2.4.4-py2-none-any.whl).

Téléchargez ensuite l'agent ici: <https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk>

Une fois l'agent téléchargé, on va pouvoir l'installer sur l'appareil Android avec adb comme ceci:

```
$ adb install agent.apk
```

Il reste ensuite à lancer le serveur dans l'application "drozer Agent" installée en switchant le bouton en bas à droite sur "ON".

<figure><img src="https://3571537825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOIXudYEdnnE8JjXBrL0o%2Fuploads%2FEYo7GBZ2eU7OzJVxRVoW%2Fimage.png?alt=media&#x26;token=1d402d37-5ba5-40a1-9abb-f399d7d730df" alt=""><figcaption><p>Interface drozer Agent avec serveur actif</p></figcaption></figure>

L'agent Drozer s'exécute sur le port 31415, il faut donc transférer le port avec la commande ci-dessous pour établir la communication entre le client Drozer et l'agent.

```
$ adb forward tcp:31415 tcp:31415
```

Vérifier ensuite le bon fonctionnement du serveur en lancant la commande:

```
$ drozer console connect
```

## Lister / Rechercher des packages

Dans le shell drozer:

```
dz> run app.package.list [-f exemple]
```

### Renseignements sur un package

```
dz> run app.package.info -a com.example.targetapp
```

## Lire le fichier AndroidManifest

```
dz> run app.package.manifest com.example.targetapp
```

## Lister la surface d'attaque d'un package

```
dz> run app.package.attacksurface com.example.targetapp
```

## Activities

### Lister les activitiés exportées

```
dz> run app.activity.info -a com.example.targetapp
```

### Lancer une activité

```
dz> run app.activity.start --component com.example.targetapp com.example.targetapp.MainActivity
```

## Content providers

### Lister les content providers

```
dz> run app.provider.info -a com.example.targetapp
```

### Trouver des URIs

```
dz> run scanner.provider.finduris -a com.example.targetapp
```

### Lire les fichiers dans le file system

```
dz> run app.provider.read content://com.example.targetapp...
```

### Télécharger le contenu d'un fichier

```
dz> run app.provider.download content://com.example.targetapp...
```

### Requêter un content provider

```
dz> run app.provider.query content://com.example.targetapp.DBContentProvider/Passwords/ --vertical
```

### Envoyer de nouvelles données à un content provider

```
dz> run app.provider.insert content://com.example.targetapp.DBContentProvider/Passwords/ --string <DBcolumn> <contenu>

#Types de données
--string
--float
--integer
--long
--short
--boolean
```

### Mettre à jour le contenu d'un content provider

```
dz> run app.provider.update content://com.example.targetapp.DBContentProvider/Passwords/ --selection "<DBcolumn>=?" --selection-args <contenu> --string <DBcolumn> <contenu>
```

### Supprimer le contenu d'un content provider

```
dz> run app.provider.delete content://com.example.targetapp.DBContentProvider/Passwords/ --selection "<DBcolumn>=?" --selection-args <contenu>
```

## Services

### Lister les services

```
dz> run app.service.info -a com.example.targetapp
```

### Interactions avec un service

```
dz> run app.service.send  //Permet d'envoyer un message à un service et d'intercepter la réponse
dz> run app.service.start  //Permet de lancer un service
dz> run app.service.stop  //Permet de stopper un service
```

## Broadcast Receivers

### Lister les broadcast receivers

```
dz> run app.broadcast.info -a com.example.targetapp
```

### Interactions avec les broadcast

```
dz> run app.broadcast.info  //Permet d'obtenir des informations sur les boraidcast
dz> run app.broadcast.send  //Permet d'envoyer un broadcast avec un intent
dz> run app.broadcast.sniff  //Permet d'enregistrer un broadcast reveiver pouvant sniffer des intents particuliers
```

## Lister les applications debuggable

```
dz> run app.package.debuggable
```

## Autre

### Ouvrir un shell sur la machine

```
dz> run shell.start
```

### Télécharger / Envoyer un fichier sur la machine

```
dz> run tools.file.upload
dz> run tools.file.download
```
