Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
bfinject — iOS 11.0 - 11.1.2 के लिए LiberiOS और Electra जेलब्रेक के साथ Dylib इंजेक्शन | Kitploit
उपकरण/GitHubGitHub/bishopfox/bfinject
गतिशील विश्लेषण (सैंडबॉक्सिंग)आईओएस सुरक्षाशोषणमोबाइल ऐप पेंटेस्टिंगपेनिट्रेशन टेस्टिंगबाइनरी विश्लेषण
GitHubbishopfox/bfinject

bfinject

iOS 11.0 - 11.1.2 के लिए LiberiOS और Electra जेलब्रेक के साथ Dylib इंजेक्शन

रिपॉजिटरी देखें
6411504 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

bfinject

जेलब्रेक किए गए 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/

नेविगेट करें

  • Electra सेटअप
  • LiberiOS सेटअप
  • bfinject का उपयोग
  • bfinject का परीक्षण
  • App Store ऐप्स डिक्रिप्ट करना
  • Cycript
  • यह कैसे काम करता है?
  • ज्ञात समस्याएँ
  • श्रेय

Electra सेटअप

  • अपने iOS 11.0 - 11.1.2 डिवाइस को Electra >= b7 से जेलब्रेक करें
  • bfinject टारबॉल, https://github.com/BishopFox/bfinject/raw/master/bfinject.tar, को अपने जेलब्रेक किए गए डिवाइस पर कॉपी करें। आपको इसे पहले अपने लैपटॉप पर कॉपी करने की आवश्यकता हो सकती है क्योंकि Github SSL लागू करता है, लेकिन Electra संस्करण का wget SSL का समर्थन नहीं करता है।
root@kitploit:~
ssh root@your-device-ip # (the password is 'alpine')
mkdir bfinject
cd bfinject
wget http://<your_server>/bfinject.tar
tar xvf bfinject.tar

LiberiOS सेटअप

  • अपने iOS 11.0 - 11.1.2 डिवाइस को LiberiOS >= 11.0.3 से जेलब्रेक करें
  • bfinject टारबॉल, https://github.com/BishopFox/bfinject/raw/master/bfinject.tar, को अपने जेलब्रेक किए गए डिवाइस पर कॉपी करें। आपको इसे पहले अपने लैपटॉप पर कॉपी करने की आवश्यकता हो सकती है क्योंकि Github SSL लागू करता है, लेकिन LiberiOS संस्करण का wget SSL का समर्थन नहीं करता है।
root@kitploit:~
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

bfinject का उपयोग

  • उस लक्षित ऐप को लॉन्च करें जिसमें आप अपनी शेयर्ड लाइब्रेरी इंजेक्ट करेंगे
  • सहायता के लिए bash bfinject टाइप करें
  • नोट: कमांड से पहले bash लगाना महत्वपूर्ण है अन्यथा यह काम नहीं करेगा। सैंडबॉक्स वगैरह-वगैरह।
root@kitploit:~
-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 ऐप को लक्ष्य के रूप में उपयोग करने का एक उदाहरण है:

root@kitploit:~
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.

डिवाइस स्क्रीन पर आपको यह देखना चाहिए:

यदि नहीं, तो कुछ टूटा हुआ है ;)

App Store ऐप्स डिक्रिप्ट करें

यहाँ Electra-जेलब्रेक किए गए iPhone पर Reddit ऐप को डिक्रिप्ट करने का उदाहरण है:

root@kitploit:~
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 के साथ इस तरह डाउनलोड किया जा सकता है:

root@kitploit:~
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 कहाँ संग्रहीत है। उदाहरण के लिए:

root@kitploit:~
[dumpdecrypted] Wrote /var/mobile/Containers/Data/Application/6E6A5887-8B58-4FC5-A2F3-7870EDB5E8D1/Documents/decrypted-app.ipa

आप फ़ाइल सिस्टम में IPA को इस तरह भी खोज सकते हैं:

root@kitploit:~
find /var/mobile/Containers/Data/Application/ -name decrypted-app.ipa

डिवाइस से .ipa निकालना netcat के साथ किया जा सकता है। अपने लैपटॉप पर एक लिसनर सेवा सेट करें:

root@kitploit:~
ncat -l 0.0.0.0 12345 > decrypted.ipa

और जेलब्रेक किए गए डिवाइस पर:

root@kitploit:~
cat /path/to/decrypted.ipa > /dev/tcp/<IP_OF_YOUR_COMPUTER>/12345

.ipa App Store के मूल .ipa का एक क्लोन होगा, सिवाय इसके कि मुख्य बाइनरी और इसके साथ आने वाले सभी फ्रेमवर्क और शेयर्ड लाइब्रेरी डिक्रिप्ट की जाएँगी। प्रत्येक पहले से एन्क्रिप्टेड फ़ाइल में CRYPTID फ्लैग 0 होगा। आप .ipa ले सकते हैं, ऐप निकाल सकते हैं, आवश्यकतानुसार संशोधित कर सकते हैं, इसे अपने स्वयं के डेवलपर प्रमाणपत्र के साथ फिर से साइन कर सकते हैं, और आवश्यकतानुसार इसे गैर-जेलब्रेक किए गए डिवाइसों पर तैनात कर सकते हैं।

Cycript

bfinject की विशेषताओं में से एक सामान्य पेंटेस्टिंग टूल्स, जैसे Cycript, को शामिल करना है। समय के साथ और जोड़े जाएँगे। Cycript का उपयोग करने के लिए आपको अपने MacBook पर Cycript कमांड-लाइन क्लाइंट स्थापित करने की आवश्यकता होगी (http://www.cycript.org/)। फिर, एक बार bfinject आपके परीक्षण डिवाइस पर स्थापित हो जाए, तो इस उदाहरण जैसा कुछ करें जिसमें हम Reddit ऐप में Cycript इंजेक्ट करते हैं:

root@kitploit:~
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/ में स्थापित किया है):

root@kitploit:~
carl@calisto-3 /tmp $ ~/bin/cycript -r 192.168.1.33:1337
cy# UIApp
#"<RedditApplication: 0x102304a30>"
cy#

यह कैसे काम करता है?

उच्च स्तर पर, bfinject4realz चल रहे Apple-हस्ताक्षरित App Store ऐप में एक सेल्फ-साइन्ड .dylib साइड-लोड करता है।

यह प्रक्रिया दो चरणों में की जाती है।

1. इंजेक्ट की जाने वाली dylib पर हस्ताक्षर करें

iOS पर कोडसाइनिंग जाँच में यूज़रस्पेस सेवाएँ (amfid) और कर्नेल सेवाएँ (AppleMobileFileIntegrity) शामिल हैं। LiberiOS और Electra दोनों कोडसाइनिंग जाँचों को बायपास करने के लिए यूज़रस्पेस amfid प्रक्रिया को पैच करते हैं, लेकिन कर्नेल द्वारा अभी भी आगे की जाँच की जाती है।

हालाँकि, Electra और LiberiOS KPPless हैं, जिसका अर्थ है कि वे कर्नेल में कुछ भी पैच नहीं करते; एक भी बाइट नहीं। यह Kernel Patch Protection ("KPP") के कारण है, जो एक Apple सुरक्षा तकनीक है जो कर्नेल पैच का पता लगाने और उन्हें विफल करने के लिए परिष्कृत कर्नेल इंट्रोस्पेक्शन करती है। परिणामस्वरूप, कर्नेल कोडसाइनिंग जाँच अभी भी बरकरार हैं।

सौभाग्य से हमारे लिए, ऐसा प्रतीत होता है कि कर्नेल मान लेता है कि amfid ने dylib के एंटाइटलमेंट्स से जुड़े क्रिप्टोग्राफ़िक हस्ताक्षर की वैधता पहले ही जाँच ली है। परिणामस्वरूप, यदि हम चाहते हैं कि कर्नेल इसे स्वीकार करे तो हमें केवल एक dylib में दो एंटाइटलमेंट्स को सेल्फ-साइन करना होगा:

  • पहला है platform-application एंटाइटलमेंट, जो मेरी समझ से संकेत देता है कि dylib Apple सॉफ़्टवेयर है।
  • दूसरा है साइनिंग प्रमाणपत्र का Team ID जिसका उपयोग उस कोड पर हस्ताक्षर करने के लिए किया गया था जिसमें हम इंजेक्ट कर रहे हैं। उदाहरण के लिए, Reddit ऐप Team ID 2TDUX39LX8 के साथ हस्ताक्षरित है। परिणामस्वरूप, Reddit ऐप में dylib इंजेक्ट करने के लिए हमें dylib पर उसी Team ID: 2TDUX39LX8 के साथ हस्ताक्षर करना होगा।

bfinject आपके लिए साइनिंग की सभी चालबाज़ियों का ध्यान रखता है, जो अच्छा है।

2. सही ढंग से हस्ताक्षरित dylib को लक्षित प्रक्रिया में इंजेक्ट करें

  • task_for_pid() का उपयोग करके, लक्षित प्रक्रिया के लिए एक mach पोर्ट प्राप्त करें
  • लक्षित प्रक्रिया में थ्रेड्स और नॉन-एक्ज़िक्यूटेबल मेमोरी सेगमेंट्स में हेरफेर करने के लिए पोर्ट का उपयोग करें
    • नोट: कर्नेल पैच के बिना, किसी प्रक्रिया में एक्ज़िक्यूटेबल कोड को संशोधित करना संभव नहीं है।
    • परिणामस्वरूप, हमें अपनी पसंद का कोड निष्पादित करने के लिए ROP ट्रिक्स का उपयोग करना पड़ता है।
  • नए अस्थायी स्टैक के लिए रिमोट प्रक्रिया में कुछ मेमोरी पेज आवंटित करें
  • स्टैक में ज्ञात स्थान पर स्ट्रिंग "/path/to/my.dylib" रखें
  • रिमोट प्रक्रिया में dlopen() का पता खोजने के लिए कुछ ट्रिक्स का उपयोग करें
  • एक एक्ज़िक्यूटेबल पेज में एक सरल RET ROP गैजेट खोजें (RET = "\xc0\x03\x5f\xd6" arm64 पर)
  • लक्षित प्रक्रिया में एक नया थ्रेड बनाएँ
  • थ्रेड के लिए CPU रजिस्टर सेट करें:
    • $pc = dlopen() का पता
    • $x0 = dlopen का पैरामीटर 1: अस्थायी स्टैक में स्ट्रिंग "/path/to/dylib" का पता
    • $x1 = dlopen का पैरामीटर 2: मान RTLD_LAZY | RTLD_GLOBAL
    • $sp = अस्थायी स्टैक का मध्य
    • $fp = अस्थायी स्टैक में एक चौथाई दूरी
    • $lr = ROP गैजेट का पता
  • थ्रेड को फिर से शुरू करें। निम्नलिखित होगा:
    • dlopen() के लिए थ्रेडिंग सेट करने हेतु _pthread_set_self कॉल किया जाता है
    • dlopen() को हमारी ईविल शेयर्ड लाइब्रेरी इंजेक्ट करने के लिए कॉल किया जाता है
    • dlopen() $lr रजिस्टर में मान पर RET होगा, जो एक और RET निर्देश है
    • RET, RET पर लौटेगा, RET, RET पर लौटेगा... अनंत काल तक
  • $pc == ROP गैजेट (RET निर्देश) के पते की जाँच करने के लिए थ्रेड के रजिस्टरों को पोल करें
  • गैजेट हिट होते ही, थ्रेड समाप्त करें, मेमोरी मुक्त करें, काम हो गया।

निम्न-स्तरीय विवरण के लिए, स्रोत देखें।

ज्ञात समस्याएँ

ध्यान दें कि Electra पर, jtool (@morpheus' कोड-साइनिंग मल्टीटूल) का संस्करण प्लेटफ़ॉर्म बाइनरी एंटाइटलमेंट्स का समर्थन नहीं करता है, इसलिए bfinject LiberiOS से jtool प्रदान करता है और उसके बजाय उसका उपयोग करता है। bfinject Electra के inject_criticald का उपयोग नहीं करता है।

श्रेय

  • dumpdecrypted के पीछे मूल विचारों और कोड के लिए Stefan Esser (10n1c) (https://github.com/stefanesser/dumpdecrypted/blob/master/dumpdecrypted.c)
  • lorgnette के लिए Dmitry Rodionov (https://github.com/rodionovd/liblorgnette/)
  • LiberiOS जेलब्रेक के लिए Jonathan Levin (http://newosxbook.com/liberios/)
  • async_wake एक्सप्लॉइट के लिए Ian Beer (https://bugs.chromium.org/p/project-zero/issues/detail?id=1417)
  • एक बेहतरीन मोबाइल OS के लिए Apple
टूल डाउनलोड करें