tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Analiza aplikacji React Native

Aby potwierdzić, czy aplikacja została zbudowana na frameworku React Native, wykonaj następujące kroki:

  1. Zmień nazwę pliku APK na plik zip i rozpakuj go do nowego folderu, używając polecenia cp com.example.apk example-apk.zip oraz unzip -qq example-apk.zip -d ReactNative.

  2. Przejdź do nowo utworzonego folderu ReactNative i zlokalizuj folder assets. W tym folderze powinieneś znaleźć plik index.android.bundle, który zawiera React JavaScript w zminifikowanym formacie.

  3. Użyj polecenia find . -print | grep -i ".bundle$" aby wyszukać plik JavaScript.

Kod Javascript

Jeśli sprawdzając zawartość index.android.bundle znajdziesz kod JavaScript aplikacji (nawet jeśli jest zminifikowany), możesz analizować go w celu znalezienia wrażliwych informacji i luk w zabezpieczeniach.

Ponieważ bundle zawiera właściwie cały kod JS aplikacji, możliwe jest podzielenie go na różne pliki (co potencjalnie ułatwia jego inżynierię wsteczną) przy użyciu narzędzia react-native-decompiler.

Webpack

Aby dalej analizować kod JavaScript, możesz przesłać plik do https://spaceraccoon.github.io/webpack-exploder/ lub wykonać następujące kroki:

  1. Utwórz plik o nazwie index.html w tym samym katalogu z następującym kodem:
html
<script src="./index.android.bundle"></script>
  1. Otwórz plik index.html w Google Chrome.

  2. Otwórz Narzędzie dewelopera, naciskając Command+Option+J dla OS X lub Control+Shift+J dla Windows.

  3. Kliknij na "Sources" w Narzędziu dewelopera. Powinieneś zobaczyć plik JavaScript podzielony na foldery i pliki, tworzące główny pakiet.

Jeśli znajdziesz plik o nazwie index.android.bundle.map, będziesz mógł analizować kod źródłowy w niezmienionej formie. Pliki map zawierają mapowanie źródła, co pozwala na mapowanie zminimalizowanych identyfikatorów.

Aby wyszukać wrażliwe dane uwierzytelniające i punkty końcowe, wykonaj następujące kroki:

  1. Zidentyfikuj wrażliwe słowa kluczowe do analizy kodu JavaScript. Aplikacje React Native często korzystają z usług stron trzecich, takich jak Firebase, punkty końcowe usługi AWS S3, klucze prywatne itp.

  2. W tym konkretnym przypadku zaobserwowano, że aplikacja korzysta z usługi Dialogflow. Wyszukaj wzór związany z jej konfiguracją.

  3. Miałeś szczęście, że wrażliwe dane uwierzytelniające zakodowane na sztywno zostały znalezione w kodzie JavaScript podczas procesu rekonesansu.

Zmień kod JS i odbuduj

W tym przypadku zmiana kodu jest łatwa. Musisz tylko zmienić nazwę aplikacji, aby używała rozszerzenia .zip i wyodrębnić ją. Następnie możesz zmodyfikować kod JS wewnątrz tego pakietu i odbudować aplikację. To powinno wystarczyć, aby umożliwić ci wstrzyknięcie kodu do aplikacji w celach testowych.

## Hermes bytecode

Jeśli pakiet zawiera Hermes bytecode, nie będziesz mógł uzyskać dostępu do kodu Javascript aplikacji (nawet do wersji zminimalizowanej).

Możesz sprawdzić, czy pakiet zawiera Hermes bytecode, uruchamiając następujące polecenie:

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

Możesz jednak użyć narzędzi hbctool, hermes-dec lub hermes_rs, aby zdekompilować bajtkod i również zdekompilować go do pseudo kodu JS. Aby to zrobić, na przykład te polecenia:

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

Zmiana kodu i odbudowa

Idealnie powinieneś być w stanie zmodyfikować zdisasemblerowany kod (zmieniając porównanie, wartość lub cokolwiek, co musisz zmodyfikować), a następnie odbudować bajtkod i odbudować aplikację.

Narzędzie hbctool wspiera disasemblerowanie pakietu i ponowne budowanie go po wprowadzeniu zmian, jednak obsługuje tylko stare wersje bajtkodu Hermes.

Narzędzie hermes-dec nie wspiera odbudowy bajtkodu.

Narzędzie hermes_rs wspiera odbudowę bajtkodu, ale jest to w rzeczywistości biblioteka, a nie narzędzie CLI.

Analiza dynamiczna

Możesz spróbować dynamicznie analizować aplikację, używając Frida, aby włączyć tryb dewelopera aplikacji React i użyć react-native-debugger, aby się do niej podłączyć. Jednak do tego potrzebujesz źródła aplikacji. Więcej informacji na ten temat znajdziesz w https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/.

Odniesienia

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks