universal-flutter-ssl-pinning
PyGhidra के साथ libflutter.so का रिवर्स-इंजीनियरिंग करता है ताकि SSL प्रमाणपत्र सत्यापन फ़ंक्शन का पता लगाया जा सके, फिर Frida और Renef दोनों के लिए उपयोग के लिए तैयार बायपास स्क्रिप्ट तैयार करता है।
यह कैसे काम करता है
- PyGhidra बिना GUI के
libflutter.so को लोड करता है और ssl_client के लिए सभी परिभाषित स्ट्रिंग्स को स्कैन करता है।
- उस स्ट्रिंग से क्रॉस-रेफरेंस को उनके युक्त फ़ंक्शनों में हल किया जाता है।
- प्रत्येक फ़ंक्शन को डीकंपाइल किया जाता है ताकि सटीक पैरामीटर गणना प्राप्त हो सके।
- 3-पैरामीटर फ़ंक्शन चुना जाता है — यह
ssl_crypto_x509_session_verify_cert_chain है।
- इसका RVA इसमें शामिल किया जाता है:
- एक Frida स्क्रिप्ट (
flutter_ssl_pinning.js) जो रनटाइम पर रिटर्न वैल्यू को ptr(1) (SSL_VERIFY_OK) में पैच करती है।
- एक Renef स्क्रिप्ट (
flutter_ssl_pinning.lua) जो फ़ंक्शन एंट्री को MOV X0, #1 ; RET (ARM64) से ओवरराइट करने के लिए Memory.patch का उपयोग करती है।
आवश्यकताएँ
- Ghidra —
brew install ghidra
- pyghidra —
pip install pyghidra
- Frida —
pip install frida-tools या Renef — renef.io
अपने वातावरण में GHIDRA_INSTALL_DIR सेट करें, या --ghidra-install-dir पास करें।
उपयोग
# Analyse libflutter.so and generate both scripts
python3 flutter_ssl_pinning.py libflutter.so
# Run with Frida
frida -U -f com.example.app -l flutter_ssl_pinning.js
# Run with Renef
renef -s com.example.app -l flutter_ssl_pinning.lua
विकल्प
आउटपुट फ़ाइलें
| फ़ाइल | उपकरण | तंत्र |
|---|
flutter_ssl_pinning.js | Frida | Interceptor.attach + retval.replace(ptr(1)) |
flutter_ssl_pinning.lua |
नमूना उत्पन्न आउटपुट के लिए example/ निर्देशिका देखें।
परीक्षण किया गया
Google Flutter और Shorebird दोनों समान libflutter.so SSL इंजन का उपयोग करते हैं।
समान Flutter इंजन संस्करण के लिए ऑटो-डिस्कवर किया गया RVA सभी बिल्ड प्रकारों में समान होता है।
त्वरित ट्रैफ़िक कैप्चर (कोई प्रॉक्सी नहीं)
प्रॉक्सी-आधारित MITM के लिए पिनिंग को बायपास करने के अलावा, आप स्व-निहित flutter_http_monitor.py के साथ सीधे Frida में डिक्रिप्टेड HTTP ट्रैफ़िक कैप्चर कर सकते हैं। यह libflutter.so (किसी भी Flutter संस्करण, arm64) में BoringSSL SSL_write/SSL_read को स्वचालित रूप से ढूंढता है और एक Frida स्क्रिप्ट उत्पन्न करता है जो प्लेनटेक्स्ट अनुरोधों और प्रतिक्रियाओं को प्रिंट करता है — पुनः इकट्ठा, डी-चंक्ड, गनज़िप किया हुआ और JSON सुंदर-मुद्रित।
pip install capstone pyelftools
# scan the binary and generate the monitor (or pass an .apk)
python3 flutter_http_monitor.py path/to/libflutter.so -o monitor.js
# run it against the app
frida -U -f com.target.app -l monitor.js
वैकल्पिक, Frida REPL में लाइव: केवल विशिष्ट होस्ट (Burp-शैली स्कोप) देखने के लिए addScope('api.example.com')। एकल फ़ाइल — भेजने के लिए और कुछ नहीं।
अस्वीकरण
यह उपकरण केवल अधिकृत सुरक्षा अनुसंधान और पैठ परीक्षण के लिए है। उन ऐप्स के विरुद्ध उपयोग न करें जिनके आप मालिक नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति नहीं है।