universal-flutter-ssl-pinning
يقوم بعملية الهندسة العكسية لـ libflutter.so باستخدام PyGhidra لتحديد وظيفة التحقق من شهادة SSL، ثم يصدر نصوص برمجية جاهزة للاستخدام لتجاوزها لكل من Frida و Renef.
كيف يعمل
- PyGhidra يقوم بتحميل
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) الذي يستخدم Memory.patch لاستبدال مدخل الوظيفة بـ MOV X0, #1 ; RET (ARM64)
المتطلبات
- 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 (arm64-v8a) |
يستخدم كل من Google Flutter و Shorebird نفس محرك SSL في libflutter.so.
عنوان RVA المُكتشف تلقائيًا متطابق عبر أنواع البناء لنفس إصدار محرك Flutter.
التقاط سريع للحركة المرورية (بدون وكيل)
بالإضافة إلى تجاوز التثبيت لـ MITM القائم على الوكيل، يمكنك التقاط حركة HTTP المُفككة مباشرة في Frida باستخدام flutter_http_monitor.py المتكامل. يقوم بتحديد موقع BoringSSL SSL_write/SSL_read تلقائيًا في libflutter.so (أي إصدار من Flutter، arm64) ويُنشئ نص 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
اختياري، في REPL لـ Frida: addScope('api.example.com') لمشاهدة مضيفين محددين فقط (نطاق على غرار Burp). ملف واحد — لا شيء آخر لشحنه.
إخلاء المسؤولية
هذه الأداة مخصصة فقط للبحث الأمني المصرح به واختبار الاختراق.
لا تستخدمها ضد تطبيقات لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها.