tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks

Analyse d'application React Native

Pour confirmer si l'application a été construite sur le framework React Native, suivez ces étapes :

  1. Renommez le fichier APK avec une extension zip et extrayez-le dans un nouveau dossier en utilisant la commande cp com.example.apk example-apk.zip et unzip -qq example-apk.zip -d ReactNative.

  2. Naviguez vers le nouveau dossier ReactNative et localisez le dossier assets. À l'intérieur de ce dossier, vous devriez trouver le fichier index.android.bundle, qui contient le JavaScript React dans un format minifié.

  3. Utilisez la commande find . -print | grep -i ".bundle$" pour rechercher le fichier JavaScript.

Code Javascript

Si en vérifiant le contenu de index.android.bundle vous trouvez le code JavaScript de l'application (même s'il est minifié), vous pouvez l'analyser pour trouver des informations sensibles et des vulnérabilités.

Comme le bundle contient en réalité tout le code JS de l'application, il est possible de le diviser en différents fichiers (ce qui pourrait faciliter son ingénierie inverse) en utilisant l'outil react-native-decompiler.

Webpack

Pour analyser davantage le code JavaScript, vous pouvez télécharger le fichier sur https://spaceraccoon.github.io/webpack-exploder/ ou suivre ces étapes :

  1. Créez un fichier nommé index.html dans le même répertoire avec le code suivant :
html
<script src="./index.android.bundle"></script>
  1. Ouvrez le fichier index.html dans Google Chrome.

  2. Ouvrez la barre d'outils de développement en appuyant sur Command+Option+J pour OS X ou Control+Shift+J pour Windows.

  3. Cliquez sur "Sources" dans la barre d'outils de développement. Vous devriez voir un fichier JavaScript qui est divisé en dossiers et fichiers, constituant le bundle principal.

Si vous trouvez un fichier appelé index.android.bundle.map, vous pourrez analyser le code source dans un format non minifié. Les fichiers de carte contiennent un mappage source, ce qui vous permet de mapper des identifiants minifiés.

Pour rechercher des informations d'identification sensibles et des points de terminaison, suivez ces étapes :

  1. Identifiez des mots-clés sensibles pour analyser le code JavaScript. Les applications React Native utilisent souvent des services tiers comme Firebase, les points de terminaison du service AWS S3, des clés privées, etc.

  2. Dans ce cas spécifique, l'application a été observée en train d'utiliser le service Dialogflow. Recherchez un modèle lié à sa configuration.

  3. Il a été chanceux que des informations d'identification sensibles codées en dur aient été trouvées dans le code JavaScript lors du processus de reconnaissance.

Modifier le code JS et reconstruire

Dans ce cas, changer le code est facile. Vous devez simplement renommer l'application pour utiliser l'extension .zip et l'extraire. Ensuite, vous pouvez modifier le code JS à l'intérieur de ce bundle et reconstruire l'application. Cela devrait suffire pour vous permettre de injecter du code dans l'application à des fins de test.

## Bytecode Hermes

Si le bundle contient du bytecode Hermes, vous ne pourrez pas accéder au code Javascript de l'application (même pas à la version minifiée).

Vous pouvez vérifier si le bundle contient du bytecode Hermes en exécutant la commande suivante :

bash
file index.android.bundle
index.android.bundle: Hermes JavaScript bytecode, version 96

Cependant, vous pouvez utiliser les outils hbctool, hermes-dec ou hermes_rs pour désassembler le bytecode et aussi pour le décompiler en un certain code JS pseudo. Pour ce faire, par exemple ces commandes :

bash
hbc-disassembler ./index.android.bundle /tmp/my_output_file.hasm
hbc-decompiler ./index.android.bundle /tmp/my_output_file.js

Modifier le code et reconstruire

Idéalement, vous devriez être en mesure de modifier le code désassemblé (changer une comparaison, ou une valeur ou tout ce que vous devez modifier) puis reconstruire le bytecode et ensuite reconstruire l'application.

L'outil hbctool prend en charge le désassemblage du bundle et sa reconstruction après que les modifications ont été effectuées, cependant, il ne prend en charge que les anciennes versions du bytecode Hermes.

L'outil hermes-dec ne prend pas en charge la reconstruction du bytecode.

L'outil hermes_rs prend en charge la reconstruction du bytecode, mais c'est en réalité une bibliothèque et non un outil CLI.

Analyse dynamique

Vous pourriez essayer d'analyser dynamiquement l'application en utilisant Frida pour activer le mode développeur de l'application React et utiliser react-native-debugger pour s'y attacher. Cependant, pour cela, vous avez apparemment besoin du code source de l'application. Vous pouvez trouver plus d'infos à ce sujet sur https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/.

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks