82 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{#include ../../banners/hacktricks-training.md}}
# React Native Uygulama Analizi
Uygulamanın React Native framework'ü üzerinde inşa edilip edilmediğini doğrulamak için şu adımları izleyin:
1. APK dosyasının adını zip uzantısıyla değiştirin ve `cp com.example.apk example-apk.zip` ve `unzip -qq example-apk.zip -d ReactNative` komutunu kullanarak yeni bir klasöre çıkarın.
2. Yeni oluşturulan ReactNative klasörüne gidin ve assets klasörünü bulun. Bu klasörün içinde, minify edilmiş formatta React JavaScript içeren `index.android.bundle` dosyasını bulmalısınız.
3. JavaScript dosyasını aramak için `find . -print | grep -i ".bundle$"` komutunu kullanın.
## Javascript Kodu
Eğer `index.android.bundle` dosyasının içeriğini kontrol ettiğinizde uygulamanın JavaScript kodunu (minify edilmiş olsa bile) bulursanız, **hassas bilgileri ve güvenlik açıklarını bulmak için analiz edebilirsiniz**.
Bundle, aslında uygulamanın tüm JS kodunu içerdiğinden, **onu farklı dosyalara ayırmak mümkündür** (tersine mühendisliğini kolaylaştırabilir) **[react-native-decompiler](https://github.com/numandev1/react-native-decompiler)** aracını kullanarak.
### Webpack
JavaScript kodunu daha fazla analiz etmek için dosyayı [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) adresine yükleyebilir veya şu adımları izleyebilirsiniz:
1. Aynı dizinde `index.html` adında bir dosya oluşturun ve aşağıdaki kodu ekleyin:
```html
<script src="./index.android.bundle"></script>
```
2. `index.html` dosyasını Google Chrome'da açın.
3. **OS X için Command+Option+J** veya **Windows için Control+Shift+J** tuşlarına basarak Geliştirici Araç Çubuğunu açın.
4. Geliştirici Araç Çubuğunda "Sources" sekmesine tıklayın. Ana paketi oluşturan klasörler ve dosyalar halinde bölünmüş bir JavaScript dosyası görmelisiniz.
Eğer `index.android.bundle.map` adında bir dosya bulursanız, kaynak kodunu unminified formatında analiz edebilirsiniz. Harita dosyaları, minified tanımlayıcıları eşleştirmenizi sağlayan kaynak eşleştirmesi içerir.
Hassas kimlik bilgileri ve uç noktaları aramak için şu adımları izleyin:
1. JavaScript kodunu analiz etmek için hassas anahtar kelimeleri belirleyin. React Native uygulamaları genellikle Firebase, AWS S3 hizmet uç noktaları, özel anahtarlar gibi üçüncü taraf hizmetler kullanır.
2. Bu özel durumda, uygulamanın Dialogflow hizmetini kullandığı gözlemlendi. Yapılandırmasıyla ilgili bir desen arayın.
3. Recon süreci sırasında JavaScript kodunda hassas hard-coded kimlik bilgileri bulunduğu için şanslıydınız.
### JS kodunu değiştirin ve yeniden oluşturun
Bu durumda kodu değiştirmek kolaydır. Uygulamayı `.zip` uzantısıyla yeniden adlandırmanız ve çıkarmanız yeterlidir. Ardından, **bu paketin içindeki JS kodunu değiştirip uygulamayı yeniden oluşturabilirsiniz**. Bu, test amaçları için uygulamaya **kod enjekte etmenizi** sağlamak için yeterli olmalıdır.
## Hermes bytecode
Eğer paket **Hermes bytecode** içeriyorsa, uygulamanın Javascript koduna **erişemezsiniz** (minified versiyonuna bile).
Paketin Hermes bytecode içerip içermediğini kontrol etmek için aşağıdaki komutu çalıştırabilirsiniz:
```bash
file index.android.bundle
index.android.bundle: Hermes JavaScript bytecode, version 96
```
Ancak, **[hbctool](https://github.com/bongtrop/hbctool)**, **[hermes-dec](https://github.com/P1sec/hermes-dec)** veya **[hermes_rs](https://github.com/Pilfer/hermes_rs)** araçlarını kullanarak **bytecode'u ayrıştırabilir** ve ayrıca **bunu bazı pseudo JS kodlarına decompile edebilirsiniz**. Bunu yapmak için, örneğin bu komutlar:
```bash
hbc-disassembler ./index.android.bundle /tmp/my_output_file.hasm
hbc-decompiler ./index.android.bundle /tmp/my_output_file.js
```
### Kod Değiştirme ve Yeniden Derleme
İdeal olarak, ayrıştırılmış kodu (bir karşılaştırmayı, bir değeri veya değiştirmeniz gereken her şeyi değiştirmek) değiştirebilmelisiniz ve ardından **bytecode'u yeniden derlemeli** ve uygulamayı yeniden inşa etmelisiniz.
Araç **[hbctool](https://github.com/bongtrop/hbctool)**, paketi ayrıştırmayı ve değişiklikler yapıldıktan sonra geri inşa etmeyi destekler, ancak **sadece eski sürümleri** destekler. Hermes bytecode'un.
Araç **[hermes-dec](https://github.com/P1sec/hermes-dec)** bytecode'u yeniden derlemeyi desteklemez.
Araç **[hermes_rs](https://github.com/Pilfer/hermes_rs)** bytecode'u yeniden derlemeyi destekler, ancak aslında bir kütüphanedir ve bir CLI aracı değildir.
## Dinamik Analiz
Uygulamayı dinamik olarak analiz etmeye çalışmanın bir yolu, Frida'yı kullanarak React uygulamasının geliştirici modunu etkinleştirmek ve **`react-native-debugger`** ile ona bağlanmaktır. Ancak, bunun için uygulamanın kaynak koduna ihtiyacınız var gibi görünüyor. Bununla ilgili daha fazla bilgi bulabilirsiniz [https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/](https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/).
## Referanslar
- [https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7](https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7)
- [https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications](https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications)
- [https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf](https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf)
{{#include ../../banners/hacktricks-training.md}}