
iOS 11.0 - 11.1.2 के लिए LiberiOS और Electra जेलब्रेक के साथ Dylib इंजेक्शन
जेलब्रेक किए गए 64-बिट iOS 11.0 - 11.1.2 के लिए आसान dylib इंजेक्शन। Electra और LiberiOS जेलब्रेक के साथ संगत।
bfinject चल रहे App Store ऐप्स में मनमानी dylib लोड करता है। इसमें App Store ऐप्स को डिक्रिप्ट करने का अंतर्निहित समर्थन है, और यह iSpy और Cycript के साथ बंडल आता है।
bfinject एक रैपर है जो bfinject4realz का उपयोग करके आपकी dylib को इंजेक्ट करने से पहले उन्हें सही ढंग से कोडसाइन करने का ध्यान रखता है। यह पूरी तरह से स्टैंडअलोन है, इसे jailbreakd, QiLin, या ऐसा कुछ भी आवश्यक नहीं है। यह बस काम करता है।
नोट: यदि "Tweaks" सक्षम है तो bfinject Electra पर काम नहीं करता है। bfinject का उपयोग करने के लिए रिबूट करें और बिना tweaks के Electra को फिर से चलाएँ। यदि आपको "thread_create" के साथ त्रुटियाँ दिखती हैं, तो यही समस्या है।
नोट: bfdecrypt यहाँ एक स्टैंडअलोन dylib के रूप में उपलब्ध है: https://github.com/BishopFox/bfdecrypt/
wget 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 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 लगाना महत्वपूर्ण है अन्यथा यह काम नहीं करेगा। सैंडबॉक्स वगैरह-वगैरह।-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.
डिवाइस स्क्रीन पर आपको यह देखना चाहिए:
यदि नहीं, तो कुछ टूटा हुआ है ;)
यहाँ Electra-जेलब्रेक किए गए iPhone पर Reddit ऐप को डिक्रिप्ट करने का उदाहरण है:
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.
आपको अपने डिवाइस पर यह स्क्रीन दिखाई देगी:
यह पूरा हो जाने पर, आपको एक UI अलर्ट दिखाया जाएगा जो पूछेगा कि क्या आप एक सेवा शुरू करना चाहते हैं जिससे आप अपना डिक्रिप्टेड 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
वैकल्पिक रूप से, डिवाइस का कंसोल लॉग जाँचें, यह आपको बताएगा कि डिक्रिप्टेड 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 App Store के मूल .ipa का एक क्लोन होगा, सिवाय इसके कि मुख्य बाइनरी और इसके साथ आने वाले सभी फ्रेमवर्क और शेयर्ड लाइब्रेरी डिक्रिप्ट की जाएँगी। प्रत्येक पहले से एन्क्रिप्टेड फ़ाइल में CRYPTID फ्लैग 0 होगा। आप .ipa ले सकते हैं, ऐप निकाल सकते हैं, आवश्यकतानुसार संशोधित कर सकते हैं, इसे अपने स्वयं के डेवलपर प्रमाणपत्र के साथ फिर से साइन कर सकते हैं, और आवश्यकतानुसार इसे गैर-जेलब्रेक किए गए डिवाइसों पर तैनात कर सकते हैं।
bfinject की विशेषताओं में से एक सामान्य पेंटेस्टिंग टूल्स, जैसे Cycript, को शामिल करना है। समय के साथ और जोड़े जाएँगे। Cycript का उपयोग करने के लिए आपको अपने MacBook पर Cycript कमांड-लाइन क्लाइंट स्थापित करने की आवश्यकता होगी (http://www.cycript.org/)। फिर, एक बार bfinject आपके परीक्षण डिवाइस पर स्थापित हो जाए, तो इस उदाहरण जैसा कुछ करें जिसमें हम Reddit ऐप में Cycript इंजेक्ट करते हैं:
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 इंजेक्ट हो जाने के बाद, आपको अपने डिवाइस पर निम्न संदेश दिखाई देगा:
आप अपने MacBook से इस तरह Cycript से कनेक्ट कर सकते हैं (मान लें कि आपने Cycript को ~/bin/ में स्थापित किया है):
carl@calisto-3 /tmp $ ~/bin/cycript -r 192.168.1.33:1337
cy# UIApp
#"<RedditApplication: 0x102304a30>"
cy#
उच्च स्तर पर, bfinject4realz चल रहे Apple-हस्ताक्षरित App Store ऐप में एक सेल्फ-साइन्ड .dylib साइड-लोड करता है।
यह प्रक्रिया दो चरणों में की जाती है।
iOS पर कोडसाइनिंग जाँच में यूज़रस्पेस सेवाएँ (amfid) और कर्नेल सेवाएँ (AppleMobileFileIntegrity) शामिल हैं। LiberiOS और Electra दोनों कोडसाइनिंग जाँचों को बायपास करने के लिए यूज़रस्पेस amfid प्रक्रिया को पैच करते हैं, लेकिन कर्नेल द्वारा अभी भी आगे की जाँच की जाती है।
हालाँकि, Electra और LiberiOS KPPless हैं, जिसका अर्थ है कि वे कर्नेल में कुछ भी पैच नहीं करते; एक भी बाइट नहीं। यह Kernel Patch Protection ("KPP") के कारण है, जो एक Apple सुरक्षा तकनीक है जो कर्नेल पैच का पता लगाने और उन्हें विफल करने के लिए परिष्कृत कर्नेल इंट्रोस्पेक्शन करती है। परिणामस्वरूप, कर्नेल कोडसाइनिंग जाँच अभी भी बरकरार हैं।
सौभाग्य से हमारे लिए, ऐसा प्रतीत होता है कि कर्नेल मान लेता है कि amfid ने dylib के एंटाइटलमेंट्स से जुड़े क्रिप्टोग्राफ़िक हस्ताक्षर की वैधता पहले ही जाँच ली है। परिणामस्वरूप, यदि हम चाहते हैं कि कर्नेल इसे स्वीकार करे तो हमें केवल एक dylib में दो एंटाइटलमेंट्स को सेल्फ-साइन करना होगा:
platform-application एंटाइटलमेंट, जो मेरी समझ से संकेत देता है कि dylib Apple सॉफ़्टवेयर है।2TDUX39LX8 के साथ हस्ताक्षरित है। परिणामस्वरूप, Reddit ऐप में dylib इंजेक्ट करने के लिए हमें dylib पर उसी Team ID: 2TDUX39LX8 के साथ हस्ताक्षर करना होगा।bfinject आपके लिए साइनिंग की सभी चालबाज़ियों का ध्यान रखता है, जो अच्छा है।
task_for_pid() का उपयोग करके, लक्षित प्रक्रिया के लिए एक mach पोर्ट प्राप्त करेंनिम्न-स्तरीय विवरण के लिए, स्रोत देखें।
ध्यान दें कि Electra पर, jtool (@morpheus' कोड-साइनिंग मल्टीटूल) का संस्करण प्लेटफ़ॉर्म बाइनरी एंटाइटलमेंट्स का समर्थन नहीं करता है, इसलिए bfinject LiberiOS से jtool प्रदान करता है और उसके बजाय उसका उपयोग करता है। bfinject Electra के inject_criticald का उपयोग नहीं करता है।