
أداة dump مُحدَّثة لـ iOS تدعم أحدث واجهات برمجة التطبيقات في Frida 17.5.2
أداة حديثة لفك تشفير ذاكرة تطبيقات iOS، مبنية لتعمل مع Frida 17.5.2+ مع دعم كامل لـ iOS 14-16 وأنظمة كسر الحماية المتعددة.
الحالة: ✅ تعمل ومختبَرة - تنجح في تفريغ وفك تشفير تطبيقات iOS باستخدام Frida 17.5.2 على:
/cores/binpack/ الخاصة بـ palera1nأداة frida-ios-dump الأصلية (آخر تحديث لها 2020) تستخدم استدعاءات Frida API قديمة لا تعمل مع Frida 17.5.2. هذه الأداة مبنية من الصفر باستخدام واجهات Frida API الحديثة ومختبَرة تحديداً مع تصحيحات Frida المتوافقة مع Taurine.
paramiko (مكتبة SSH بلغة Python - تُثبَّت تلقائياً)iproxy (للاتصال عبر USB بواسطة libimobiledevice)will add my patch repo)cd /Users/username/git/frida-ios-dump-modern
# Create virtual environment with uv:
uv venv
source .venv/bin/activate
# Install dependencies
uv pip install -r requirements.txt
# Make script executable
chmod +x dump.py
# Install libimobiledevice if needed
brew install libimobiledevice
# Start USB tunnel (in a separate terminal)
iproxy 2222 22
python dump.py -l
مهم: يجب أن يكون التطبيق قيد التشغيل قبل التفريغ بسبب قيود كسر حماية Taurine.
# 1. Launch the app on your device manually
# 2. Run the dumper:
python dump.py com.example.app
# With custom SSH password:
python dump.py com.example.app -P your_password
# With custom output directory:
python dump.py com.example.app -o /path/to/output
# 1. Open Ventusky on your iOS device
# 2. Run:
python dump.py com.in-meteo.ventusky -P mypassword
/tmp على الجهازلماذا يعمل هذا على iOS 16:
تنشئ الأداة:
مثال على بنية المخرجات:
/tmp/Ventusky_decrypted/
├── Payload/
│ └── Ventusky.app/
│ ├── Ventusky (decrypted main binary)
│ ├── Frameworks/
│ │ └── *.framework (decrypted frameworks)
│ └── ... (other app resources)
└── Ventusky_decrypted.ipa
صُممت هذه الأداة للعمل مع خادم Frida المُصحَّح لـ Taurine والذي يتضمن:
# Check frida-server is running on device:
ssh -p 2222 root@localhost "ps aux | grep frida-server"
# Restart frida-server if needed:
ssh -p 2222 root@localhost "killall frida-server; frida-server &"
# List apps to find correct bundle ID:
python dump.py -l
# Launch the app manually on your device first
# This is required due to Taurine jailbreak restrictions
# Test SSH connection:
ssh -p 2222 root@localhost
# If password prompt works, use -P flag:
python dump.py com.example.app -P your_password
إذا كنت تواجه أخطاء في البيانات الوصفية على iOS 16 بعد التصحيح:
شخّص المشكلة:
# Run diagnostic on dumped binary
./diagnose_ios16.sh /tmp/AppName_decrypted/Payload/AppName.app/AppName
# Compare with working iOS 14 binary
./diagnose_ios16.sh /path/to/working/ios14/binary
أمور أساسية يجب التحقق منها:
تقرأ الأداة الآن حجم الملف الأصلي من القرص لتجنب تفريغ مناطق الذاكرة الموسّعة وقت التشغيل.
خبر سار: تقوم الأداة الآن تلقائياً بتعيين cryptid=0 أثناء التفريغ، فلا حاجة للتصحيح اليدوي بعد الآن!
التوافق مع iOS 16: تستخدم الأداة نهجاً هجيناً:
يمنع هذا حدوث خطأي "هل هذا ملف مستخرج يدوياً من DYLD shared cache؟" و"بيانات Objective-C الوصفية تبدو مشوهة" على نظام iOS 16.
تحقق من التفريغ:
# Check that cryptid is 0 (should be automatic now)
otool -l Payload/App.app/App | grep cryptid
# Should show: cryptid 0
# Check file has all segments
otool -l Payload/App.app/App | grep "segname __"
# Should show: __TEXT, __DATA_CONST, __DATA, __LINKEDIT
# Open in Hopper - should work without warnings!
التصحيح اليدوي (قديم - لم يعد مطلوباً):
إذا لم يعمل التصحيح التلقائي لـ cryptid لسبب ما:
# Check if patching needed
otool -l Payload/App.app/App | grep cryptid
# If shows cryptid 1, run:
python patch_cryptid.py Payload/App.app/App
mv Payload/App.app/App.patched Payload/App.app/App
النتيجة المتوقعة:
تفاصيل تقنية - عمليات الإصلاح المتسلسلة في iOS 16:
تستخدم هذه الأداة واجهات Frida 17.5.2 API الحديثة:
إذا وجدت هذه الأداة مفيدة أو تحتاج تحديثات إضافية، ففكر في دعم المشروع الذي يحتاج Boba:
رخصة MIT - مجانية لأغراض البحث الأمني والتعليم.
هذه الأداة مخصصة لـ:
| API القديم (مهمل) | API الحديث | ملاحظات |
|---|
Module.ensureInitialized() | غير مطلوب | تتم تهيئة ObjC تلقائياً |
Module.findExportByName(null, 'name') | Module.findGlobalExportByName('name') | صادرات عامة |
Process.getModuleByName() | Process.findModuleByName() | يُرجع null إذا لم يتم العثور عليه |
| إدخال/إخراج ملفات POSIX يدوي | new File(path, 'wb') | واجهة File API مدمجة |
Memory.writeByteArray() | file.write(arrayBuffer) | كتابة ثنائية مباشرة |