
حقن Dylib لنظام iOS 11.0 - 11.1.2 مع كسر حماية LiberiOS وElectra
حقن مكتبات dylib بسهولة على أجهزة iOS 11.0 - 11.1.2 المهكرة 64-بت. متوافق مع أدوات الكسر Electra و LiberiOS.
تقوم bfinject بتحميل مكتبات dylib عشوائية في تطبيقات App Store قيد التشغيل. لديها دعم مدمج لفك تشفير تطبيقات App Store، وتأتي مع iSpy و Cycript.
bfinject هي غلاف يتولى التوقيع الصحيح لمكتبات dylib قبل حقنها باستخدام bfinject4realz. وهي مستقلة تمامًا، ولا تتطلب jailbreakd أو QiLin أو أي شيء من هذا القبيل. إنها تعمل فحسب.
ملاحظة: لا تعمل bfinject على Electra إذا كان خيار "Tweaks" مفعّلًا. أعد التشغيل ثم أعد تشغيل Electra بدون tweaks لاستخدام bfinject. إذا رأيت أخطاءً تتعلق بـ "thread_create"، فهذا هو السبب.
ملاحظة: bfdecrypt متاحة كمكتبة dylib مستقلة هنا: https://github.com/BishopFox/bfdecrypt/
wget في Electra بروتوكول SSL.ssh root@your-device-ip # (the password is 'alpine')
mkdir bfinject
cd bfinject
wget http://<your_server>/bfinject.tar
tar xvf bfinject.tar
wget في LiberiOS بروتوكول SSL.ssh root@your-device-ip # (the password is 'alpine')
export PATH=$PATH:/jb/usr/bin:/jb/bin:/jb/sbin:/jb/usr/sbin:/jb/usr/local/bin:
cd /jb
mkdir bfinject
cd bfinject
wget http://<your_server>/bfinject.tar
tar xvf bfinject.tar
bash bfinject للحصول على المساعدةbash وإلا لن يعمل. بسبب بيئة الحماية (Sandbox) وهكذا دواليك.-bash-3.2# bash bfinject
Syntax: bfinject [-p PID | -P appname] [-l /path/to/yourdylib | -L feature]
For example:
bfinject -P Reddit.app -l /path/to/evil.dylib # Injects evil.dylib into the Reddit app
or
bfinject -p 1234 -L cycript # Inject Cycript into PID
or
bfinject -p 4566 -l /path/to/evil.dylib # Injects the .dylib of your choice into PID
Instead of specifying the PID with -p, bfinject can search for the correct PID based on the app name.
Just enter "-P identifier" where "identifier" is a string unique to your app, e.g. "fing.app".
Available features:
cycript - Inject and run Cycript
decrypt - Create a decrypted copy of the target app
test - Inject a simple .dylib to make an entry in the console log
ispy - Inject iSpy. Browse to http://<DEVICE_IP>:31337/
قبل القيام بأي شيء أكثر تعقيدًا، اختبر أنه يعمل. تحتوي bfinject على اختبارات ذاتية مدمجة. إليك مثال باستخدام تطبيق Reddit كهدف:
Cs-iPhone:~ root# bash bfinject -P Reddit -L test
[+] Electra detected.
[+] Injecting into '/var/containers/Bundle/Application/55C94FAA-A282-4FDC-967D-6A012D01087E/Reddit.app/Reddit'
[+] Getting Team ID from target application...
[+] Thinning dylib into non-fat arm64 image
[+] Signing injectable .dylib with Team ID 2TDUX39LX8 and platform entitlements...
[bfinject4realz] Calling task_for_pid() for PID 486.
[bfinject4realz] Calling thread_create() on PID 486
[bfinject4realz] Looking for ROP gadget... found at 0x1019a2ba0
[bfinject4realz] Fake stack frame at 0x12ac5c000
[bfinject4realz] Calling _pthread_set_self() at 0x182bfb814...
[bfinject4realz] Returned from '_pthread_set_self'
[bfinject4realz] Calling dlopen() at 0x1829bb460...
[bfinject4realz] Returned from 'dlopen'
[bfinject4realz] Success! Library was loaded at 0x1c016e1c0
[+] So long and thanks for all the fish.
على شاشة الجهاز يجب أن ترى ما يلي:
إذا لم يحدث ذلك، فشيء ما معطّل ;)
إليك مثالًا لفك تشفير تطبيق Reddit على iPhone مكسور الحماية عبر Electra:
Cs-iPhone:~ root# bash bfinject -P Reddit -L decrypt
[+] Electra detected.
[+] Injecting into '/var/containers/Bundle/Application/BCEBDD64-6738-45CE-9B3C-C6F933EA0793/Reddit.app/Reddit'
[+] Getting Team ID from target application...
[+] Thinning dylib into non-fat arm64 image
[+] Signing injectable .dylib with Team ID 2TDUX39LX8 and platform entitlements...
[bfinject4realz] Calling task_for_pid() for PID 3218.
[bfinject4realz] Calling thread_create() on PID 3218
[bfinject4realz] Looking for ROP gadget... found at 0x1016a5110
[bfinject4realz] Fake stack frame at 0x10a06c000
[bfinject4realz] Calling _pthread_set_self() at 0x181303814...
[bfinject4realz] Returned from '_pthread_set_self'
[bfinject4realz] Calling dlopen() at 0x1810c3460...
[bfinject4realz] Returned from 'dlopen'
[bfinject4realz] Success! Library was loaded at 0x1c03e1100
[+] So long and thanks for all the fish.
سترى هذه الشاشة على جهازك:
عند اكتمالها، ستظهر لك رسالة تنبيه تسألك عما إذا كنت تريد تشغيل خدمة يمكنك من خلالها تنزيل ملف IPA المفكوك تشفيره:
إذا نقرت على Yes، سيتم تشغيل خدمة على المنفذ 31336 في جهازك. اتصل بها وستُرسل إليك نسخة خام من ملف IPA يمكن تنزيلها باستخدام netcat كما يلي:
carl@calisto-3 /tmp $ nc 192.168.1.33 31336 > decrypted.ipa
carl@calisto-3 /tmp $ ls -l decrypted.ipa
-rw-r--r-- 1 carl wheel 14649063 Jan 25 16:57 decrypted.ipa
carl@calisto-3 /tmp $ file decrypted.ipa
decrypted.ipa: iOS App Zip archive data, at least v2.0 to extract
بدلاً من ذلك، تحقق من سجل وحدة التحكم (console log) الخاص بالجهاز، فسيخبرك بمكان تخزين ملف IPA المفكوك. على سبيل المثال:
[dumpdecrypted] Wrote /var/mobile/Containers/Data/Application/6E6A5887-8B58-4FC5-A2F3-7870EDB5E8D1/Documents/decrypted-app.ipa
يمكنك أيضًا البحث في نظام الملفات عن ملف IPA كما يلي:
find /var/mobile/Containers/Data/Application/ -name decrypted-app.ipa
يمكن إخراج ملف .ipa من الجهاز باستخدام netcat. على حاسوبك المحمول، جهّز خدمة استماع:
ncat -l 0.0.0.0 12345 > decrypted.ipa
وعلى الجهاز المهكّر:
cat /path/to/decrypted.ipa > /dev/tcp/<IP_OF_YOUR_COMPUTER>/12345
سيكون ملف .ipa نسخة طبق الأصل من ملف .ipa الأصلي القادم من App Store، باستثناء أن الملف الثنائي الرئيسي وجميع أُطر العمل والمكتبات المشتركة المرافقة له ستكون مفكوكة التشفير. وستكون قيمة علم CRYPTID صفرًا في كل ملف كان مشفّرًا سابقًا. يمكنك أخذ ملف .ipa واستخراج التطبيق وتعديله حسب الحاجة، ثم إعادة توقيعه بشهادة المطوّر الخاصة بك، ونشره على الأجهزة غير المهكرة عند الحاجة.
من ميزات bfinject تضمين أدوات اختبار الاختراق الشائعة، مثل Cycript. وسيُضاف المزيد بمرور الوقت. لاستخدام Cycript، ستحتاج إلى تثبيت عميل Cycript لسطر الأوامر على جهاز MacBook الخاص بك (http://www.cycript.org/). بعد ذلك، بمجرد تثبيت bfinject على جهاز الاختبار، نفّذ شيئًا مثل هذا المثال الذي نحقن فيه Cycript في تطبيق Reddit:
Cs-iPhone:~ root# bash bfinject -P Reddit -L cycript
[+] Electra detected.
[+] Injecting into '/var/containers/Bundle/Application/55C94FAA-A282-4FDC-967D-6A012D01087E/Reddit.app/Reddit'
[+] Getting Team ID from target application...
[+] Thinning dylib into non-fat arm64 image
[+] Signing injectable .dylib with Team ID 2TDUX39LX8 and platform entitlements...
[bfinject4realz] Calling task_for_pid() for PID 486.
[bfinject4realz] Calling thread_create() on PID 486
[bfinject4realz] Looking for ROP gadget... found at 0x1019a2ba0
[bfinject4realz] Fake stack frame at 0x10ab00000
[bfinject4realz] Calling _pthread_set_self() at 0x182bfb814...
[bfinject4realz] Returned from '_pthread_set_self'
[bfinject4realz] Calling dlopen() at 0x1829bb460...
[bfinject4realz] Returned from 'dlopen'
[bfinject4realz] Success! Library was loaded at 0x1c01786c0
[+] Injecting into '/var/containers/Bundle/Application/55C94FAA-A282-4FDC-967D-6A012D01087E/Reddit.app/Reddit'
[+] Getting Team ID from target application...
[+] Thinning dylib into non-fat arm64 image
[+] Signing injectable .dylib with Team ID 2TDUX39LX8 and platform entitlements...
[bfinject4realz] Calling task_for_pid() for PID 486.
[bfinject4realz] Calling thread_create() on PID 486
[bfinject4realz] Looking for ROP gadget... found at 0x1019a2ba0
[bfinject4realz] Fake stack frame at 0x10ab00000
[bfinject4realz] Calling _pthread_set_self() at 0x182bfb814...
[bfinject4realz] Returned from '_pthread_set_self'
[bfinject4realz] Calling dlopen() at 0x1829bb460...
[bfinject4realz] Returned from 'dlopen'
[bfinject4realz] Success! Library was loaded at 0x1c4179680
[+] So long and thanks for all the fish.
بمجرد حقن Cycript، سترى الرسالة التالية على جهازك:
يمكنك الاتصال بـ Cycript من MacBook الخاص بك هكذا (بافتراض أنك ثبّتّ Cycript في ~/bin/):
carl@calisto-3 /tmp $ ~/bin/cycript -r 192.168.1.33:1337
cy# UIApp
#"<RedditApplication: 0x102304a30>"
cy#
على مستوى عالٍ، يقوم bfinject4realz بتحميل جانبي لمكتبة .dylib موقعة ذاتيًا داخل تطبيق App Store قيد التشغيل وموقع من Apple.
تتم العملية على مرحلتين.
تتكوّن فحوصات توقيع الكود على iOS من خدمات في مساحة المستخدم (amfid) وخدمات في النواة (AppleMobileFileIntegrity). يقوم كل من LiberiOS و Electra بتصحيح عملية amfid في مساحة المستخدم لتجاوز فحوصات توقيع الكود، لكن لا تزال هناك فحوصات إضافية تنفذها النواة.
مع ذلك، فإن Electra و LiberiOS بدون KPP، مما يعني أنهما لا يصحّحان أي شيء في النواة؛ ولا حتى بايت واحد. يعود السبب إلى حماية تصحيحات النواة ("KPP")، وهي تقنية أمنية من Apple تقوم بفحص داخلي متطور للنواة لاكتشاف تصحيحات النواة وإحباطها. ونتيجةً لذلك، ما تزال فحوصات توقيع الكود في النواة سليمة.
لحسن حظنا، يبدو أن النواة تفترض أن amfid قد تحقق بالفعل من صحة التوقيع المشفّر المرتبط بامتيازات مكتبة dylib. ونتيجةً لذلك، كل ما علينا فعله هو توقيع امتيازين ذاتيًا داخل مكتبة dylib إذا أردنا أن تقبلها النواة:
platform-application، والذي أعتقد أنه يشير إلى أن مكتبة dylib هي برمجيات Apple.2TDUX39LX8. ونتيجةً لذلك، لحقن مكتبة dylib في تطبيق Reddit، يجب أن نوقّع المكتبة بنفس معرّف الفريق: 2TDUX39LX8.تتولى bfinject كل هذه التعقيدات المتعلقة بالتوقيع نيابةً عنك، وهذا أمر جميل.
task_for_pid()، احصل على منفذ mach للعملية الهدفللحصول على وصف منخفض المستوى، راجع المصدر.
لاحظ أنه على Electra، فإن إصدار jtool (أداة التوقيع متعددة الاستخدامات الخاصة بـ @morpheus) لا يدعم امتيازات المنصّة الثنائية، لذلك توفّر bfinject jtool من LiberiOS وتستخدمه بدلاً من ذلك. لا تستخدم bfinject أداة inject_criticald الخاصة بـ Electra.