# iOS Basic Testing Operations {{#include ../../banners/hacktricks-training.md}} ## **iOS डिवाइस पहचान और पहुंच का सारांश** ### **iOS डिवाइस का UDID पहचानना** iOS डिवाइस को अद्वितीय रूप से पहचानने के लिए, 40 अंकों का अनुक्रम जिसे UDID कहा जाता है, का उपयोग किया जाता है। macOS Catalina या नए संस्करणों पर, इसे **Finder ऐप** में पाया जा सकता है, क्योंकि iTunes अब मौजूद नहीं है। जब डिवाइस को USB के माध्यम से कनेक्ट किया जाता है और Finder में चुना जाता है, तो इसके नाम के तहत विवरण पर क्लिक करने पर UDID अन्य जानकारी के साथ प्रकट होता है। macOS के Catalina से पहले के संस्करणों के लिए, iTunes UDID की खोज में सहायता करता है। विस्तृत निर्देश [यहां](http://www.iclarified.com/52179/how-to-find-your-iphones-udid) मिल सकते हैं। कमांड-लाइन उपकरण UDID प्राप्त करने के वैकल्पिक तरीके प्रदान करते हैं: - **I/O Registry Explorer टूल `ioreg` का उपयोग करते हुए:** ```bash $ ioreg -p IOUSB -l | grep "USB Serial" ``` - **`ideviceinstaller` का उपयोग macOS (और Linux) के लिए:** ```bash $ brew install ideviceinstaller $ idevice_id -l ``` - **`system_profiler` का उपयोग करना:** ```bash $ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:" ``` - **`instruments` का उपयोग करके उपकरणों की सूची बनाना:** ```bash $ instruments -s devices ``` ### **डिवाइस शेल तक पहुँचना** **SSH पहुँच** को **OpenSSH पैकेज** को जेलब्रेक के बाद स्थापित करके सक्षम किया जाता है, जो `ssh root@` के माध्यम से कनेक्शन की अनुमति देता है। डिवाइस को सुरक्षित करने के लिए उपयोगकर्ताओं `root` और `mobile` के लिए डिफ़ॉल्ट पासवर्ड (`alpine`) को बदलना महत्वपूर्ण है। **USB के माध्यम से SSH** Wi-Fi की अनुपस्थिति में आवश्यक हो जाता है, `iproxy` का उपयोग करके SSH कनेक्शनों के लिए डिवाइस पोर्ट को मैप किया जाता है। यह सेटअप USB के माध्यम से SSH पहुँच को सक्षम करता है, इसे चलाकर: ```bash $ iproxy 2222 22 $ ssh -p 2222 root@localhost ``` **ऑन-डिवाइस शेल एप्लिकेशन**, जैसे NewTerm 2, सीधे डिवाइस इंटरैक्शन को सुविधाजनक बनाते हैं, जो समस्या निवारण के लिए विशेष रूप से उपयोगी होते हैं। **रिवर्स SSH शेल** भी होस्ट कंप्यूटर से दूरस्थ पहुंच के लिए स्थापित किए जा सकते हैं। ### **भूल गए पासवर्ड रीसेट करना** भूल गए पासवर्ड को डिफ़ॉल्ट (`alpine`) पर रीसेट करने के लिए, `/private/etc/master.passwd` फ़ाइल को संपादित करना आवश्यक है। इसमें मौजूदा हैश को `root` और `mobile` उपयोगकर्ता प्रविष्टियों के बगल में `alpine` के लिए हैश के साथ बदलना शामिल है। ## **डेटा ट्रांसफर तकनीकें** ### **ऐप डेटा फ़ाइलें स्थानांतरित करना** **SSH और SCP के माध्यम से आर्काइविंग और पुनर्प्राप्ति:** एप्लिकेशन के डेटा निर्देशिका को `tar` का उपयोग करके आर्काइव करना और फिर `scp` का उपयोग करके स्थानांतरित करना सीधा है। नीचे दिया गया कमांड डेटा निर्देशिका को .tgz फ़ाइल में आर्काइव करता है, जिसे फिर डिवाइस से खींचा जाता है: ```bash tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693 exit scp -P 2222 root@localhost:/tmp/data.tgz . ``` ### **ग्राफिकल यूजर इंटरफेस टूल्स** **iFunbox और iExplorer का उपयोग करना:** ये GUI टूल्स iOS उपकरणों पर फ़ाइलों को प्रबंधित करने के लिए उपयोगी हैं। हालाँकि, iOS 8.4 से शुरू होकर, Apple ने इन टूल्स की पहुँच को एप्लिकेशन सैंडबॉक्स तक सीमित कर दिया है जब तक कि उपकरण जेलब्रोकन न हो। ### **फ़ाइल प्रबंधन के लिए Objection का उपयोग करना** **Objection के साथ इंटरएक्टिव शेल:** Objection लॉन्च करने से एक ऐप के Bundle निर्देशिका तक पहुँच मिलती है। यहाँ से, आप ऐप के Documents निर्देशिका में नेविगेट कर सकते हैं और फ़ाइलों का प्रबंधन कर सकते हैं, जिसमें उन्हें iOS उपकरण से डाउनलोड और अपलोड करना शामिल है। ```bash objection --gadget com.apple.mobilesafari explorer cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents file download ``` ## **ऐप्स प्राप्त करना और निकालना** ### **IPA फ़ाइल प्राप्त करना** **ओवर-दी-एयर (OTA) वितरण लिंक:** OTA के माध्यम से परीक्षण के लिए वितरित ऐप्स को ITMS सेवाओं के एसेट डाउनलोडर टूल का उपयोग करके डाउनलोड किया जा सकता है, जिसे npm के माध्यम से स्थापित किया गया है और स्थानीय रूप से IPA फ़ाइल को सहेजने के लिए उपयोग किया जाता है। ```bash npm install -g itms-services itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa ``` ### **ऐप बाइनरी निकालना** 1. **IPA से:** ऐप बाइनरी तक पहुँचने के लिए IPA को अनज़िप करें। 2. **जेलब्रोकन डिवाइस से:** ऐप इंस्टॉल करें और मेमोरी से डिक्रिप्टेड बाइनरी निकालें। ### **डिक्रिप्शन प्रक्रिया** **मैनुअल डिक्रिप्शन अवलोकन:** iOS ऐप बाइनरी को Apple द्वारा FairPlay का उपयोग करके एन्क्रिप्ट किया गया है। रिवर्स-इंजीनियरिंग के लिए, एक को मेमोरी से डिक्रिप्टेड बाइनरी को डंप करना होगा। डिक्रिप्शन प्रक्रिया में PIE फ्लैग की जांच करना, मेमोरी फ्लैग को समायोजित करना, एन्क्रिप्टेड सेक्शन की पहचान करना, और फिर इस सेक्शन को इसके डिक्रिप्टेड रूप के साथ डंप और बदलना शामिल है। **PIE फ्लैग की जांच और संशोधन:** ```bash otool -Vh Original_App python change_macho_flags.py --no-pie Original_App otool -Vh Hello_World ``` **एन्क्रिप्टेड सेक्शन की पहचान करना और मेमोरी डंप करना:** `otool` का उपयोग करके एन्क्रिप्टेड सेक्शन के प्रारंभ और अंत पते निर्धारित करें और जेलब्रोकन डिवाइस से gdb का उपयोग करके मेमोरी डंप करें। ```bash otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO dump memory dump.bin 0x8000 0x10a4000 ``` **एन्क्रिप्टेड सेक्शन को ओवरराइट करना:** मूल ऐप बाइनरी में एन्क्रिप्टेड सेक्शन को डिक्रिप्टेड डंप के साथ बदलें। ```bash dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App ``` **अंतिम डिक्रिप्शन:** बाइनरी के मेटाडेटा को संशोधित करें ताकि एन्क्रिप्शन की अनुपस्थिति को इंगित किया जा सके, जैसे कि **MachOView** का उपयोग करते हुए, `cryptid` को 0 पर सेट करें। ### **डिक्रिप्शन (स्वचालित रूप से)** #### **frida-ios-dump** [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) उपकरण का उपयोग **iOS उपकरणों से ऐप्स को स्वचालित रूप से डिक्रिप्ट और निकालने** के लिए किया जाता है। प्रारंभ में, `dump.py` को iOS उपकरण से कनेक्ट करने के लिए कॉन्फ़िगर करना आवश्यक है, जिसे **iproxy** के माध्यम से लोकलहोस्ट पर पोर्ट 2222 के माध्यम से या सीधे उपकरण के IP पते और पोर्ट के माध्यम से किया जा सकता है। उपकरण पर स्थापित ऐप्स को सूचीबद्ध करने के लिए कमांड का उपयोग किया जा सकता है: ```bash $ python dump.py -l ``` विशिष्ट ऐप, जैसे कि Telegram, को डंप करने के लिए निम्नलिखित कमांड का उपयोग किया जाता है: ```bash $ python3 dump.py -u "root" -p "" ph.telegra.Telegraph ``` यह कमांड ऐप डंप शुरू करता है, जिसके परिणामस्वरूप वर्तमान निर्देशिका में `Telegram.ipa` फ़ाइल का निर्माण होता है। यह प्रक्रिया जेलब्रोकन उपकरणों के लिए उपयुक्त है, क्योंकि बिना हस्ताक्षरित या नकली हस्ताक्षरित ऐप्स को [**ios-deploy**](https://github.com/ios-control/ios-deploy) जैसे उपकरणों का उपयोग करके फिर से स्थापित किया जा सकता है। #### **flexdecrypt** [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt) उपकरण, इसके रैपर [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac) के साथ, स्थापित अनुप्रयोगों से IPA फ़ाइलों को निकालने की अनुमति देता है। उपकरण पर **flexdecrypt** के लिए स्थापना कमांड में `.deb` पैकेज को डाउनलोड और स्थापित करना शामिल है। **flexdump** का उपयोग ऐप्स की सूची बनाने और डंप करने के लिए किया जा सकता है, जैसा कि नीचे दिए गए कमांड में दिखाया गया है: ```bash apt install zip unzip wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump flexdump list flexdump dump Twitter.app ``` #### **bagbak** [**bagbak**](https://github.com/ChiChou/bagbak), एक और Frida-आधारित उपकरण, ऐप डिक्रिप्शन के लिए एक जेलब्रोकन डिवाइस की आवश्यकता होती है: ```bash bagbak --raw Chrome ``` #### **r2flutch** **r2flutch**, radare और frida दोनों का उपयोग करते हुए, ऐप डिक्रिप्शन और डंपिंग के लिए कार्य करता है। अधिक जानकारी इसके [**GitHub पृष्ठ**](https://github.com/as0ler/r2flutch) पर मिल सकती है। ### **ऐप्स इंस्टॉल करना** **Sideloading** का अर्थ है आधिकारिक App Store के बाहर एप्लिकेशन इंस्टॉल करना। यह प्रक्रिया **installd daemon** द्वारा संभाली जाती है और इसके लिए ऐप्स को Apple द्वारा जारी किए गए सर्टिफिकेट के साथ साइन किया जाना आवश्यक है। जेलब्रोकन डिवाइस इस प्रक्रिया को **AppSync** के माध्यम से बायपास कर सकते हैं, जो नकली-साइन किए गए IPA पैकेजों की स्थापना की अनुमति देता है। #### **Sideloading टूल्स** - **Cydia Impactor**: iOS पर IPA फ़ाइलों और Android पर APK फ़ाइलों को साइन और इंस्टॉल करने के लिए एक टूल। गाइड और समस्या निवारण [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/) पर मिल सकते हैं। - **libimobiledevice**: Linux और macOS के लिए एक लाइब्रेरी जो iOS डिवाइस के साथ संवाद करती है। USB के माध्यम से ऐप्स इंस्टॉल करने के लिए ideviceinstaller के लिए इंस्टॉलेशन कमांड और उपयोग के उदाहरण प्रदान किए गए हैं। - **ipainstaller**: यह कमांड-लाइन टूल iOS डिवाइस पर सीधे ऐप इंस्टॉलेशन की अनुमति देता है। - **ios-deploy**: macOS उपयोगकर्ताओं के लिए, ios-deploy कमांड लाइन से iOS ऐप्स इंस्टॉल करता है। IPA को अनज़िप करना और सीधे ऐप लॉन्च के लिए `-m` फ्लैग का उपयोग करना प्रक्रिया का हिस्सा है। - **Xcode**: Xcode का उपयोग करके ऐप्स को इंस्टॉल करने के लिए **Window/Devices and Simulators** पर जाएं और ऐप को **Installed Apps** में जोड़ें। #### **गैर-iPad डिवाइस पर एप्लिकेशन इंस्टॉलेशन की अनुमति दें** iPhone या iPod touch डिवाइस पर iPad-विशिष्ट एप्लिकेशन इंस्टॉल करने के लिए, **Info.plist** फ़ाइल में **UIDeviceFamily** मान को **1** में बदलना होगा। हालांकि, इस संशोधन के लिए IPA फ़ाइल को फिर से साइन करने की आवश्यकता होती है क्योंकि सिग्नेचर वैलिडेशन चेक होते हैं। **नोट**: यह विधि विफल हो सकती है यदि एप्लिकेशन नई iPad मॉडल के लिए विशेष क्षमताओं की मांग करता है जबकि पुरानी iPhone या iPod touch का उपयोग किया जा रहा है। ## संदर्भ - [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/) {{#include ../../banners/hacktricks-training.md}}