mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
82 lines
5.9 KiB
Markdown
82 lines
5.9 KiB
Markdown
{{#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}}
|