{{#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 ``` 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}}