
مجموعة أدوات جنائية تجريبية بـ .NET/WPF لمصادقة iCloud، وتنزيل نسخ CloudKit/MMCS الاحتياطية، واسترداد Octagon/PCS (ADP، Recovery Key، Lockdown Mode). برنامج بحثي من Forensis-Lab — تجريبي للغاية؛ قد تتغير واجهات Apple الخاصة بين ليلة وضحاها.
مرحلة تجريبية عامة — تطبيق WPF (.NET 10) لتسجيل الدخول إلى iCloud، وعرض قائمة نسخ النسخ الاحتياطي للأجهزة، والتنزيل عبر CloudKit/MMCS.

برنامج بحثي / مختبري. ليس منتجًا نهائيًا: واجهات برمجة تطبيقات Apple غير الموثقة، وخطر حظر الحساب، ولا يوجد ضمان. استخدمه فقط مع معرّف Apple الخاص بك وعلى مسؤوليتك الخاصة.
اسمي Giordano Sconti. أتعاون مع المختبر الجنائي Forensis-Lab، وأعمل باحثًا في البرمجيات وكذلك مستشارًا تقنيًا (Consulente Tecnico).
يُصدر هذا البرنامج بموجب ترخيص MIT، لكنه يخص المختبر الجنائي Forensis-Lab.
يجب اعتبار هذا المشروع تجريبيًا للغاية، لأن واجهات Apple الداخلية يمكن أن تتغير بين ليلة وضحاها.
أتيح هذا المشروع لأنه ذو قيمة للعمل الجنائي عندما يتعين علينا استعادة — في الحالات القصوى — النسخ الاحتياطية وبيانات CloudKit التي لا يمكن الوصول إليها إلا عبر الأجهزة نفسها.
على عكس الأدوات التجارية التي استخدمتها، حققت تنزيلًا مستقرًا وكاملًا لنسخي الاحتياطية الشخصية سواء مع تفعيل ADP أو تعطيله (مع معرفة رمز Octagon الخاص بالجهاز أو مفتاح الاسترداد عند تفعيله بالطبع).
كما يعمل عند تفعيل حمايات مثل وضع الحجز (Lockdown Mode) وإيقاف iCloud.com.
استغرق هذا المشروع نحو سبعة أشهر من البحث. لولا نماذج وكيل البرمجة Cursor لاستغرق وقتًا أطول بكثير: فالوقت الوحيد المتاح لدي كان خلال ساعات العمل عندما يتسنى ذلك، أو في وقت متأخر من الليل. حاولت الحفاظ على تنظيم معياري (modular) للكود — وآمل أن أكون قد نجحت.
إذا كنت ترغب في شراء قهوة لي، فأفضّل أن تشكر Forensis-Lab أو تقدم شكلًا آخر من التقدير بدلًا من ذلك.
كل من يرغب في تجربة البرنامج، أو اقتراح تحسينات، أو المساعدة في إكمال الميزات المتبقية مرحب به.
يمكنك استخدام نماذج وكلاء البرمجة المدفوعة (يُرجى تجنب المجانية منها — فهي غالبًا غير موثوقة فيما يتعلق بصحة الكود). المهم أن تراجع دائمًا الكود المولّد وأن لا يكون هناك استيلاء غير مصرح به على كود طرف ثالث دون موافقة. ستتم مراجعة طلبات السحب (Pull Requests) بعناية فائقة.
للتواصل: [email protected]
كل سطر من الكود في هذا المشروع يخص Forensis-Lab، بموجب منحي المباشر. أي استخدام أو تعديل يجب أن يبقى منسوبًا إلى Forensis-Lab.
إذا كنت ترغب في تجربة البرنامج قبل تشغيل حزمة anisette الخاصة بك، فتواصل معي على انفراد لطلب الوصول إلى Anisette Server الخاص بي.
https://giordanosconti.github.io/iCloudKitExtractor/

يستخدم فتح مفتاح الاسترداد نقطة نهاية Octagon يمكنها استخراج المجموعة الكاملة من TLKShares المشفرة. ومن تلك المشاركات يمكن أيضًا استرداد المشاركات المرتبطة بأقران مفتاح الاسترداد (SHA-384 للمفتاح العام الذي يوقّع مفتاح الاسترداد). يتيح ذلك التحقق مما إذا كان مفتاح استرداد معين من بين الموجودين، وإذا كان كذلك، استرداد Manatee/PCS KeySet لمناطق CloudKit — بما في ذلك النسخ الاحتياطية المحمية بـ ADP وKeychain.
src/iCloudKitExtractorsrc/PhotosViewer (يُنسخ إلى viewer-payload عند بناء IKE)AnisetteServer (+ مشاريع bridge الاختيارية) لـ OTP / ADIdocs/dotnet build src/iCloudKitExtractor/iCloudKitExtractor.csproj -c Release
dotnet run --project src/iCloudKitExtractor/iCloudKitExtractor.csproj -c Release
يوجد موقع المشروع تحت docs/ (index.html + site.css).
main إلى GitHub.main / المجلد: /docs.https://giordanosconti.github.io/iCloudKitExtractor/.المسار المفضّل للحصول على هوية iPhone/akd متسقة: يتم توليد OTP على الجهاز عبر Frida → AuthKit/akd، ثم يقدّمها AnisetteServer.
pip install frida-tools)python (أو اضبط FRIDA_ANISETTE_PYTHON)fetch_anisette.py (سكربت ربط Frida). اضبط مساره عبر FRIDA_ANISETTE_FETCH_PYخطوات تثبيت كسر الحماية: راجع Preparing a jailbroken iPhone أدناه (التفاصيل ستُعلن لاحقًا).
| المتغير | مطلوب | الافتراضي | المعنى |
|---|---|---|---|
ANISETTE_SERVER_BACKEND | نعم | coreadi | يجب أن يكون frida (أسماء بديلة: iphone-frida، jb-frida) |
ANISETTE_SERVER_URL / ANISETTE_SERVER_URLS | لا | http://127.0.0.1:6969 | عنوان (عناوين) URL التي يستمع عليها AnisetteServer |
ANISETTE_SERVER_PORT | لا | 6969 | المنفذ إذا لم تُضبط عناوين URL |
ICLOUD_AUTH_MODE | مُوصى به | iphone (عبر الإعدادات) | استخدم iphone للحصول على SRP الكامل لهوية iPhone عبر AuthKit |
FRIDA_ANISETTE_HOST | لا | 127.0.0.1:27042 | مضيف:منفذ frida-server (غالبًا عبر USB باستخدام iproxy 27042 27042) |
FRIDA_ANISETTE_PROCESS | لا | akd | العملية المراد الربط بها |
FRIDA_ANISETTE_FETCH_PY | نعم* | مسار استدلالي | المسار المطلق إلى fetch_anisette.py |
FRIDA_ANISETTE_PYTHON | لا | python | ملف Python التنفيذي |
FRIDA_ANISETTE_LITE | لا | 1 / true | وضع الربط المبسّط |
FRIDA_ANISETTE_TIMEOUT | لا | 60 | عدد الثواني قبل إلغاء عملية التوليد |
*بدون FRIDA_ANISETTE_FETCH_PY، يبحث التطبيق فقط في بعض المسارات الشقيقة القديمة؛ اضبط متغير البيئة صراحةً.
ملف إعدادات التطبيق الاختياري: %AppData%\iCloudKitExtractor\anisette.json (authMode، serverUrl). متغيرات البيئة تتجاوز الملف.
$env:ANISETTE_SERVER_BACKEND = "frida"
$env:ANISETTE_SERVER_PORT = "6971"
$env:FRIDA_ANISETTE_HOST = "127.0.0.1:27042"
$env:FRIDA_ANISETTE_PROCESS = "akd"
$env:FRIDA_ANISETTE_FETCH_PY = "C:\path\to\fetch_anisette.py"
$env:FRIDA_ANISETTE_PYTHON = "python"
$env:FRIDA_ANISETTE_LITE = "1"
$env:FRIDA_ANISETTE_TIMEOUT = "60"
dotnet run --project src/AnisetteServer/AnisetteServer.csproj -c Release -- --backend frida --port 6971
يتجاوز --backend / --port في CLI متغيرات البيئة.
اختبار سريع:
curl http://127.0.0.1:6971/health
curl http://127.0.0.1:6971/
توقّع JSON مع بيانات الآلة (X-Apple-I-MD-M، X-MMe-Client-Info التي تحتوي على com.apple.akd).
$env:ANISETTE_SERVER_URL = "http://127.0.0.1:6971/"
$env:ICLOUD_AUTH_MODE = "iphone"
dotnet run --project src/iCloudKitExtractor/iCloudKitExtractor.csproj -c Release
قم أولاً بتثبيت Frida (frida-server) وOpenSSH من Sileo على الجهاز.
يفترض كسر حماية بدون جذر (/var/jb/...). عبر SSH بصفتك root:
ls -l /var/jb/usr/sbin/frida-server
أعد إنشاء ملف LaunchDaemon plist (نهايات أسطر LF، rootless) — دون الحاجة إلى محرر: