# 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="/files/QOrrqaeEAS8iCi4uXM8B" 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
```


---

# 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://blog.s1rn3tz.ovh/pentest-mobile/android/guides-outils/outil-drozer.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.
