> For the complete documentation index, see [llms.txt](https://sansong.gitbook.io/cyber/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sansong.gitbook.io/cyber/rev/android/frida/introduction.md).

# Introduction

## Frida

Frida sert à instrumenter des applications pour hook leurs méthodes.

Pour l'utiliser il faut connecter le téléphone à un PC (voir [Connexion au téléphone](/cyber/rev/android/adb/connexion-au-telephone.md)).

2 cas sont possibles:

* **Téléphone rooté**

1. Un **serveur** est déployé sur le téléphone (démon root)
2. On écris un script JavaScript sur le PC
3. On se connecte au **serveur** avec un **client**
4. Le serveur injecte un **agent** dans le processus de l'app (l'agent embarque un moteur JS)
5. Le script JS est exécuté dans le contexte de l'app

<figure><img src="https://1813806532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZRRTPIEA4wb6exZozwS0%2Fuploads%2FgkVuxkWVVrYH5ZIpVmHt%2Ffrida_android_architecture.png?alt=media&amp;token=9a889b8e-c5df-4a94-907d-5eccbdd40af0" alt="" width="563"><figcaption></figcaption></figure>

* **Téléphone non rooté**

1. Une **librairie** `libgadget.so` est injectée dans l'APK puis chargée en mémoire
2. La librairie contient le même moteur JS que celui de l'agent de `frida-server`
3. On écris un script JavaScript sur le PC
4. On se connecte à la lib qui est en écoute avec un **client**
5. Le script JS est exécuté dans le contexte de l'app

<figure><img src="https://1813806532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZRRTPIEA4wb6exZozwS0%2Fuploads%2FMZyxCLy64Y116U7E8v5f%2Ffrida_gadget_architecture.png?alt=media&amp;token=13b4b2c3-7c3a-43f6-8e7e-1800cbcc6b33" alt="" width="563"><figcaption></figcaption></figure>

## Installation

### **Téléphone rooté**

{% hint style="success" %}
Voir [Rooter un téléphone](/cyber/rev/android/rooter-un-telephone.md)
{% endhint %}

1. Installer `frida-tools`

```
pip install frida-tools
```

2. Se connecter au téléphone avec adb (voir [Connexion au téléphone](/cyber/rev/android/adb/connexion-au-telephone.md))
3. Télécharger et décompresser [`frida-server`](https://github.com/frida/frida/releases) sur le PC

{% hint style="warning" %}

## Attention à l'architecture CPU et à la version

Il faut prendre **la même architecture CPU que celle du téléphone**. Pour vérifier celle qu'il faut, exécuter cette commande:

```
adb shell uname -m
```

Il faut prendre **une version du serveur compatible avec le client** (`frida-tools`). La même version si possible.
{% endhint %}

4. Pousser `frida-server` sur le téléphone

```
adb push <frida-server> /data/local/tmp
```

5. Rendre le binaire exécutable

```
adb shell chmod +x /data/local/tmp/<frida-server>
```

6. Exécuter `frida-server` en daemon

```
adb shell
$ su
# /data/local/tmp/<frida-server> -D &
```

7. Vérifier qu'il est en écoute

```
adb shell
$ ps | grep frida
```

### Téléphone non rooté

1. Installer `frida-tools`

```
pip install frida-tools
```

2. Utiliser [`objection`](https://github.com/sensepost/objection/wiki/Patching-Android-Applications) pour patcher l'APK (suivre le guide)

{% hint style="success" %}
Il ajoute automatiquement la permission INTERNET pour que l'app puisse ouvrir une socket, modifie le code pour qu'elle charge la librairie `frida-gadget.so`, et re-signe l'APK.
{% endhint %}

{% hint style="warning" %}

## Prérequis

**Certaines applications détectent les modifications de leur code** (vérifications d'intégrité avec l'[API Google Play Integrity](https://developer.android.com/google/play/integrity?hl=fr) par exemple), **si l'app se bloque après modification** **cette méthode ne fonctionnera pas**. Il faut essayer de récupérer une version de debug de l'APK (flag [`android:debuggable`](android://debuggablehttps//developer.android.com/privacy-and-security/risks/android-debuggable?hl=fr)).
{% endhint %}
