diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 6634bcd5b..6f63887ac 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -2,9 +2,9 @@ {{#include ../../banners/hacktricks-training.md}} -## Android Applications की मूल बातें +## Android Applications Basics -यह पृष्ठ पढ़ना अत्यधिक अनुशंसित है ताकि आप **Android सुरक्षा से संबंधित सबसे महत्वपूर्ण हिस्से और किसी Android एप्लिकेशन में सबसे खतरनाक घटक** के बारे में जान सकें: +यह पेज पढ़ना अत्यधिक अनुशंसित है ताकि आप **Android सुरक्षा से संबंधित सबसे महत्वपूर्ण भाग और किसी Android application में मौजूद सबसे खतरनाक कंपोनेंट्स** के बारे में जान सकें: {{#ref}} @@ -13,15 +13,15 @@ android-applications-basics.md ## ADB (Android Debug Bridge) -यह मुख्य उपकरण है जिसकी आपको किसी android डिवाइस (emulated या physical) से कनेक्ट करने के लिए आवश्यकता होती है.\ -**ADB** आपको कंप्यूटर से **USB** या **Network** के माध्यम से डिवाइस को नियंत्रित करने की अनुमति देता है। यह उपयोगिता दोनों दिशाओं में फ़ाइलों की **कॉपी** करने, ऐप्स की **इंस्टॉलेशन** और **अनइंस्टॉलेशन**, shell commands का **निष्पादन**, डेटा का **बैकअप** लेने, लॉग्स को **पढ़ने**, और अन्य कार्यों में सक्षम बनाती है। +यह उस मुख्य उपकरण है जिसकी आपको किसी Android device (emulated or physical) से कनेक्ट करने के लिए आवश्यकता होती है.\ +**ADB** आपको कंप्यूटर से **USB** या **Network** के माध्यम से डिवाइस नियंत्रित करने की अनुमति देता है। यह यूटिलिटी दोनों दिशाओं में फ़ाइलों की **copying**, apps के **installation** और **uninstallation**, shell commands का **execution**, डेटा का **backing up**, लॉग्स का **reading**, और अन्य कार्यों की सुविधा देता है। -adb का उपयोग कैसे करना है यह सीखने के लिए निम्नलिखित सूची [**ADB Commands**](adb-commands.md) देखें। +ADB उपयोग करने का तरीका जानने के लिए निम्नलिखित सूची [**ADB Commands**](adb-commands.md) देखें। ## Smali -कभी-कभी यह दिलचस्प होता है कि एप्लिकेशन कोड को **संशोधित** किया जाए ताकि **छिपी हुई जानकारी** (शायद अच्छी तरह obfuscated passwords या flags) तक पहुँच सकें। फिर, apk को decompile करना, कोड संशोधित करना और उसे recompile करना दिलचस्प हो सकता है.\ -[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). यह **dynamic analysis के दौरान कई परीक्षणों के लिए एक विकल्प** के रूप में बहुत उपयोगी हो सकता है। इसलिए, इस संभावना को हमेशा ध्यान में रखें। +कभी-कभी यह उपयोगी होता है कि आप **application code को modify करें** ताकि **hidden information** (शायद अच्छी तरह obfuscated passwords या flags) तक पहुँच सकें। फिर, APK को decompile करना, कोड modify करना और उसे फिर से recompile करना रोचक हो सकता है.\ +[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). यह dynamic analysis के दौरान किए जाने वाले कई परीक्षणों के लिए एक **alternative for several tests during the dynamic analysis** के रूप में बहुत उपयोगी हो सकता है। इसलिए, इस संभावना को **हमेशा ध्यान में रखें**। ## Other interesting tricks @@ -30,7 +30,7 @@ adb का उपयोग कैसे करना है यह सीखन - [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md) - [Abusing Accessibility Services (Android RAT)](accessibility-services-abuse.md) - **Download APKs**: [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) -- डिवाइस से APK निकालना: +- डिवाइस से APK निकालें: ```bash adb shell pm list packages com.android.insecurebankv2 @@ -63,37 +63,37 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ## Static Analysis -सबसे पहले, किसी APK का विश्लेषण करने के लिए आपको decompiler का उपयोग करके **Java code** देखना चाहिए।\ -कृपया, [**read here to find information about different available decompilers**](apk-decompilers.md). +सबसे पहले, एक APK का विश्लेषण करते समय आपको decompiler का उपयोग करके **Java code** को देखना चाहिए।\ +Please, [**read here to find information about different available decompilers**](apk-decompilers.md). -### रोचक जानकारी की तलाश +### दिलचस्प जानकारी की तलाश -APK की **strings** को देखकर आप **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** और कोई भी रोचक चीज़ ढूँढ सकते हैं... यहाँ तक कि code execution **backdoors** या authentication **backdoors** (ऐप के लिए hardcoded admin credentials) भी देखें। +APK की **strings** को देखकर आप **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** और किसी भी रोचक चीज़ की खोज कर सकते हैं... कोड निष्पादन के लिए कोई **backdoors** या authentication backdoors (app में hardcoded admin credentials) भी खोजें। **Firebase** -विशेष ध्यान दें **firebase URLs** पर और जाँचें कि क्या यह गलत तरीके से कॉन्फ़िगर है। [More information about whats is FIrebase and how to exploit it here.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) +विशेष ध्यान दें **firebase URLs** पर और जाँचें कि क्या यह गलत तरीके से configured है। [More information about whats is FIrebase and how to exploit it here.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) ### Basic understanding of the application - Manifest.xml, strings.xml -**The examination of an application's _Manifest.xml_ and **_strings.xml_** files can reveal potential security vulnerabilities**. इन फाइलों तक decompilers के माध्यम से या APK की file extension को .zip में बदलकर और उसे unzip करके पहुँच किया जा सकता है। +किसी एप्लिकेशन की _Manifest.xml_ और _strings.xml_ फ़ाइलों की **जाँच संभावित सुरक्षा कमजोरियाँ उजागर कर सकती है**। इन फ़ाइलों तक decompilers का उपयोग कर के या APK का file extension .zip में बदलकर और फिर unzip करके पहुँचा जा सकता है। **Manifest.xml** से पहचानी जाने वाली कमजोरियाँ शामिल हैं: -- **Debuggable Applications**: Manifest.xml में `debuggable="true"` सेट की गई applications जोखिमपूर्ण होती हैं क्योंकि ये कनेक्शन की अनुमति देती हैं जो exploitation तक ले जा सकती हैं। debuggable applications को ढूँढने और उनका फायदा उठाने के बारे में समझने के लिए संबंधित ट्यूटोरियल देखें। -- **Backup Settings**: संवेदनशील जानकारी रखने वाले applications के लिए `android:allowBackup="false"` attribute को स्पष्ट रूप से सेट करना चाहिए ताकि adb के माध्यम से अनधिकृत data backups से बचा जा सके, खासकर जब usb debugging सक्षम हो। -- **Network Security**: कस्टम network security configurations (`android:networkSecurityConfig="@xml/network_security_config"`) जो _res/xml/_ में होते हैं, certificate pins और HTTP traffic सेटिंग्स जैसी सुरक्षा जानकारी निर्दिष्ट कर सकते हैं। एक उदाहरण किसी विशिष्ट डोमेन के लिए HTTP ट्रैफ़िक की अनुमति देना हो सकता है। -- **Exported Activities and Services**: manifest में exported activities और services की पहचान करना उन components को उजागर कर सकता है जिन्हें दुरुपयोग किया जा सकता है। डायनामिक परीक्षण के दौरान आगे विश्लेषण यह स्पष्ट कर सकता है कि इन components का फायदा कैसे उठाया जा सकता है। -- **Content Providers and FileProviders**: एक्सपोज़्ड content providers अनधिकृत पहुँच या डेटा में संशोधन की अनुमति दे सकते हैं। FileProviders की कॉन्फ़िगरेशन की भी बारीकी से जाँच करें। -- **Broadcast Receivers and URL Schemes**: ये components exploitation के लिए उपयोग किए जा सकते हैं, विशेषकर यह ध्यान दें कि URL schemes इनपुट के लिए कैसे प्रबंधित किए जाते हैं। -- **SDK Versions**: `minSdkVersion`, `targetSDKVersion`, और `maxSdkVersion` attributes समर्थित Android वर्ज़न इंगित करते हैं, जो यह दर्शाते हैं कि पुराने, कमजोर Android वर्ज़न का समर्थन न करना सुरक्षा के लिए महत्वपूर्ण है। +- **Debuggable Applications**: ऐसे Applications जो _Manifest.xml_ में `debuggable="true"` के रूप में सेट हैं जोखिम पैदा करते हैं क्योंकि ये कनेक्शन्स की अनुमति देते हैं जो exploitation की ओर ले जा सकते हैं। debuggable applications को ढूँढने और exploit करने के बारे में समझने के लिए एक tutorial देखें। +- **Backup Settings**: संवेदनशील जानकारी संभालने वाले applications के लिए `android:allowBackup="false"` attribute को स्पष्ट रूप से सेट किया जाना चाहिए ताकि adb के माध्यम से अनधिकृत डेटा backups को रोका जा सके, खासकर जब usb debugging सक्षम हो। +- **Network Security**: कस्टम network security configurations (`android:networkSecurityConfig="@xml/network_security_config"`) जो _res/xml/_ में होते हैं certificate pins और HTTP traffic सेटिंग्स जैसी सुरक्षा जानकारी निर्दिष्ट कर सकते हैं। एक उदाहरण विशिष्ट डोमेनों के लिए HTTP traffic की अनुमति देना है। +- **Exported Activities and Services**: Manifest में exported activities और services की पहचान ऐसे कम्पोनेंट्स को उजागर कर सकती है जिन्हें गलत तरीके से misuse किया जा सकता है। dynamic testing के दौरान आगे की जांच यह बतायेगी कि इन कम्पोनेंट्स को कैसे exploit किया जा सकता है। +- **Content Providers and FileProviders**: एक्सपोज़्ड content providers अनधिकृत पहुँच या डेटा में संशोधन की अनुमति दे सकते हैं। FileProviders की configuration भी ध्यान से जाँची जानी चाहिए। +- **Broadcast Receivers and URL Schemes**: ये कम्पोनेंट्स exploitation के लिए उपयोग किए जा सकते हैं, विशेष ध्यान URL schemes के प्रबंधन पर रखें ताकि input vulnerabilities न हों। +- **SDK Versions**: `minSdkVersion`, `targetSDKVersion`, और `maxSdkVersion` attributes यह बताती हैं कि कौन से Android versions समर्थित हैं, और यह दर्शाता है कि सुरक्षा कारणों से पुराने, vulnerable Android versions का समर्थन न करना क्यों महत्वपूर्ण है। -**strings.xml** फ़ाइल से संवेदनशील जानकारी जैसे कि API keys, custom schemas, और अन्य developer नोट्स मिल सकते हैं, जिससे इन resources की सावधानीपूर्वक समीक्षा की आवश्यकता स्पष्ट होती है। +**strings.xml** फ़ाइल से संवेदनशील जानकारी जैसे API keys, custom schemas, और अन्य developer notes मिल सकती हैं, जो इन resources की सावधानीपूर्वक समीक्षा की आवश्यकता को रेखांकित करता है। ### Tapjacking -**Tapjacking** एक ऐसा हमला है जहाँ एक **malicious** **application** लॉन्च की जाती है और वह **victim application** के ऊपर स्वयं को पोजिशन कर लेती है। एक बार जब यह पीड़ित ऐप को आंशिक रूप से ढँक देती है, तो इसका UI इस तरह डिज़ाइन किया जाता है कि उपयोगकर्ता को भ्रमित करके वह उस पर इंटरैक्ट करे, जबकि यह इंटरैक्शन पीड़ित ऐप को पास-थ्रू कर देता है।\ -असल में, यह **उपयोगकर्ता को अँधा कर देता है ताकि वे न जानें कि वे वास्तव में पीड़ित ऐप पर ही क्रियाएँ कर रहे हैं**। +Tapjacking एक ऐसा हमला है जहाँ एक malicious application लॉन्च की जाती है और victim application के ऊपर खुद को position कर लेती है। जब यह victim app को दृश्य रूप से अस्पष्ट कर देती है, तो इसका user interface इस तरह डिज़ाइन किया जाता है कि यूज़र को इसके साथ interact करने में धोखा दिया जाए, जबकि यह interaction victim app को pass कर देती है।\ +प्रभावतः यह यूज़र को अंधा कर देता है कि वे वास्तव में victim app पर कार्य कर रहे हैं। अधिक जानकारी के लिए देखें: @@ -104,82 +104,82 @@ tapjacking.md ### Task Hijacking -यदि किसी **activity** का **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है तो वह task Hijacking के लिए कमजोर होता है। इसका मतलब है कि एक **malicious application** इंस्टॉल की जा सकती है और यदि वास्तविक application से पहले लॉन्च हो तो यह **वास्तविक application के task को hijack कर सकता है** (तो उपयोगकर्ता सोचेंगे कि वे वास्तविक ऐप का उपयोग कर रहे हैं जबकि वे **malicious application** के साथ इंटरैक्ट कर रहे हैं)। +एक activity जिसका `launchMode` `singleTask` पर सेट है और किसी भी `taskAffinity` को परिभाषित नहीं किया गया है वह task Hijacking के लिए vulnerable होती है। इसका मतलब है कि एक malicious application इंस्टॉल की जा सकती है और यदि उसे असली application से पहले लॉन्च किया गया तो यह असली application के task को hijack कर सकती है (तो यूज़र यह सोचकर malicious application के साथ interact करेगा कि वह असली एप का उपयोग कर रहा है)। -और जानकारी: +अधिक जानकारी के लिए देखें: {{#ref}} android-task-hijacking.md {{#endref}} -### Insecure data storage +### असुरक्षित डेटा स्टोरेज **Internal Storage** -Android में, internal storage में **store** की गई फाइलें सामान्यतः केवल उस **app** द्वारा एक्सेस की जा सकती हैं जिसने उन्हें बनाया था। यह सुरक्षा उपाय Android operating system द्वारा लागू किया जाता है और अधिकांश applications की सुरक्षा आवश्यकताओं के लिए पर्याप्त होता है। हालाँकि, developers कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे modes का उपयोग करके फाइलों को विभिन्न applications के बीच **share** करने की अनुमति देते हैं। ये modes फाइलों को अन्य applications, जिनमें संभावित रूप से malicious ones भी शामिल हैं, द्वारा access करने से रोकते नहीं हैं। +Android में, आंतरिक storage में संग्रहीत फ़ाइलें सामान्यतः उन्हीं apps द्वारा पहुँच योग्य होने के लिए डिज़ाइन की गई हैं जिन्होंने उन्हें बनाया है। यह सुरक्षा उपाय Android operating system द्वारा लागू किया जाता है और अधिकांश एप्लिकेशन की सुरक्षा आवश्यकताओं के लिए पर्याप्त होता है। फिर भी, डेवलपर कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे मोड का उपयोग करते हैं ताकि फ़ाइलें विभिन्न applications के बीच साझा की जा सकें। ये मोड अन्य applications, जिनमें संभावित रूप से malicious ones भी शामिल हैं, के लिए इन फ़ाइलों तक unrestricted access की अनुमति दे सकते हैं। 1. **Static Analysis:** -- `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` के उपयोग की सावधानीपूर्वक जाँच सुनिश्चित करें। ये modes फाइलों को अनऑपचारिक या अनधिकृत पहुँच के लिए उजागर कर सकते हैं। +- **सुनिश्चित करें** कि `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` के उपयोग की **सावधानीपूर्वक जांच** की गयी हो। ये मोड फ़ाइलों को **अनचाही या अनधिकृत पहुँच** के लिए उजागर कर सकते हैं। 2. **Dynamic Analysis:** -- ऐप द्वारा बनाए गए फाइलों पर सेट की गई **permissions** की जाँच करें। विशेष रूप से, देखें कि क्या कोई फाइलें ऐसी हैं जो worldwide पढ़ी या लिखी जा सकती हैं। यह एक महत्वपूर्ण सुरक्षा जोखिम हो सकता है, क्योंकि इससे किसी भी इंस्टॉल की गई application को, उसके स्रोत या उद्देश्य की परवाह किए बिना, इन फाइलों को पढ़ने या संशोधित करने की अनुमति मिल सकती है। +- ऐप द्वारा बनाई गई फ़ाइलों पर सेट किए गए **permissions** की **जाँच** करें। विशेष रूप से, देखें कि क्या कोई फ़ाइलें worldwide readable या writable के रूप में सेट की गई हैं। यह एक गंभीर सुरक्षा जोखिम हो सकता है, क्योंकि इससे किसी भी installed application को, उसके स्रोत या इरादे की परवाह किए बिना, इन फ़ाइलों को **read या modify** करने की अनुमति मिल जाएगी। **External Storage** -SD Cards जैसे external storage पर फाइलों से निपटते समय कुछ सावधानियाँ अपनानी चाहिए: +SD Cards जैसे external storage पर फ़ाइलों के साथ काम करते समय कुछ सावधानियाँ बरतनी चाहिए: 1. **Accessibility**: -- external storage पर फाइलें सामान्यतः **globally readable and writable** होती हैं। इसका मतलब है कि कोई भी application या उपयोगकर्ता इन फाइलों तक पहुंच सकता है। +- External storage पर फ़ाइलें **global रूप से readable और writable** होती हैं। इसका अर्थ है किसी भी application या यूज़र द्वारा इन फ़ाइलों तक पहुँच संभव है। 2. **Security Concerns**: -- आसान पहुँच को देखते हुए, संवेदनशील जानकारी को external storage पर स्टोर न करने की सलाह दी जाती है। -- External storage हटाया जा सकता है या किसी भी application द्वारा एक्सेस किया जा सकता है, जिससे यह कम सुरक्षित होता है। +- इस आसान पहुँच के कारण, संवेदनशील जानकारी को external storage पर स्टोर नहीं करना चाहिए। +- External storage को हटाया जा सकता है या किसी भी application द्वारा एक्सेस किया जा सकता है, जिससे यह कम सुरक्षित हो जाता है। 3. **Handling Data from External Storage**: - External storage से प्राप्त डेटा पर हमेशा **input validation** करें। यह महत्वपूर्ण है क्योंकि यह डेटा एक untrusted स्रोत से आता है। -- External storage पर executables या class files को dynamic loading के लिए स्टोर करना सख्त रूप से discouraged है। -- यदि आपका application external storage से executable files प्राप्त करता है, तो सुनिश्चित करें कि ये फाइलें dynamically load करने से पहले **signed और cryptographically verified** हों। यह कदम आपके application की सुरक्षा अखंडता बनाए रखने के लिए आवश्यक है। +- External storage पर executables या class files को dynamic loading के लिए स्टोर करना सख्त तौर पर discouraged है। +- यदि आपका application external storage से executable files प्राप्त करता है, तो सुनिश्चित करें कि ये फाइलें **signed और cryptographically verified** हों इससे पहले कि उन्हें dynamically load किया जाए। यह कदम आपके application की सुरक्षा एकता बनाए रखने के लिए आवश्यक है। -External storage को `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard` में एक्सेस किया जा सकता है +External storage का access `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard` में किया जा सकता है > [!TIP] -> Android 4.4 (**API 17**) से शुरू होकर, SD card की directory संरचना ऐसी है जो किसी app की पहुँच को उस directory तक सीमित कर देती है जो विशेष रूप से उस app के लिए है। यह किसी malicious application को दूसरे app की फाइलों पर read या write access प्राप्त करने से रोकता है। +> Android 4.4 (**API 17**) से शुरू होकर, SD card में एक directory संरचना है जो किसी app के लिए विशेष रूप से उस app के directory तक ही पहुँच को सीमित करती है। यह एक malicious application को किसी अन्य app की फ़ाइलों तक read या write access प्राप्त करने से रोकता है। **Sensitive data stored in clear-text** -- **Shared preferences**: Android प्रत्येक application को आसानी से xml फाइलें `/data/data//shared_prefs/` पाथ में सेव करने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में clear-text में संवेदनशील जानकारी मिल सकती है। -- **Databases**: Android प्रत्येक application को आसानी से sqlite databases `/data/data//databases/` पाथ में सेव करने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में clear-text में संवेदनशील जानकारी मिल सकती है। +- **Shared preferences**: Android प्रत्येक application को `/data/data//shared_prefs/` पथ में आसानी से xml फ़ाइलें सहेजने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में clear-text में संवेदनशील जानकारी मिल सकती है। +- **Databases**: Android प्रत्येक application को `/data/data//databases/` पथ में आसानी से sqlite databases सहेजने की अनुमति देता है और कभी-कभी उस फ़ोल्डर में clear-text में संवेदनशील जानकारी मिल सकती है। ### Broken TLS -**Accept All Certificates** +Accept All Certificates -कभी-कभी developers किसी कारणवश सभी certificates को accept कर लेते हैं भले ही, उदाहरण के लिए, hostname मेल न खाए — ऐसे lines of code के साथ जैसे निम्नलिखित: +कई बार डेवलपर्स किसी कारणवश सभी certificates को स्वीकार कर लेते हैं भले ही उदाहरण के लिए hostname मैच न करता हो, इसके लिए कोड की लाइनों जैसे निम्न का उपयोग किया जाता है: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ``` A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it. -### टूटी क्रिप्टोग्राफी (Broken Cryptography) +### Broken Cryptography **Poor Key Management Processes** -कुछ developers संवेदनशील डेटा को local storage में सेव करते हैं और उसे code में hardcoded/predictable key से encrypt करते हैं। ऐसा नहीं होना चाहिए क्योंकि कुछ reversing से attackers confidential information extract कर सकते हैं। +कुछ डेवलपर संवेदनशील डेटा को local storage में सेव करते हैं और इसे कोड में hardcoded/predictable key से encrypt करते हैं। ऐसा नहीं करना चाहिए क्योंकि कुछ reversing तकनीकें attackers को confidential जानकारी निकालने में सक्षम बना सकती हैं। **Use of Insecure and/or Deprecated Algorithms** -Developers को **deprecated algorithms** का उपयोग authorisation **checks**, डेटा **store** या **send** करने के लिए नहीं करना चाहिए। उन algorithms में कुछ हैं: RC4, MD4, MD5, SHA1... अगर **hashes** का उपयोग पासवर्ड स्टोर करने के लिए किया जा रहा है तो salt के साथ brute-force **resistant** hashes का उपयोग होना चाहिए। +डेवलपर्स को authorization checks, data को store या send करने के लिए **deprecated algorithms** का उपयोग नहीं करना चाहिए। इनमे कुछ algorithms हैं: RC4, MD4, MD5, SHA1... यदि पासवर्ड स्टोर करने के लिए **hashes** का उपयोग किया जा रहा है, तो salt के साथ brute-force **resistant** hashes का उपयोग होना चाहिए। -### अन्य जाँचें (Other checks) +### Other checks -- यह सुझाव दिया जाता है कि attackers के लिए reverse engineer का काम कठिन करने हेतु **obfuscate the APK** किया जाए। -- अगर app संवेदनशील है (जैसे bank apps), तो उसे अपने **own checks to see if the mobile is rooted** करने चाहिए और उसके अनुसार कार्रवाई करनी चाहिए। -- अगर app संवेदनशील है (जैसे bank apps), तो उसे जांचना चाहिए कि क्या **emulator** का उपयोग किया जा रहा है। -- अगर app संवेदनशील है (जैसे bank apps), तो उसे **check it's own integrity before executing** करना चाहिए ताकि पता चल सके कि उसे modify किया गया था या नहीं। -- APK को build करने के लिए किस compiler/packer/obfuscator का उपयोग हुआ यह जांचने के लिए [**APKiD**](https://github.com/rednaga/APKiD) का उपयोग करें +- यह सलाह दी जाती है कि **APK को obfuscate** किया जाए ताकि reverse engineer करने में attackers की मेहनत मुश्किल हो। +- यदि ऐप sensitive है (जैसे bank apps), तो उसे अपने **खुद के checks to see if the mobile is rooted** करने चाहिए और उसके अनुसार व्यवहार करना चाहिए। +- यदि ऐप sensitive है (जैसे bank apps), तो उसे जाँचना चाहिए कि क्या कोई **emulator** उपयोग में है। +- यदि ऐप sensitive है (जैसे bank apps), तो उसे **execute करने से पहले अपनी integrity check** करनी चाहिए ताकि पता चले कि क्या इसे modify किया गया है। +- Use [**APKiD**](https://github.com/rednaga/APKiD) यह चेक करने के लिए कि किस compiler/packer/obfuscator का उपयोग करके APK बनाया गया है ### React Native Application -React applications के javascript code तक आसानी से पहुँचने के बारे में जानने के लिए निम्न पृष्ठ पढ़ें: +Read the following page to learn how to easily access javascript code of React applications: {{#ref}} @@ -188,7 +188,7 @@ react-native-application.md ### Xamarin Applications -एक xamarin applications के C# code तक आसानी से पहुँचने के लिए निम्न पृष्ठ पढ़ें: +Read the following page to learn how to easily access C# code of a xamarin applications: {{#ref}} @@ -197,17 +197,17 @@ react-native-application.md ### Superpacked Applications -इस [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) के अनुसार superpacked एक Meta algorithm है जो एक application की सामग्री को एक single file में compress कर देता है। ब्लॉग इस बात पर बात करता है कि ऐसे apps को decompress करने वाला एक app बनाना संभव है... और एक तेज़ तरीका जो involve करता है **execute the application and gather the decompressed files from the filesystem.** +According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to **execute the application and gather the decompressed files from the filesystem.** ### Automated Static Code Analysis -टूल [**mariana-trench**](https://github.com/facebook/mariana-trench) application के **code** को **scanning** करके **vulnerabilities** ढूंढने में सक्षम है। इस टूल में कुछ **known sources** (जो tool को बताती हैं कि वे **places** कहाँ हैं जहाँ **input** **user** द्वारा नियंत्रित है), **sinks** (जो tool को बताती हैं वे **dangerous** **places** जहाँ malicious user input नुकसान कर सकता है) और **rules** शामिल हैं। ये rules उन **sources-sinks** के **combination** को बताते हैं जो vulnerability को इंगित करते हैं। +The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. This tool contains a series of **known sources** (that indicates to the tool the **places** where the **input** is **controlled by the user**), **sinks** (which indicates to the tool **dangerous** **places** where malicious user input could cause damages) and **rules**. These rules indicates the **combination** of **sources-sinks** that indicates a vulnerability. -इन जानकारियों के साथ, **mariana-trench will review the code and find possible vulnerabilities on it**। +With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**. ### Secrets leaked -एक application के अंदर secrets (API keys, passwords, hidden urls, subdomains...) हो सकते हैं जिन्हें आप खोज सकते हैं। आप ऐसे टूल का उपयोग कर सकते हैं जैसे [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) +एक application में secrets (API keys, passwords, hidden urls, subdomains...) हो सकते हैं जिन्हें आप खोज सकते हैं। आप ऐसे टूल का उपयोग कर सकते हैं जैसे [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) ### Bypass Biometric Authentication @@ -216,14 +216,14 @@ react-native-application.md bypass-biometric-authentication-android.md {{#endref}} -### अन्य दिलचस्प फ़ंक्शंस (Other interesting functions) +### Other interesting functions - **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()` - **Send SMSs**: `sendTextMessage, sendMultipartTestMessage` - **Native functions** declared as `native`: `public native, System.loadLibrary, System.load` - [Read this to learn **how to reverse native functions**](reversing-native-libraries.md) -### **अन्य ट्रिक्स (Other tricks)** +### **Other tricks** {{#ref}} @@ -236,45 +236,45 @@ content-protocol.md ## Dynamic Analysis -> सबसे पहले, आपको एक ऐसा environment चाहिए जहाँ आप application और बाकी environment (Burp CA cert, Drozer और Frida मुख्य रूप से) install कर सकें। इसलिए, एक rooted device (emulated या नहीं) अत्यधिक अनुशंसित है। +> First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended. ### Online Dynamic analysis -आप [https://appetize.io/](https://appetize.io/) पर एक **free account** बना सकते हैं। यह platform आपको APKs **upload** और **execute** करने की अनुमति देता है, इसलिए यह यह देखने के लिए उपयोगी है कि apk कैसा व्यवहार कर रहा है। +You can create a **free account** in: [https://appetize.io/](https://appetize.io). This platform allows you to **upload** and **execute** APKs, so it is useful to see how an apk is behaving. -आप web पर अपने application के logs भी **देख** सकते हैं और **adb** के माध्यम से connect कर सकते हैं। +You can even **see the logs of your application** in the web and connect through **adb**. ![](<../../images/image (831).png>) -ADB connection की बदौलत आप emulators के अंदर **Drozer** और **Frida** का उपयोग कर सकते हैं। +Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators. ### Local Dynamic Analysis #### Using an emulator -- [**Android Studio**](https://developer.android.com/studio) (आप **x86** और **arm** devices बना सकते हैं, और [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** बिना slow arm emulator की आवश्यकता के). -- इसे सेट करने के लिए इस पेज को पढ़ें: +- [**Android Studio**](https://developer.android.com/studio) (You can create **x86** and **arm** devices, and according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator). +- Learn to set it up in this page: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, आपको account बनाना होगा. _It's recommend to **download** the version **WITH**_ _**VirtualBox** ताकि संभावित errors से बचा जा सके._) -- [**Nox**](https://es.bignox.com) (Free, पर यह Frida या Drozer को सपोर्ट नहीं करता). +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._) +- [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer). > [!TIP] -> किसी भी platform पर नया emulator बनाते समय ध्यान रखें कि स्क्रीन जितनी बड़ी होगी, emulator उतना ही धीमा चलेगा। इसलिए संभव हो तो छोटे स्क्रीन चुनें। +> When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible. -Genymotion में google services (जैसे AppStore) install करने के लिए आपको निम्न image में लाल चिह्नित बटन पर क्लिक करना होगा: +To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image: ![](<../../images/image (277).png>) -साथ ही, ध्यान दें कि **Genymotion में Android VM की configuration** में आप **Bridge Network mode** चुन सकते हैं (यह उपयोगी होगा यदि आप tools वाले किसी अलग VM से Android VM से connect कर रहे हों)। +Also, notice that in the **configuration of the Android VM in Genymotion** you can select **Bridge Network mode** (this will be useful if you will be connecting to the Android VM from a different VM with the tools). #### Use a physical device -आपको **debugging** options activate करनी होंगी और अच्छा होगा अगर आप इसे **root** कर सकें: +आपको **debugging** options को activate करना होगा और अच्छा होगा अगर आप इसे **root** कर सकें: 1. **Settings**. 2. (FromAndroid 8.0) Select **System**. @@ -282,164 +282,172 @@ Genymotion में google services (जैसे AppStore) install करन 4. Press **Build number** 7 times. 5. Go back and you will find the **Developer options**. -> एक बार जब आपने application install कर ली, तो पहली चीज़ जो आपको करनी चाहिए वह है इसे चलाकर देखना, यह जाँचना कि यह क्या करता है, कैसे काम करता है और इसके साथ comfortable होना।\ -> मैं सुझाव दूंगा कि इस शुरुआती dynamic analysis को MobSF dynamic analysis + pidcat का उपयोग करके करें, ताकि हम यह सीख सकें कि application कैसे काम करता है जबकि MobSF बहुत सारी **interesting** **data** capture कर रहा है जिन्हें आप बाद में review कर सकते हैं। +> Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.\ +> I will suggest to **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, so we will be able to **learn how the application works** while MobSF **captures** a lot of **interesting** **data** you can review later on. + +Magisk/Zygisk quick notes (recommended on Pixel devices) +- Patch boot.img with the Magisk app and flash via fastboot to get systemless root +- Enable Zygisk + DenyList for root hiding; consider LSPosed/Shamiko when stronger hiding is required +- Keep original boot.img to recover from OTA updates; re-patch after each OTA +- For screen mirroring, use scrcpy on the host + + ### Unintended Data Leakage **Logging** -Developers को सार्वजनिक रूप से **debugging information** उजागर करने में सावधान रहना चाहिए, क्योंकि इससे sensitive data leaks हो सकते हैं। application logs मॉनिटर करने के लिए टूल्स [**pidcat**](https://github.com/JakeWharton/pidcat) और `adb logcat` की सिफारिश की जाती है ताकि sensitive information की पहचान और सुरक्षा की जा सके। **Pidcat** अपनी उपयोग में आसानता और readability के कारण पसंदीदा है। +डेवलपर्स को सार्वजनिक रूप से **debugging information** उजागर करने में सावधान रहना चाहिए, क्योंकि इससे sensitive data का leak हो सकता है। application logs की निगरानी करने के लिए tools [**pidcat**](https://github.com/JakeWharton/pidcat) और `adb logcat` की सलाह दी जाती है ताकि संवेदनशील जानकारी की पहचान की जा सके और उसे सुरक्षित किया जा सके। **Pidcat** अपनी आसान उपयोगिता और readability के कारण पसंद किया जाता है। > [!WARNING] -> ध्यान दें कि **Android 4.0 से बाद के संस्करणों** में, **applications केवल अपने ही logs को एक्सेस कर पाती हैं**। इसलिए applications अन्य apps के logs को access नहीं कर सकतीं।\ -> फिर भी, फिर भी यह अनुशंसित है कि **sensitive information को log न करें**। +> 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** framework apps में copy-paste functionality सक्षम करता है, फिर भी यह जोखिम पैदा करता है क्योंकि **other applications** clipboard को **access** कर सकती हैं, जिससे sensitive data उजागर होने की संभावना रहती है। इसलिए credit card details जैसी संवेदनशील sections के लिए copy/paste functions को disable करना महत्वपूर्ण है ताकि data leaks से बचा जा सके। +Android का **clipboard-based** framework apps में copy-paste functionality सक्षम करता है, पर यह जोखिम भी पैदा करता है क्योंकि **other applications** clipboard को access कर सकती हैं, जिससे संवेदनशील डेटा उजागर हो सकता है। इसलिए application के sensitive हिस्सों (जैसे credit card details) के लिए copy/paste functions को disable करना महत्वपूर्ण है ताकि data leak रोका जा सके। **Crash Logs** -यदि कोई application **crash** होता है और logs **save** करता है, तो ये logs attackers की मदद कर सकते हैं, विशेषकर तब जब application reverse-engineer नहीं की जा सकती। इस जोखिम को कम करने के लिए, crashes पर log न करें, और यदि logs को नेटवर्क पर भेजना आवश्यक है तो सुनिश्चित करें कि वे SSL channel के माध्यम से भेजे जा रहे हों। +यदि कोई application **crashes** करता है और logs save करता है, तो ये logs attackers की मदद कर सकते हैं, खासकर जब application को reverse-engineer नहीं किया जा सकता। इस जोखिम को कम करने के लिए, crash पर logging से बचें, और यदि logs को network पर भेजना जरूरी है तो उन्हें SSL चैनल के जरिए भेजें। As pentester, **try to take a look to these logs**. **Analytics Data Sent To 3rd Parties** -Applications अक्सर Google Adsense जैसी services integrate करते हैं, जो developers के improper implementation के कारण अनजाने में **leak sensitive data** कर सकती हैं। संभावित data leaks पहचानने के लिए, application के traffic को intercept करना और यह जांचना सलाहप्रद है कि कोई sensitive information third-party services को तो नहीं भेजी जा रही है। +Applications अक्सर Google Adsense जैसे services integrate करते हैं, जो developers की improper implementation के कारण संवेदनशील डेटा को inadvertently **leak** कर सकते हैं। संभावित data leaks की पहचान के लिए, यह सलाह दी जाती है कि आप application's traffic को intercept करें और किसी भी sensitive information की third-party services को भेजी जा रही हो तो जांचें। ### SQLite DBs -ज्यादातर applications internal SQLite databases का उपयोग जानकारी save करने के लिए करती हैं। pentest के दौरान बनाए गए **databases**, **tables** और **columns** के नामों और saved **data** को जरूर देखें क्योंकि आपको वहाँ **sensitive information** मिल सकती है (जो एक vulnerability होगी).\ -Databases आमतौर पर `/data/data/the.package.name/databases` में स्थित होते हैं जैसे `/data/data/com.mwr.example.sieve/databases` +अधिकतर applications internal SQLite databases का उपयोग करके information save करते हैं। Pentest के दौरान बनाए गए **databases**, **tables** और **columns** के नामों और उनमें saved सभी **data** को देखना चाहिए क्योंकि आप वहां से **sensitive information** (जो vulnerability होगी) पा सकते हैं।\ +Databases को `/data/data/the.package.name/databases` में locate किया जाना चाहिए जैसे `/data/data/com.mwr.example.sieve/databases` -यदि database confidential information save कर रहा है और वह **encrypted** है पर आप application के अंदर **password** **find** कर सकते हैं तो यह फिर भी एक **vulnerability** है। +यदि database confidential information save कर रहा है और **encrypted** है पर आप application के अंदर **password** ढूँढ सकते हैं तो यह फिर भी एक **vulnerability** है। -.tables का उपयोग करके tables enumerate करें और `.schema ` करके tables के columns enumerate करें। +.tables का उपयोग करके tables को enumerate करें और `.schema ` चलाकर tables के columns enumerate करें ### Drozer (Exploit Activities, Content Providers and Services) -From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** आपको एक Android app की भूमिका assume करने और other apps के साथ interact करने की अनुमति देता है। यह **anything that an installed application can do** कर सकता है, जैसे Android’s Inter-Process Communication (IPC) mechanism का उपयोग करना और underlying operating system के साथ interact करना। .\ -Drozer एक उपयोगी टूल है ताकि आप **exploit exported activities, exported services and Content Providers** कर सकें जैसा कि आप निम्न sections में सीखेंगे। +From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\ +Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections. ### Exploiting exported Activities [**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\ -यह भी याद रखें कि किसी activity का code **`onCreate`** method में शुरू होता है। +Also remember that the code of an activity starts in the **`onCreate`** method. **Authorisation bypass** -जब कोई Activity exported होती है आप उसे किसी external app से invoke कर सकते हैं। इसलिए, यदि कोई activity जिसमें **sensitive information** है वह **exported** है तो आप authentication mechanisms को **bypass** करके उससे access प्राप्त कर सकते हैं। +When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.** [**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities) -आप adb से भी एक exported activity start कर सकते हैं: +You can also start an exported activity from adb: - PackageName is com.example.demo - Exported ActivityName is com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**नोट**: MobSF किसी activity में `android:launchMode` के रूप में _**singleTask/singleInstance**_ के उपयोग को हानिकारक के रूप में पहचानता है, लेकिन [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, ऐसा प्रतीत होता है कि यह केवल पुराने वर्ज़न (API versions < 21) पर ही खतरनाक है। +**NOTE**: MobSF will detect as malicious the use of _**singleTask/singleInstance**_ as `android:launchMode` in an activity, but due to [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparently this is only dangerous on old versions (API versions < 21). > [!TIP] -> ध्यान दें कि an authorisation bypass हमेशा vulnerability नहीं होता — यह इस पर निर्भर करेगा कि bypass कैसे काम करता है और कौन-सी जानकारी उजागर होती है। +> ध्यान दें कि एक authorisation bypass हमेशा एक vulnerability नहीं होता; यह इस पर निर्भर करेगा कि bypass कैसे काम करता है और कौन-सी जानकारी exposed होती है। -**Sensitive information leakage** +**संवेदनशील जानकारी leakage** -**Activities can also return results**. यदि आप किसी exported और unprotected activity को खोज लेते हैं जो **`setResult`** method को कॉल कर रही हो और संवेदनशील जानकारी return कर रही हो, तो यह sensitive information leakage है। +**Activities भी परिणाम वापस कर सकती हैं**। यदि आप कोई exported और unprotected activity ढूंढते हैं जो **`setResult`** method कॉल कर रही हो और **संवेदनशील जानकारी return कर रही हो**, तो यह एक संवेदनशील जानकारी leakage है। #### Tapjacking -यदि Tapjacking रोका नहीं गया है, तो आप exported activity का दुरुपयोग करके user को अनपेक्षित actions करने के लिए मजबूर कर सकते हैं। अधिक जानकारी के लिए [**Tapjacking क्या है — लिंक फॉलो करें**](#tapjacking)। +यदि Tapjacking रोका न गया हो, तो आप exported activity का दुरुपयोग करके **user को अनपेक्षित actions करने के लिए प्रेरित कर सकते हैं**। अधिक जानकारी के लिए [**what is Tapjacking follow the link**](#tapjacking). ### Exploiting Content Providers - Accessing and manipulating sensitive information [**Read this if you want to refresh what is a Content Provider.**](android-applications-basics.md#content-provider)\ -Content providers मूलतः डेटा **share** करने के लिए इस्तेमाल होते हैं। यदि किसी app के पास content providers उपलब्ध हैं तो आप उनसे संवेदनशील डेटा **extract** कर सकते हैं। साथ ही संभावित **SQL injections** और **Path Traversals** की जांच करना दिलचस्प होता है क्योंकि वे vulnerable हो सकते हैं। +Content providers मूल रूप से डेटा **share** करने के लिए उपयोग होते हैं। यदि किसी app में content providers उपलब्ध हैं तो आप उनसे संवेदनशील डेटा **extract** कर सकते हैं। साथ ही यह दिलचस्प होगा संभवतः **SQL injections** और **Path Traversals** को टेस्ट करना क्योंकि वे vulnerable हो सकते हैं। [**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers) ### **Exploiting Services** [**Read this if you want to refresh what is a Service.**](android-applications-basics.md#services)\ -याद रखें कि Service के actions method `onStartCommand` में शुरू होते हैं। +ध्यान रखें कि Service की actions method `onStartCommand` में शुरू होती हैं। -Service मूलतः कुछ ऐसा होता है जो डेटा **receive** कर सकता है, उसे **process** करता है और (या नहीं) एक response **returns** करता है। इसलिए, यदि कोई application कुछ services export कर रहा है तो आपको **code** को **check** करना चाहिए कि वह क्या कर रहा है और उसे **dynamically** **test** करना चाहिए ताकि confidential info extract की जा सके, authentication measures को bypass किया जा सके...\ +Service मूल रूप से ऐसा component है जो **data receive** कर सकता है, उसे **process** करता है और (या नहीं) response **return** कर सकता है। इसलिए, यदि कोई application कुछ services export कर रही है तो आपको **code** जांचना चाहिए यह समझने के लिए कि यह क्या कर रहा है और इसे **dynamically** टेस्ट करना चाहिए ताकि confidential जानकारी निकाली जा सके, authentication measures bypass किए जा सकें...\ [**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services) ### **Exploiting Broadcast Receivers** [**Read this if you want to refresh what is a Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\ -याद रखें कि Broadcast Receiver के actions method `onReceive` में शुरू होते हैं। +ध्यान रखें कि Broadcast Receiver के actions method `onReceive` में शुरू होते हैं। -A broadcast receiver किसी प्रकार के message के लिए waiting रहेगी। यह निर्भर करता है कि receiver message को कैसे handle करता है — इसके कारण यह vulnerable हो सकती है।\ +एक broadcast receiver किसी प्रकार के message की प्रतीक्षा करेगा। यह इस पर निर्भर करेगा कि receiver उस message को कैसे handle करता है कि वह vulnerable हो सकता है।\ [**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers) ### **Exploiting Schemes / Deep links** -आप deep links मैन्युअली ढूँढ सकते हैं, MobSF जैसे tools या [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) जैसी scripts का उपयोग करके।\ -आप घोषित किए गए किसी **scheme** को **adb** या किसी **browser** का उपयोग करके **open** कर सकते हैं: +आप deep links को manually खोज सकते हैं, MobSF जैसे tools या [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) जैसी scripts का उपयोग करके।\ +आप किसी declared **scheme** को **adb** या एक **browser** का उपयोग करके **open** कर सकते हैं: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` -_ध्यान दें कि आप **package name छोड़ सकते हैं** और मोबाइल स्वतः उस app को कॉल करेगा जो उस लिंक को खोलना चाहिए._ +_ध्यान दें कि आप **पैकेज नाम छोड़ सकते हैं** और मोबाइल अपने आप उस ऐप को कॉल करेगा जो उस लिंक को खोलना चाहिए।_ ```html Click me with alternative ``` -**कोड निष्पादित** +**Code executed** -ऐप में निष्पादित होने वाले **कोड को खोजने के लिए**, उस activity पर जाएँ जिसे deeplink कॉल करता है और function **`onNewIntent`** खोजें। +In order to find the **code that will be executed in the App**, go to the activity called by the deeplink and search the function **`onNewIntent`**. ![](<../../images/image (436) (1) (1) (1).png>) **संवेदनशील जानकारी** -हर बार जब आप कोई deep link पाते हैं, तो जाँच करें कि यह **URL parameters के माध्यम से संवेदनशील डेटा (जैसे passwords) प्राप्त तो नहीं कर रहा है**, क्योंकि कोई भी अन्य application **deep link की impersonate करके वह डेटा चुरा सकता है!** +Every time you find a deep link check that i**t's not receiving sensitive data (like passwords) via URL parameters**, because any other application could **impersonate the deep link and steal that data!** -**पाथ में पैरामीटर्स** +**Parameters in path** -आपको यह भी **जाँचना चाहिए कि कोई deep link URL के path के अंदर parameter का उपयोग तो नहीं कर रहा है** जैसा कि: `https://api.example.com/v1/users/{username}` , ऐसे मामले में आप path traversal फोर्स कर सकते हैं जैसे: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ -ध्यान दें कि यदि आप एप्लिकेशन के अंदर सही endpoints पाते हैं तो आप **Open Redirect** (अगर path का कोई हिस्सा domain name के रूप में उपयोग हो रहा हो), **account takeover** (अगर आप users विवरण बिना CSRF token के modify कर सकते हैं और vuln endpoint ने सही method उपयोग किया था) और कोई अन्य vuln पैदा कर सकते हैं। More [info about this here](http://dphoeniixx.com/2020/12/13-2/). +You **must check also if any deep link is using a parameter inside the path** of the URL like: `https://api.example.com/v1/users/{username}` , in that case you can force a path traversal accessing something like: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ +Note that if you find the correct endpoints inside the application you may be able to cause a **Open Redirect** (if part of the path is used as domain name), **account takeover** (if you can modify users details without CSRF token and the vuln endpoint used the correct method) and any other vuln. More [info about this here](http://dphoeniixx.com/2020/12/13-2/). **More examples** An [interesting bug bounty report](https://hackerone.com/reports/855618) about links (_/.well-known/assetlinks.json_). -### ट्रांसपोर्ट लेयर निरीक्षण और सत्यापन विफलताएँ +### Transport Layer Inspection and Verification Failures -- **Certificates हमेशा ठीक से जांचे नहीं जाते** Android applications द्वारा। अक्सर ये applications warnings को नज़रअंदाज़ कर self-signed certificates को स्वीकार कर लेते हैं या कुछ मामलों में HTTP कनेक्शन्स पर लौट जाते हैं। -- **SSL/TLS handshake के दौरान negotiations कभी-कभी कमजोर होती हैं**, जो insecure cipher suites उपयोग करती हैं। यह कमजोरी कनेक्शन को man-in-the-middle (MITM) हमलों के प्रति संवेदनशील बनाती है, जिससे attackers डेटा को decrypt कर सकते हैं। -- **Leakage of private information** का जोखिम तब होता है जब applications secure चैनलों का उपयोग करके authenticate करती हैं पर अन्य ट्रांज़ैक्शन्स के लिए non-secure चैनलों पर communicate करती हैं। यह तरीका session cookies या user details जैसे संवेदनशील डेटा को malicious entities द्वारा interception से सुरक्षित नहीं रखता। +- **Certificates are not always inspected properly** by Android applications. It's common for these applications to overlook warnings and accept self-signed certificates or, in some instances, revert to using HTTP connections. +- **Negotiations during the SSL/TLS handshake are sometimes weak**, employing insecure cipher suites. This vulnerability makes the connection susceptible to man-in-the-middle (MITM) attacks, allowing attackers to decrypt the data. +- Leakage of private information is a risk when applications authenticate using secure channels but then communicate over non-secure channels for other transactions. इस तरह का व्यवहार sensitive data, जैसे session cookies या user details, को malicious entities द्वारा इंटरसेप्ट होने से सुरक्षित नहीं रखता। -#### सर्टिफिकेट सत्यापन +#### Certificate Verification -हम **certificate verification** पर ध्यान केंद्रित करेंगे। सर्वर के certificate की integrity की पुष्टि करके सुरक्षा बढ़ाई जानी चाहिए। यह महत्वपूर्ण है क्योंकि insecure TLS configurations और unencrypted चैनलों पर संवेदनशील डेटा का संचार गंभीर जोखिम पैदा कर सकता है। सर्वर certificates को verify करने और कमजोरियों को ठीक करने के विस्तृत चरणों के लिए, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) व्यापक मार्गदर्शन प्रदान करता है। +हम **certificate verification** पर ध्यान देंगे। सर्वर के certificate की integrity को verify करना सुरक्षा बढ़ाने के लिए आवश्यक है। यह महत्वपूर्ण है क्योंकि insecure TLS configurations और संवेदनशील डेटा का unencrypted चैनलों पर ट्रांसमिशन गंभीर जोखिम उत्पन्न कर सकता है। सर्वर certificates की verification और vulnerabilities को ठीक करने के विस्तृत चरणों के लिए, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) व्यापक मार्गदर्शन देता है। #### SSL Pinning -SSL Pinning एक security measure है जहाँ application सर्वर के certificate की जाँच application में संग्रहीत ज्ञात copy के खिलाफ करती है। यह विधि MITM attacks रोकने के लिए आवश्यक है। संवेदनशील जानकारी हैंडल करने वाले अनुप्रयोगों के लिए SSL Pinning लागू करना strongly recomendado है। +SSL Pinning एक सुरक्षा उपाय है जहाँ application सर्वर के certificate की तुलना application में संग्रहित ज्ञात कॉपी के साथ करती है। यह तरीका MITM attacks को रोकने के लिए आवश्यक है। संवेदनशील जानकारी संभालने वाली applications के लिए SSL Pinning लागू करना दृढ़तापूर्वक अनुशंसित है। -#### ट्रैफ़िक निरीक्षण +#### Traffic Inspection -HTTP ट्रैफ़िक निरीक्षण करने के लिए, proxy tool का certificate **install** करना आवश्यक है (उदाहरण के लिए, Burp)। इस certificate को install किए बिना, encrypted ट्रैफ़िक proxy के माध्यम से दिखाई नहीं दे सकती। custom CA certificate install करने के लिए गाइड के लिए, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine) देखें। +HTTP ट्रैफिक inspect करने के लिए, proxy tool का certificate (उदा. Burp) **install** करना ज़रूरी है। इस certificate को install किए बिना, encrypted ट्रैफिक proxy के माध्यम से दिखाई नहीं दे सकता। custom CA certificate install करने के गाइड के लिए, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine) देखें। -Applications जो **API Level 24 and above** target करते हैं, उन्हें Network Security Config में बदलाव करने की आवश्यकता होती है ताकि proxy की CA certificate स्वीकार की जा सके। यह कदम encrypted ट्रैफ़िक को inspect करने के लिए महत्वपूर्ण है। Network Security Config बदलने के निर्देशों के लिए, [**refer to this tutorial**](make-apk-accept-ca-certificate.md) देखें। +Applications targeting **API Level 24 and above** को Network Security Config में बदलाव करने की आवश्यकता होती है ताकि वे proxy के CA certificate को accept करें। encrypted ट्रैफिक inspect करने के लिए यह कदम महत्वपूर्ण है। Network Security Config बदलने के निर्देशों के लिए, [**refer to this tutorial**](make-apk-accept-ca-certificate.md) देखें। -यदि **Flutter** उपयोग हो रहा है तो आपको [**this page**](flutter.md) के निर्देशों का पालन करना होगा। ऐसा इसलिए क्योंकि केवल certificate को store में जोड़ने से काम नहीं चलेगा क्योंकि Flutter के पास अपनी मान्य CAs की सूची होती है। +यदि **Flutter** उपयोग किया जा रहा है तो आपको [**this page**](flutter.md) में दिए निर्देशों का पालन करना होगा। ऐसा इसलिए है क्योंकि केवल certificate को store में जोड़ने से काम नहीं चलेगा क्योंकि Flutter की अपनी valid CAs की सूची होती है। #### Static detection of SSL/TLS pinning -runtime bypasses का प्रयास करने से पहले, जल्दी से मैप करें कि APK में pinning कहाँ लागू है। Static discovery आपको hooks/patches की योजना बनाने और सही code paths पर फोकस करने में मदद करती है। +runtime bypasses का प्रयास करने से पहले जल्दी से मैप करें कि APK में pinning कहाँ enforce हो रहा है। static discovery आपको hooks/patches की योजना बनाने और सही कोड पाथ्स पर ध्यान केंद्रित करने में मदद करता है। Tool: SSLPinDetect -- Open-source static-analysis utility जो APK को Smali (via apktool) में decompile करती है और SSL/TLS pinning implementations के curated regex patterns को scan करती है। -- प्रत्येक मैच के लिए exact file path, line number, और code snippet report करती है। -- सामान्य frameworks और custom code paths को कवर करती है: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, और Network Security Config XML pins। +- Open-source static-analysis utility that decompiles the APK to Smali (via apktool) and scans for curated regex patterns of SSL/TLS pinning implementations. +- Reports exact file path, line number, and a code snippet for each match. +- Covers common frameworks and custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins. Install - Prereqs: Python >= 3.8, Java on PATH, apktool @@ -456,8 +464,9 @@ python sslpindetect.py -f app.apk -a apktool.jar # Verbose (timings + per-match path:line + snippet) python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v ``` -पैटर्न नियमों का उदाहरण (JSON) -प्रोप्राइटरी/कस्टम pinning शैलियों का पता लगाने के लिए signatures का उपयोग करें या उन्हें विस्तारित करें। आप अपना स्वयं का JSON लोड कर सकते हैं और बड़े पैमाने पर स्कैन कर सकते हैं। +उदाहरण पैटर्न नियम (JSON) + +signatures का उपयोग करें या उन्हें बढ़ाएँ ताकि proprietary/custom pinning styles का पता लगाया जा सके। आप अपना JSON लोड करके बड़े पैमाने पर स्कैन कर सकते हैं। ```json { "OkHttp Certificate Pinning": [ @@ -471,43 +480,41 @@ python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v ] } ``` -नोट्स और सुझाव -- बड़े ऐप्स पर तेज़ स्कैनिंग के लिए मल्टी-थ्रेडिंग और memory-mapped I/O का उपयोग; pre-compiled regex ओवरहेड और false positives कम करता है। +Notes and tips +- बड़े ऐप्स पर तेज़ स्कैनिंग के लिए multi-threading और memory-mapped I/O का उपयोग करें; pre-compiled regex overhead/false positives कम करता है। - Pattern collection: https://github.com/aancw/smali-sslpin-patterns -- अगली ट्रायेज़ के लिए सामान्य खोज के लक्ष्य: -- OkHttp: CertificatePinner उपयोग, setCertificatePinner, okhttp3/okhttp पैकेज संदर्भ -- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted के overrides -- Custom SSL contexts: SSLContext.getInstance + SSLContext.init custom managers के साथ -- res/xml में declarative pins, network security config और manifest संदर्भ -- मैच हुई लोकेशनों का उपयोग Frida hooks, static patches, या config reviews की योजना बनाने के लिए करें, dynamic testing से पहले। +- अगले ट्रायेज के लिए सामान्य detection targets: +- OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references +- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides +- Custom SSL contexts: SSLContext.getInstance + SSLContext.init with custom managers +- Declarative pins in res/xml network security config और manifest references +- मैच हुई लोकेशन्स का उपयोग Frida hooks, static patches, या config reviews की योजना बनाने के लिए करें, जिससे dynamic testing से पहले काम आसान हो। +#### Bypassing SSL Pinning +जब SSL Pinning लागू होता है, तो HTTPS ट्रैफ़िक का निरीक्षण करने के लिए इसे bypass करना आवश्यक हो जाता है। इसके लिए कई तरीके उपलब्ध हैं: -#### SSL Pinning को बायपास करना +- Automatically **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). इस विकल्प का सबसे बड़ा फायदा यह है कि आपको SSL Pinning bypass करने के लिए root की ज़रूरत नहीं पड़ेगी, लेकिन आपको एप्लिकेशन को डिलीट करके नया इंस्टॉल करना होगा, और यह हर बार काम नहीं करेगा। +- आप इस प्रोटेक्शन को bypass करने के लिए **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**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` का उपयोग करके SSL Pinning को automatically bypass करने की कोशिश भी कर सकते हैं। +- आप **MobSF dynamic analysis** (नीचे समझाया गया) का उपयोग करके भी SSL Pinning को automatically bypass करने का प्रयास कर सकते हैं। +- अगर आपको लगता है कि कुछ ट्रैफ़िक आप पकड़ नहीं पा रहे हैं तो आप ट्रैफ़िक को burp पर forward करने के लिए iptables का उपयोग कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) -जब SSL Pinning लागू किया गया हो, तो HTTPS ट्रैफ़िक को निरीक्षण करने के लिए इसे बायपास करना आवश्यक हो जाता है। इस उद्देश्य के लिए कई तरीके उपलब्ध हैं: +#### Looking for Common Web Vulnerabilities -- स्वचालित रूप से **apk** को बदलकर SSLPinning को **बायपास** करने के लिए [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) का उपयोग करें। इस विकल्प का सबसे बड़ा प्रो यह है कि SSL Pinning बायपास करने के लिए आपको root की ज़रूरत नहीं पड़ेगी, लेकिन आपको एप्लिकेशन को डिलीट करके नया इंस्टॉल करना होगा, और यह हमेशा काम नहीं करेगा। -- आप इस सुरक्षा को बायपास करने के लिए **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**](frida-tutorial/objection-tutorial.md) का उपयोग करके **स्वचालित रूप से SSL Pinning बायपास** करने की भी कोशिश कर सकते हैं:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` -- आप **MobSF dynamic analysis** का उपयोग करके भी **स्वचालित रूप से SSL Pinning बायपास** करने का प्रयास कर सकते हैं (नीचे समझाया गया है) -- अगर आपको लगता है कि कुछ ट्रैफ़िक आप कैप्चर नहीं कर पा रहे हैं तो आप ट्रैफ़िक को burp पर फॉरवर्ड करने के लिए iptables का उपयोग करने की कोशिश कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) - -#### एप्लिकेशन में सामान्य वेब कमजोरियों की तलाश - -ऐप के भीतर सामान्य वेब कमजोरियों की खोज भी ज़रूरी है। इन कमजोरियों की पहचान और उन्हें कम करने के विस्तृत तरीके इस सारांश के दायरे से बाहर हैं लेकिन अन्य स्थानों पर विस्तार से कवर किए गए हैं। +एप्लिकेशन के अंदर सामान्य वेब कमजोरियों की तलाश भी महत्वपूर्ण है। इन कमजोरियों की पहचान और उनका निवारण करने के विस्तृत विवरण इस सारांश के दायरे से बाहर है, लेकिन अन्यत्र व्यापक रूप से कवर किया गया है। ### Frida -[Frida](https://www.frida.re) विकासकर्ताओं, रिवर्स-इन्जीनियर्स, और सुरक्षा शोधकर्ताओं के लिए एक dynamic instrumentation toolkit है.\ -**आप रनिंग application तक पहुंच सकते हैं और रनटाइम पर मेथड्स को hook करके व्यवहार बदल सकते हैं, मान बदल सकते हैं, मान निकाल सकते हैं, अलग कोड चला सकते हैं...**\ -अगर आप Android applications का pentest करना चाहते हैं तो आपको Frida का उपयोग करना आना चाहिए। +[Frida](https://www.frida.re) developers, reverse-engineers, और security researchers के लिए एक dynamic instrumentation toolkit है.\ +**आप running application तक पहुँच सकते हैं और रन-टाइम पर methods को hook करके व्यवहार बदल सकते हैं, values बदल सकते हैं, values extract कर सकते हैं, अलग code चला सकते हैं...**\ +अगर आप Android applications को pentest करना चाहते हैं तो आपको Frida का उपयोग करना आना चाहिए। -- Frida का उपयोग कैसे करें जानें: [**Frida tutorial**](frida-tutorial/index.html) +- Learn how to use Frida: [**Frida tutorial**](frida-tutorial/index.html) - Frida के साथ actions के लिए कुछ "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) -- कुछ Awesome Frida scripts आप यहाँ पा सकते हैं: [**https://codeshare.frida.re/**](https://codeshare.frida.re) -- anti-debugging / anti-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)) +- Ojection Frida के उपयोग को automate करने के लिए अच्छा है: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) +- कुछ Awesome Frida scripts यहाँ मिल सकते हैं: [**https://codeshare.frida.re/**](https://codeshare.frida.re) +- anti-debugging / anti-frida mechanisms को bypass करने की कोशिश करें, Frida को वैसा लोड करके जैसा यहाँ बताया गया है: [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (tool [linjector](https://github.com/erfur/linjector-rs)) #### Anti-instrumentation & SSL pinning bypass workflow @@ -515,11 +522,11 @@ python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v android-anti-instrumentation-and-ssl-pinning-bypass.md {{#endref}} -### **डंप मेमोरी - Fridump** +### **Dump Memory - Fridump** -जाँचें कि क्या ऐप मेमोरी में संवेदनशील जानकारी स्टोर कर रहा है जिसे वहां नहीं रखना चाहिए, जैसे passwords या mnemonics. +जाँचें कि क्या एप्लिकेशन मेमोरी के अंदर संवेदनशील जानकारी स्टोर कर रहा है जिसे उसे स्टोर नहीं करना चाहिए, जैसे passwords या mnemonics। -आप [**Fridump3**](https://github.com/rootbsd/fridump3) का उपयोग करके ऐप की मेमोरी को इस तरह डंप कर सकते हैं: +Using [**Fridump3**](https://github.com/rootbsd/fridump3) you can dump the memory of the app with: ```bash # With PID python3 fridump3.py -u @@ -528,65 +535,65 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -यह ./dump फ़ोल्डर में memory को dump करेगा, और वहाँ आप कुछ इस तरह grep कर सकते हैं: +यह ./dump फ़ोल्डर में memory dump करेगा, और वहां आप कुछ इस तरह grep कर सकते हैं: ```bash strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$" ``` ### **Keystore में संवेदनशील डेटा** -Android में Keystore संवेदनशील डेटा स्टोर करने के लिए सबसे अच्छा स्थान है, हालांकि पर्याप्त privileges होने पर फिर भी **उस तक पहुँच संभव है**। +Android में Keystore संवेदनशील डेटा स्टोर करने के लिए सबसे अच्छा स्थान है, हालांकि पर्याप्त privileges होने पर इसमें अभी भी **इस तक पहुँच संभव है**। -चूँकि applications यहाँ अक्सर **सादा टेक्स्ट में संवेदनशील डेटा** स्टोर करते हैं, pentests को इसे root user के रूप में जांचना चाहिए, क्योंकि किसी के पास डिवाइस तक भौतिक पहुँच होने पर वह यह डेटा चुरा सकता है। +कई एप्लिकेशन यहाँ **स्पष्ट टेक्स्ट में संवेदनशील डेटा** स्टोर करने की प्रवृत्ति रखते हैं, इसलिए pentests को इसे चेक करना चाहिए क्योंकि root user या किसी के पास physical access होने पर वे यह डेटा चुरा सकते हैं। -भले ही किसी app ने Keystore में डेटा स्टोर किया हो, डेटा एन्क्रिप्टेड होना चाहिए। +भले ही कोई app keystore में डेटा स्टोर करे, डेटा एन्क्रिप्टेड होना चाहिए। -Keystore के अंदर के डेटा तक पहुँचने के लिए आप यह Frida script इस्तेमाल कर सकते हैं: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) +keystore के अंदर के डेटा तक पहुँचने के लिए आप यह Frida script उपयोग कर सकते हैं: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) ```bash frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` ### **Fingerprint/Biometrics Bypass** -निम्नलिखित Frida script का उपयोग करके संभवतः Android applications में किसी संवेदनशील क्षेत्र की सुरक्षा हेतु किए जा रहे **bypass fingerprint authentication** को निष्क्रिय किया जा सकता है: +निम्नलिखित Frida स्क्रिप्ट का उपयोग करके संभवतः Android एप्लिकेशन द्वारा **bypass fingerprint authentication** को लागू करके **कुछ संवेदनशील क्षेत्रों की रक्षा** के लिए किए जा रहे उपायों को दरकिनार किया जा सकता है: ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` ### **पृष्ठभूमि छवियाँ** -जब आप किसी एप्लिकेशन को बैकग्राउंड में डालते हैं, Android एप्लिकेशन का एक **स्नैपशॉट** स्टोर करता है ताकि जब उसे फ़ोरग्राउंड में वापस लाया जाए तो यह ऐप से पहले इमेज लोड करना शुरू कर दे ताकि ऐसा लगे कि ऐप तेज़ी से लोड हुआ। +जब आप किसी application को background में डालते हैं, Android एक **snapshot of the application** स्टोर करता है ताकि जब इसे foreground में लौटाया जाए तो यह app के बजाय पहले image लोड करना शुरू कर दे और ऐसा लगे कि ऐप तेज़ी से लोड हुआ। -हालाँकि, अगर यह स्नैपशॉट **संवेदनशील जानकारी** रखता है, तो जिसके पास स्नैपशॉट तक पहुँच है वह **उस जानकारी को चुरा सकता है** (ध्यान दें कि इसे एक्सेस करने के लिए root की आवश्यकता होती है)। +हालाँकि, यदि यह **snapshot** में **संवेदनशील जानकारी** होती है, तो snapshot तक पहुँच रखने वाला कोई व्यक्ति उस जानकारी को चुरा सकता है (ध्यान दें कि इसे एक्सेस करने के लिए आपको root की आवश्यकता होती है)। -स्नैपशॉट्स आमतौर पर इस पथ पर स्टोर होते हैं: **`/data/system_ce/0/snapshots`** +Snapshots आमतौर पर यहाँ स्टोर होते हैं: **`/data/system_ce/0/snapshots`** -Android layout parameter में **FLAG_SECURE सेट करके स्क्रीनशॉट कैप्चर को रोकने** का तरीका प्रदान करता है। इस flag का उपयोग करने पर विंडो की सामग्री को सुरक्षित माना जाता है, जिससे यह स्क्रीनशॉट्स में दिखाई देने या गैर-सुरक्षित डिस्प्ले पर देखे जाने से रोका जाता है। +Android एक तरीका प्रदान करता है कि **FLAG_SECURE** layout parameter सेट करके screenshot capture को रोका जा सके। इस flag का इस्तेमाल करने पर, window की सामग्री को secure माना जाता है, जिससे यह screenshots में दिखाई देने या गैर‑सुरक्षित displays पर दिखने से रोका जाता है। ```bash getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ``` ### **Android Application Analyzer** -यह टूल dynamic analysis के दौरान विभिन्न टूल्स को प्रबंधित करने में मदद कर सकता है: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) +यह टूल डायनामिक विश्लेषण के दौरान विभिन्न tools को मैनेज करने में मदद कर सकता है: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) ### Intent Injection -डेवलपर्स अक्सर proxy components जैसे activities, services, और broadcast receivers बनाते हैं जो इन Intents को हैंडल करते हैं और उन्हें `startActivity(...)` या `sendBroadcast(...)` जैसे methods को पास कर देते हैं, जो जोखिम भरा हो सकता है। +Developers अक्सर activities, services, और broadcast receivers जैसे proxy components बनाते हैं जो इन Intents को हैंडल करते हैं और उन्हें `startActivity(...)` या `sendBroadcast(...)` जैसी methods को पास कर देते हैं, जो जोखिमपूर्ण हो सकता है। -खतरा इस बात में है कि attackers इन Intents को भटका कर non-exported app components को ट्रिगर कर सकते हैं या sensitive content providers तक पहुँच सकते हैं। एक महत्वपूर्ण उदाहरण यह है कि `WebView` component URLs को `Intent` objects में `Intent.parseUri(...)` के माध्यम से बदल देता है और फिर उन्हें execute कर देता है, जिससे संभावित रूप से malicious Intent injections हो सकते हैं। +खतरा तब होता है जब attackers इन Intents को misdirect करके non-exported app components को trigger कर पाते हैं या sensitive content providers तक पहुँच बना लेते हैं। एक प्रमुख उदाहरण `WebView` component है जो URLs को `Intent.parseUri(...)` के ज़रिये `Intent` objects में बदलता है और उन्हें execute करता है, जिससे malicious Intent injections संभव हो सकते हैं। -### प्रमुख निष्कर्ष +### Essential Takeaways -- **Intent Injection** वेब के Open Redirect issue के समान है। -- Exploits में `Intent` objects को extras के रूप में पास करना शामिल होता है, जिन्हें redirect करके unsafe operations execute करवाए जा सकते हैं। -- यह attackers के लिए non-exported components और content providers को expose कर सकता है। -- `WebView` की URL से `Intent` में conversion अनचाही गतिविधियाँ होने में सहायक हो सकती है। +- **Intent Injection** web के Open Redirect issue जैसा है। +- Exploits में `Intent` objects को extras के रूप में पास करना शामिल है, जिन्हें redirect करके unsafe operations execute किए जा सकते हैं। +- यह non-exported components और content providers को attackers के लिए उजागर कर सकता है। +- `WebView` की URL से `Intent` conversion अनिच्छित क्रियाओं को आसान बना सकती है। ### Android Client Side Injections and others -संभवतः आप इस प्रकार की कमजोरियों को वेब से जानते होंगे। Android application में इन कमजोरियों के साथ विशेष सावधानी बरतनी चाहिए: +संभवतः आप Web से इस तरह की vulnerabilities को जानते होंगे। Android application में इन vulnerabilities के साथ विशेष सावधानी बरतनी चाहिए: -- **SQL Injection:** जब dynamic queries या Content-Providers के साथ काम कर रहे हों, सुनिश्चित करें कि आप parameterized queries का उपयोग कर रहे हैं। -- **JavaScript Injection (XSS):** Verify that JavaScript and Plugin support is disabled for any WebViews (disabled by default). [More info here](webview-attacks.md#javascript-enabled). -- **Local File Inclusion:** WebViews should have access to the file system disabled (enabled by default) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled). -- **Eternal cookies**: कई मामलों में जब Android application session समाप्त करता है तो cookie revoke नहीं होती या disk पर भी सेव हो सकती है +- **SQL Injection:** जब dynamic queries या Content-Providers से काम कर रहे हों तो सुनिश्चित करें कि आप parameterized queries का उपयोग कर रहे हैं। +- **JavaScript Injection (XSS):** सुनिश्चित करें कि किसी भी WebViews के लिए JavaScript और Plugin support disabled हो (default में disabled)। [More info here](webview-attacks.md#javascript-enabled). +- **Local File Inclusion:** WebViews का file system access disabled होना चाहिए (default में enabled) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled). +- **Eternal cookies**: कई मामलों में जब Android application session समाप्त करता है, cookie revoke नहीं होती या disk पर भी save हो सकती है - [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) --- @@ -599,7 +606,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ![](<../../images/image (866).png>) -**Vulnerability assessment of the application** using a nice web-based frontend. You can also perform dynamic analysis (but you need to prepare the environment). +**Vulnerability assessment of the application** एक आकर्षक web-based frontend के माध्यम से करता है। आप dynamic analysis भी कर सकते हैं (पर आपको environment तैयार करना होगा)। ```bash docker pull opensecurity/mobile-security-framework-mobsf docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest @@ -609,41 +616,41 @@ Also, if you create a **ZIP** file with the source code if an **Android** or an MobSF also allows you to **diff/Compare** analysis and to integrate **VirusTotal** (you will need to set your API key in _MobSF/settings.py_ and enable it: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). You can also set `VT_UPLOAD` to `False`, then the **hash** will be **upload** instead of the file. -### MobSF के साथ सहायक डायनेमिक विश्लेषण +### Assisted Dynamic analysis with MobSF -**MobSF** Android में **dynamic analysis** के लिए भी बहुत मददगार हो सकता है, पर उस स्थिति में आपको अपने host पर MobSF और **genymotion** install करना होगा (a VM or Docker won't work)। _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\ +**MobSF** Android में **dynamic analysis** के लिए भी बहुत उपयोगी हो सकता है, लेकिन उस मामले में आपको अपने होस्ट पर MobSF और **genymotion** इंस्टॉल करने की आवश्यकता होगी (VM या Docker काम नहीं करेगा)। _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\ **MobSF dynamic analyser** निम्न कर सकता है: -- **Dump application data** (URLs, logs, clipboard, आपके द्वारा लिए गए screenshots, "**Exported Activity Tester**" द्वारा लिए गए screenshots, emails, SQLite databases, XML files, और अन्य बनाई गई फाइलें)। ये सब अपने आप किया जाता है सिवाय screenshots के — स्क्रीनशॉट लेने के लिए आपको मैन्युअली दबाना होगा जब आप screenshot चाहते हैं या सभी exported activities के screenshots प्राप्त करने के लिए आपको "**Exported Activity Tester**" दबाना होगा। +- **Dump application data**: (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files)। ये सब ऑटोमैटिकली किया जाता है सिवाय screenshots के — screenshots के लिए आपको तब प्रेस करना होगा जब आप screenshot लेना चाहें या "**Exported Activity Tester**" दबाकर सभी exported activities के screenshots हासिल कर सकते हैं। - Capture **HTTPS traffic** - Use **Frida** to obtain **runtime** **information** -Android **versions > 5** से, यह स्वतः **Frida** शुरू कर देगा और ट्रैफिक कैप्चर करने के लिए global **proxy** settings सेट कर देगा। यह केवल टेस्ट की जा रही एप्लिकेशन का ट्रैफिक ही कैप्चर करेगा। +android के **versions > 5** से, यह **automatically start Frida** करेगा और ट्रैफ़िक capture करने के लिए global **proxy** settings सेट कर देगा। यह केवल टेस्ट किए जा रहे application का ट्रैफ़िक ही capture करेगा। **Frida** -डिफ़ॉल्ट रूप से, यह कुछ Frida Scripts का उपयोग SSL pinning, root detection और debugger detection को bypass करने और interesting APIs की monitor करने के लिए भी करेगा।\ -MobSF exported activities को invoke भी कर सकता है, उनके **screenshots** ले सकता है और रिपोर्ट के लिए **save** कर सकता है। +डिफ़ॉल्ट रूप से, यह कुछ Frida Scripts भी उपयोग करेगा ताकि **SSL pinning** को bypass किया जा सके, **root detection** और **debugger detection** को बायपास किया जा सके और **interesting APIs** की निगरानी की जा सके।\ +MobSF exported activities को invoke भी कर सकता है, उनके **screenshots** ले सकता है और रिपोर्ट के लिए उन्हें **save** कर सकता है। -To **start** the dynamic testing press the green bottom: "**Start Instrumentation**". Press the "**Frida Live Logs**" to see the logs generated by the Frida scripts and "**Live API Monitor**" to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing "Start Instrumentation").\ -MobSF also allows you to load your own **Frida scripts** (to send the results of your Friday scripts to MobSF use the function `send()`). It also has **several pre-written scripts** you can load (you can add more in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), just **select them**, press "**Load**" and press "**Start Instrumentation**" (you will be able to see the logs of that scripts inside "**Frida Live Logs**"). +डायनामिक टेस्ट शुरू करने के लिए हरे बटन पर प्रेस करें: "**Start Instrumentation**". "**Frida Live Logs**" दबाकर आप Frida scripts द्वारा जनरेट किए गए logs देख सकते हैं और "**Live API Monitor**" दबाकर आप hooked methods के सभी invocation, पास किए गए arguments और returned values देख सकते हैं (यह "Start Instrumentation" दबाने के बाद दिखाई देगा)।\ +MobSF आपको अपने खुद के **Frida scripts** लोड करने की भी अनुमति देता है (अपने Frida scripts के परिणाम MobSF को भेजने के लिए `send()` function का उपयोग करें)। इसके साथ कई pre-written scripts भी आते हैं जिन्हें आप लोड कर सकते हैं (आप और जोड़ सकते हैं `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` में), बस उन्हें **select** करें, "**Load**" दबाएं और "**Start Instrumentation**" दबाएं (आप उन scripts के logs "**Frida Live Logs**" के अंदर देख पाएंगे)। ![](<../../images/image (419).png>) -Moreover, you have some Auxiliary Frida functionalities: +इसके अलावा, कुछ Auxiliary Frida सुविधाएं भी हैं: - **Enumerate Loaded Classes**: यह सभी loaded classes को print करेगा -- **Capture Strings**: एप्लिकेशन उपयोग करते समय यह सभी captured strings को print करेगा (super noisy) -- **Capture String Comparisons**: बहुत उपयोगी हो सकता है। यह तुलना की जा रही 2 strings दिखाएगा और परिणाम True था या False था। -- **Enumerate Class Methods**: क्लास नाम डालें (जैसे "java.io.File") और यह उस क्लास के सभी methods print करेगा। -- **Search Class Pattern**: पैटर्न से classes खोजें -- **Trace Class Methods**: किसी पूरे क्लास को **Trace** करें (क्लास के सभी methods के inputs और outputs देखें)। ध्यान रखें कि डिफ़ॉल्ट रूप से MobSF कई उपयोगी Android Api methods को trace करता है। +- **Capture Strings**: एप्लिकेशन उपयोग करते समय सभी captured strings को print करेगा (बहुत noisy) +- **Capture String Comparisons**: बहुत उपयोगी हो सकता है। यह **show the 2 strings being compared** करेगा और बताएगा कि result True था या False। +- **Enumerate Class Methods**: क्लास का नाम डालें (जैसे "java.io.File") और यह उस क्लास के सभी methods print करेगा। +- **Search Class Pattern**: pattern से classes खोजें +- **Trace Class Methods**: किसी पूरी क्लास को **Trace** करें (क्लास के सभी methods के inputs और outputs देखें)। ध्यान रखें कि डिफ़ॉल्ट रूप से MobSF कई दिलचस्प Android Api methods को trace करता है। -एक बार जब आप जिस auxiliary module को उपयोग करना चाहते हैं उसे select कर लेते हैं, तो आपको "**Start Intrumentation**" दबाना होगा और आप सभी outputs "**Frida Live Logs**" में देखेंगे। +एक बार जब आप वह auxiliary module चुन लें जिसे आप उपयोग करना चाहते हैं, तो आपको "**Start Intrumentation**" दबाना होगा और आप सभी outputs "**Frida Live Logs**" में देखेंगे। **Shell** -MobSF आपको dynamic analysis पेज के निचले हिस्से में कुछ **adb** commands, **MobSF commands**, और सामान्य **shell** **commands** के साथ एक shell भी देता है। कुछ दिलचस्प commands: +MobSF आपको dynamic analysis पेज के नीचे कुछ **adb** commands, **MobSF commands**, और सामान्य **shell commands** के साथ एक shell भी देता है। कुछ दिलचस्प commands: ```bash help shell ls @@ -652,15 +659,15 @@ exported_activities services receivers ``` -**HTTP टूल्स** +**HTTP tools** -When HTTP ट्रैफिक is capture you can see an ugly view of the captured traffic on "**HTTP(S) Traffic**" bottom or a nicer view in "**Start HTTPTools**" green bottom. From the second option, you can **send** the **captured requests** to **proxies** like Burp or Owasp ZAP.\ -To do so, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> press "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). +जब http ट्रैफ़िक कैप्चर होता है तो आप कैप्चर किए गए ट्रैफ़िक का एक खराब व्यू "**HTTP(S) Traffic**" बॉटम पर देख सकते हैं या "**Start HTTPTools**" हरे बटन में एक बेहतर व्यू। दूसरी विकल्प से, आप **send** करके **captured requests** को **proxies** जैसे Burp या Owasp ZAP में भेज सकते हैं.\ +ऐसा करने के लिए, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> दबाएँ "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). -Once you finish the dynamic analysis with MobSF you can press on "**Start Web API Fuzzer**" to **fuzz http requests** an look for vulnerabilities. +MobSF के साथ dynamic analysis समाप्त करने के बाद आप "**Start Web API Fuzzer**" दबाकर **fuzz http requests** करके कमजोरियों की खोज कर सकते हैं। > [!TIP] -> After performing a dynamic analysis with MobSF the proxy settings me be misconfigured and you won't be able to fix them from the GUI. You can fix the proxy settings by doing: +> MobSF के साथ dynamic analysis करने के बाद proxy सेटिंग्स ग़लत हो सकती हैं और आप उन्हें GUI से ठीक नहीं कर पाएँगे। आप प्रॉक्सी सेटिंग्स को इस कमांड से ठीक कर सकते हैं: > > ``` > adb shell settings put global http_proxy :0 @@ -668,18 +675,18 @@ Once you finish the dynamic analysis with MobSF you can press on "**Start Web AP ### Assisted Dynamic Analysis with Inspeckage -You can get the tool from [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\ -This tool with use some **Hooks** to let you know **what is happening in the application** while you perform a **dynamic analysis**. +आप यह टूल [**Inspeckage**](https://github.com/ac-pm/Inspeckage) से प्राप्त कर सकते हैं।\ +यह टूल कुछ **Hooks** का उपयोग करता है ताकि जब आप **dynamic analysis** कर रहे हों तो यह आपको बताये **what is happening in the application**। ### [Yaazhini](https://www.vegabird.com/yaazhini/) -This is a **great tool to perform static analysis with a GUI** +यह एक **great tool to perform static analysis with a GUI** ![](<../../images/image (741).png>) ### [Qark](https://github.com/linkedin/qark) -This tool is designed to look for several **security related Android application vulnerabilities**, either in **source code** or **packaged APKs**. The tool is also **capable of creating a "Proof-of-Concept" deployable APK** and **ADB commands**, to exploit some of the found vulnerabilities (Exposed activities, intents, tapjacking...). As with Drozer, there is no need to root the test device. +यह टूल कई प्रकार की **security related Android application vulnerabilities** खोजने के लिए डिज़ाइन किया गया है, चाहे वो **source code** में हों या **packaged APKs** में। यह टूल कुछ मिली कमजोरियों का इस्तेमाल करने के लिए **capable of creating a "Proof-of-Concept" deployable APK** और **ADB commands** भी बना सकता है (Exposed activities, intents, tapjacking...). Drozer की तरह, टेस्ट डिवाइस को root करने की आवश्यकता नहीं है। ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -688,22 +695,22 @@ qark --java path/to/specific/java/file.java ``` ### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git) -- सभी निकाली गई फ़ाइलें आसान संदर्भ के लिए दिखाता है -- APK फ़ाइलों को स्वचालित रूप से Java और Smali फॉर्मेट में decompile करता है -- AndroidManifest.xml का विश्लेषण करता है सामान्य vulnerabilities और व्यवहार के लिए -- Static source code analysis (सामान्य vulnerabilities और व्यवहार के लिए) +- सभी निकाली गई फ़ाइलों को आसान संदर्भ के लिए दिखाता है +- APK files को स्वतः Java और Smali फ़ॉर्मेट में decompile करता है +- AndroidManifest.xml का विश्लेषण सामान्य vulnerabilities और व्यवहार के लिए +- Static source code analysis सामान्य vulnerabilities और व्यवहार के लिए - डिवाइस जानकारी -- और भी +- और भी बहुत कुछ ```bash reverse-apk relative/path/to/APP.apk ``` ### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super) -SUPER एक कमांड-लाइन एप्लीकेशन है जिसे Windows, MacOS X और Linux पर चलाया जा सकता है, जो _.apk_ फ़ाइलों का विश्लेषण करके कमजोरियों की खोज करता है। यह APKs को decompress करके और उन कमजोरियों का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके ऐसा करता है। +SUPER एक command-line application है जिसे Windows, MacOS X और Linux पर इस्तेमाल किया जा सकता है, जो _.apk_ फ़ाइलों का vulnerabilities की तलाश में विश्लेषण करता है। यह APKs को decompress करके और नियमों की एक श्रृंखला लागू करके उन vulnerabilities का पता लगाता है। -सभी नियम `rules.json` फ़ाइल में केंद्रित हैं, और प्रत्येक कंपनी या tester अपनी आवश्यकताओं के अनुसार अपने नियम बना सकती है। +सभी rules `rules.json` फ़ाइल में केंद्रीकृत हैं, और हर कंपनी या tester अपनी ज़रूरत के अनुसार विश्लेषण के लिए अपने नियम बना सकता है। -नवीनतम बाइनरीज़ [download page](https://superanalyzer.rocks/download.html) से डाउनलोड करें। +Latest binaries डाउनलोड करने के लिए [download page](https://superanalyzer.rocks/download.html) देखें ``` super-analyzer {apk_file} ``` @@ -711,17 +718,17 @@ super-analyzer {apk_file} ![](<../../images/image (297).png>) -StaCoAn एक **crossplatform** टूल है जो developers, bugbounty hunters और ethical hackers को मोबाइल एप्लिकेशन पर [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) करने में मदद करता है। +StaCoAn एक **crossplatform** टूल है जो developers, bugbounty hunters और ethical hackers को मोबाइल applications पर [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) करने में मदद करता है। -कोन्सेप्ट यह है कि आप अपनी मोबाइल एप्लिकेशन फ़ाइल (एक .apk या .ipa फ़ाइल) को StaCoAn application पर drag and drop करें और यह आपके लिए एक visual और portable report जनरेट करेगा। आप settings और wordlists को tweak करके एक customized अनुभव पा सकते हैं। +विचार यह है कि आप अपना मोबाइल application फ़ाइल (.apk या .ipa फ़ाइल) StaCoAn application पर drag and drop करें और यह आपके लिए एक visual और portable रिपोर्ट तैयार करेगा। आप settings और wordlists को tweak करके एक customized अनुभव प्राप्त कर सकते हैं। -Download[ latest release](https://github.com/vincentcox/StaCoAn/releases): +डाउनलोड[ latest release](https://github.com/vincentcox/StaCoAn/releases): ``` ./stacoan ``` ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) -AndroBugs Framework एक Android vulnerability analysis सिस्टम है जो developers या hackers को Android applications में संभावित security vulnerabilities खोजने में मदद करता है।\ +AndroBugs Framework एक Android vulnerability analysis system है जो developers या hackers को Android applications में संभावित security vulnerabilities खोजने में मदद करता है.\ [Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] @@ -729,11 +736,11 @@ androbugs.exe -f [APK file] ``` ### [Androwarn](https://github.com/maaaaz/androwarn) -**Androwarn** एक ऐसा टूल है जिसका मुख्य उद्देश्य उपयोगकर्ता को किसी Android application द्वारा विकसित संभावित हानिकारक व्यवहारों के बारे में पता लगाना और चेतावनी देना है। +**Androwarn** एक ऐसा टूल है जिसका मुख्य उद्देश्य Android application द्वारा विकसित संभावित हानिकारक व्यवहारों का पता लगाना और उपयोगकर्ता को चेतावनी देना है। -डिटेक्शन ऐप्लिकेशन के Dalvik bytecode की **static analysis** के माध्यम से किया जाता है, जो **Smali** के रूप में प्रस्तुत होता है, और [`androguard`](https://github.com/androguard/androguard) लाइब्रेरी का उपयोग करता है। +पता लगाने की प्रक्रिया एप्लिकेशन के Dalvik bytecode का **static analysis** करके की जाती है, जो **Smali** के रूप में प्रदर्शित होता है, और इसके लिये [`androguard`](https://github.com/androguard/androguard) लाइब्रेरी का उपयोग किया जाता है। -यह टूल निम्नलिखित जैसी चीज़ों के लिए **common behavior of "bad" applications** को खोजता है: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution... +यह टूल **common behavior of "bad" applications** जैसी गतिविधियों को खोजता है, जैसे: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -741,70 +748,70 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA** एक **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework है। यह एक टूल है जो सामान्यतः उपयोग किए जाने वाले mobile application reverse engineering और analysis tools को एक साथ रखता है, ताकि OWASP mobile security threats के खिलाफ mobile applications का परीक्षण करना आसान हो सके। इसका उद्देश्य mobile application developers और security professionals के लिए यह कार्य आसान और अधिक मित्रवत बनाना है। +**MARA** एक **M**obile **A**pplication **R**everse engineering और **A**nalysis Framework है। यह उन सामान्य रूप से उपयोग किए जाने वाले mobile application reverse engineering और analysis tools को एक साथ जोड़ने वाला एक टूल है, ताकि OWASP mobile security threats के खिलाफ mobile applications का परीक्षण करने में मदद मिल सके। इसका उद्देश्य mobile application developers और security professionals के लिए यह कार्य आसान और उपयोगकर्ता-अनुकूल बनाना है। यह सक्षम है: -- विभिन्न tools का उपयोग करके Java और Smali code निकालना -- APKs का विश्लेषण करना using: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) -- regexps का उपयोग करके APK से private information निकालना -- Manifest का विश्लेषण करना -- पाये गए domains का विश्लेषण करना using: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) and [whatweb](https://github.com/urbanadventurer/WhatWeb) -- APK को Deobfuscate करना via [apk-deguard.com](http://www.apk-deguard.com) +- विभिन्न टूल्स का उपयोग करके Java और Smali कोड निकालने के लिए +- APKs का विश्लेषण करने के लिए: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) +- regexps का उपयोग करके APK से private जानकारी निकालने के लिए। +- Manifest का विश्लेषण करने के लिए। +- मिले हुए domains का विश्लेषण करने के लिए: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) और [whatweb](https://github.com/urbanadventurer/WhatWeb) +- [apk-deguard.com](http://www.apk-deguard.com) के माध्यम से APK को deobfuscate करने के लिए ### Koodous -malware का पता लगाने के लिए उपयोगी: [https://koodous.com/](https://koodous.com) +मैलवेयर का पता लगाने के लिए उपयोगी: [https://koodous.com/](https://koodous.com/) ## Obfuscating/Deobfuscating code -ध्यान दें कि जिस सेवा और कॉन्फ़िगरेशन का आप उपयोग करते हैं कोड को obfuscate करने के लिए, उसके अनुसार Secrets obfuscated हो सकती हैं या नहीं भी। +ध्यान दें कि आप जो सेवा और कॉन्फ़िगरेशन उपयोग करते हैं उसके आधार पर कोड को obfuscate करते समय Secrets obfuscated हो भी सकते हैं या नहीं भी। ### [ProGuard]() -From [Wikipedia](): **ProGuard** एक open source command-line tool है जो Java code को shrink, optimize और obfuscate करता है। यह bytecode को optimize करने के साथ-साथ unused instructions को detect और remove करने में सक्षम है। ProGuard free software है और GNU General Public License, version 2 के तहत वितरित किया जाता है। +From [Wikipedia](): **ProGuard** एक open source कमांड-लाइन टूल है जो Java कोड को shrink, optimize और obfuscate करता है। यह bytecode को optimize करने के साथ-साथ उपयोग न होने वाले निर्देशों का पता लगाकर उन्हें हटा भी सकता है। ProGuard free software है और GNU General Public License, version 2 के तहत वितरित किया जाता है। -ProGuard Android SDK के हिस्से के रूप में वितरित होता है और release mode में application build करने पर चलता है। +ProGuard Android SDK के हिस्से के रूप में वितरित होता है और application को release mode में build करते समय चलाया जाता है। ### [DexGuard](https://www.guardsquare.com/dexguard) -Deobfuscate करने के लिए चरण-दर-चरण गाइड यहाँ पढ़ें: [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) +APk को deobfuscate करने के लिए step-by-step guide देखें: [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) -(From that guide) जब हमने आख़िरी बार जाँच की थी, Dexguard का mode of operation इस प्रकार था: +(उस गाइड से) आखिरी बार जब हमने देखा था, Dexguard का mode of operation इस प्रकार था: -- एक resource को InputStream के रूप में load करें; -- परिणाम को decrypt करने के लिए FilterInputStream से inherit करने वाली एक class को feed करें; -- reverser का कुछ समय बर्बाद करने के लिए कुछ बेकार obfuscation करें; -- decrypted परिणाम को ZipInputStream में feed करें ताकि एक DEX file मिल सके; -- अंत में resulting DEX को Resource के रूप में `loadDex` method का उपयोग करके load करें। +- किसी resource को InputStream के रूप में load करें; +- decrypted करने के लिए परिणाम को FilterInputStream से inheriting करने वाली किसी class को feed करें; +- reverer के समय बर्बाद करने के लिए कुछ बेकार obfuscation करें; +- decrypted परिणाम को ZipInputStream को feed करें ताकि DEX फ़ाइल मिले; +- अंत में `loadDex` method का उपयोग करके resulting DEX को एक Resource के रूप में load करें। ### [DeGuard](http://apk-deguard.com) -**DeGuard उन Android obfuscation tools द्वारा किए गए obfuscation की प्रक्रिया को reverse करता है। यह कई security analyses को सक्षम बनाता है, जिसमें code inspection और libraries की prediction शामिल हैं।** +**DeGuard उन Android obfuscation tools द्वारा किए गए obfuscation की प्रक्रिया को उलट देता है। इससे कई सुरक्षा विश्लेषण संभव होते हैं, जिनमें code inspection और libraries का अनुमान लगाना शामिल है।** -आप एक obfuscated APK को उनके platform पर upload कर सकते हैं। +आप obfuscated APK को उनके प्लेटफ़ॉर्म पर upload कर सकते हैं। ### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app -यह एक LLM tool है जो android apps में किसी भी potential security vulnerabilities को खोजने और android app code को deobfuscate करने में मदद करता है। यह Google's Gemini public API का उपयोग करता है। +यह android apps में किसी भी संभावित सुरक्षा कमजोरियों का पता लगाने और android app code को deobfuscate करने के लिए एक LLM टूल है। Uses Google's Gemini public API. ### [Simplify](https://github.com/CalebFenton/simplify) -यह एक generic android deobfuscator है। Simplify virtually executes एक app ताकि उसके व्यवहार को समझा जा सके और फिर code को optimize करने की कोशिश करता है ताकि वह identical व्यवहार करे पर इंसान के लिए समझने में आसान हो। प्रत्येक optimization प्रकार simple और generic है, इसलिए यह मायने नहीं रखता कि किस specific प्रकार की obfuscation का उपयोग किया गया था। +यह एक **generic android deobfuscator** है। Simplify **किसी ऐप को virtually execute करता है** ताकि उसके व्यवहार को समझा जा सके और फिर **कोड को optimize करने की कोशिश करता है** ताकि उसका व्यवहार समान रहे लेकिन इंसान के लिए समझना आसान हो। प्रत्येक optimization प्रकार सरल और generic है, इसलिए यह मायने नहीं रखता कि किस प्रकार का obfuscation उपयोग किया गया है। ### [APKiD](https://github.com/rednaga/APKiD) -APKiD आपको यह जानकारी देता है कि किसी APK को कैसे बनाया गया था। यह कई compilers, packers, obfuscators और अन्य अजीब चीज़ों की पहचान करता है। यह Android के लिए [_PEiD_](https://www.aldeid.com/wiki/PEiD) की तरह है। +APKiD आपको यह जानकारी देता है कि **एक APK कैसे बनाया गया था**। यह कई **compilers**, **packers**, **obfuscators**, और अन्य अजीब चीज़ों की पहचान करता है। यह Android के लिए [_PEiD_](https://www.aldeid.com/wiki/PEiD) जैसा है। ### Manual -[Read this tutorial to learn some tricks on **how to reverse custom obfuscation**](manual-deobfuscation.md) +[इस tutorial को पढ़ें ताकि आप सीख सकें कि custom obfuscation को reverse करने के कुछ tricks कैसे किए जाते हैं](manual-deobfuscation.md) ## Labs ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4b एक Android security virtual machine है जो ubuntu-mate पर आधारित है और इसमें reverse engineering और malware analysis के लिए नवीनतम frameworks, tutorials और labs का संग्रह शामिल है। +AndroL4b एक Android security virtual machine है जो ubuntu-mate पर आधारित है और इसमें reverse engineering और malware analysis के लिए नवीनतम framework, tutorials और labs का संग्रह शामिल है, जो विभिन्न security geeks और researchers द्वारा प्रदान किये गए हैं। ## References @@ -817,6 +824,7 @@ AndroL4b एक Android security virtual machine है जो ubuntu-mate प - [SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis](https://petruknisme.medium.com/sslpindetect-advanced-ssl-pinning-detection-for-android-security-analysis-1390e9eca097) - [SSLPinDetect GitHub](https://github.com/aancw/SSLPinDetect) - [smali-sslpin-patterns](https://github.com/aancw/smali-sslpin-patterns) +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) ## Yet to try diff --git a/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md index dbe1734fa..9f858f1c5 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md +++ b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md @@ -1,31 +1,31 @@ -# Android Anti-Instrumentation & SSL Pinning Bypass (Frida/Objection) +# Android एंटी‑इंस्ट्रूमेंटेशन और SSL पिनिंग बायपास (Frida/Objection) {{#include ../../banners/hacktricks-training.md}} -यह पेज उन Android ऐप्स के खिलाफ डायनैमिक एनालिसिस फिर से हासिल करने के लिए एक व्यावहारिक वर्कफ़्लो देता है जो instrumentation को detect/root‑block करते हैं या TLS pinning लागू करते हैं। यह तेज़ triage, सामान्य डिटेक्शन्स, और बिना पुनःrepacking के संभव होने पर copy‑pasteable hooks/tactics पर केंद्रित है। +यह पृष्ठ उन Android ऐप्स के खिलाफ डायनामिक एनालिसिस पुनः प्राप्त करने के लिए एक व्यावहारिक वर्कफ़्लो प्रदान करता है जो इंस्ट्रूमेंटेशन का पता लगाते/रूट‑ब्लॉक करते हैं या TLS पिनिंग लागू करते हैं। यह तेज़ ट्रायेज़, सामान्य डिटेक्शंस, और कॉपी‑पेस्ट करने योग्य hooks/तactics पर केंद्रित है ताकि संभव होने पर बिना repacking के बायपास किया जा सके। ## Detection Surface (what apps check) -- रूट चेक: su binary, Magisk paths, getprop values, common root packages -- Frida/debugger चेक्स (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), /proc स्कैनिंग, classpath, loaded libs +- Root checks: su binary, Magisk paths, getprop values, common root packages +- Frida/debugger checks (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), scanning /proc, classpath, loaded libs - Native anti‑debug: ptrace(), syscalls, anti‑attach, breakpoints, inline hooks -- Early init चेक्स: Application.onCreate() या process start hooks जो instrumentation मौजूद होने पर क्रैश कर देते हैं +- Early init checks: Application.onCreate() or process start hooks that crash if instrumentation is present - TLS pinning: custom TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt pinning, native pins ## Step 1 — Quick win: hide root with Magisk DenyList -- Zygisk को Magisk में सक्षम करें -- DenyList सक्षम करें, target package जोड़ें -- रीबूट करें और फिर से टेस्ट करें +- Enable Zygisk in Magisk +- Enable DenyList, add the target package +- Reboot and retest -कई ऐप्स केवल स्पष्ट संकेतकों (su/Magisk paths/getprop) की तलाश करते हैं। DenyList अक्सर naive चेक्स को बेअसर कर देता है। +Many apps only look for obvious indicators (su/Magisk paths/getprop). DenyList often neutralizes naive checks. References: - Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk ## Step 2 — 30‑second Frida Codeshare tests -डीप डायव करने से पहले सामान्य drop‑in स्क्रिप्ट्स आज़माएँ: +Try common drop‑in scripts before deep diving: - anti-root-bypass.js - anti-frida-detection.js @@ -35,33 +35,50 @@ Example: ```bash frida -U -f com.example.app -l anti-frida-detection.js ``` -ये सामान्यतः Java root/debug checks, process/service scans, और native ptrace() को stub करते हैं। हल्के‑सुरक्षित apps पर उपयोगी; hardened targets को tailored hooks की आवश्यकता हो सकती है। +ये आम तौर पर Java के root/debug checks, process/service scans और native ptrace() को स्टब करते हैं। हल्के-प्रोटेक्टेड apps में उपयोगी; hardened targets के लिए tailored hooks की आवश्यकता हो सकती है। - Codeshare: https://codeshare.frida.re/ -## Step 3 — init-time detectors को बाद में attach करके bypass करें +## Medusa (Frida framework) के साथ ऑटोमेट करें -कई detections केवल process spawn/onCreate() के दौरान ही चलते हैं। Spawn‑time injection (-f) या gadgets पकड़े जाते हैं; UI लोड होने के बाद attach करने पर यह बाईपास हो सकता है। +Medusa 90+ तैयार-मॉड्यूल प्रदान करता है जो SSL unpinning, root/emulator detection bypass, HTTP comms logging, crypto key interception और अन्य के लिए उपयोगी हैं। +```bash +git clone https://github.com/Ch0pin/medusa +cd medusa +pip install -r requirements.txt +python medusa.py + +# Example interactive workflow +show categories +use http_communications/multiple_unpinner +use root_detection/universal_root_detection_bypass +run com.target.app +``` +टिप: Medusa custom hooks लिखने से पहले quick wins के लिए बहुत अच्छा है। आप modules को भी cherry-pick करके इन्हें अपने scripts के साथ combine कर सकते हैं। + +## Step 3 — init-time detectors को देर से attach करके bypass करें + +कई detections केवल process spawn/onCreate() के दौरान ही चलते हैं। Spawn‑time injection (-f) या gadgets पकड़े जा जाते हैं; UI loads होने के बाद attach करने पर आप अक्सर इन्हें bypass कर सकते हैं। ```bash # Launch the app normally (launcher/adb), wait for UI, then attach frida -U -n com.example.app # Or with Objection to attach to running process aobjection --gadget com.example.app explore # if using gadget ``` -यदि यह काम करता है, तो session को स्थिर रखें और map और stub चेक्स पर आगे बढ़ें। +यदि यह काम करता है, तो session को स्थिर रखें और map और stub checks पर आगे बढ़ें। -## Step 4 — Jadx और string hunting के माध्यम से detection logic का मैप +## चरण 4 — Jadx और string hunting के माध्यम से detection logic को मैप करें Static triage keywords in Jadx: - "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger" -Typical Java patterns: +सामान्य Java पैटर्न: ```java public boolean isFridaDetected() { return getRunningServices().contains("frida"); } ``` -सामान्य APIs जिन्हें review/hook करना है: +समीक्षा/hook करने के लिए सामान्य APIs: - android.os.Debug.isDebuggerConnected - android.app.ActivityManager.getRunningAppProcesses / getRunningServices - java.lang.System.loadLibrary / System.load (native bridge) @@ -70,7 +87,7 @@ return getRunningServices().contains("frida"); ## चरण 5 — Runtime stubbing with Frida (Java) -custom guards को ओवरराइड करें ताकि वे बिना repacking किए सुरक्षित मान लौटाएँ: +repacking के बिना सुरक्षित मान लौटाने के लिए custom guards को override करें: ```js Java.perform(() => { const Checks = Java.use('com.example.security.Checks'); @@ -85,7 +102,7 @@ const AM = Java.use('android.app.ActivityManager'); AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); }; }); ``` -Triaging early crashes? Dump classes ठीक मरने से ठीक पहले निकालेँ ताकि संभावित detection namespaces का पता चल सके: +प्रारंभिक क्रैशेस की ट्रायजिंग कर रहे हैं? संभावित detection namespaces का पता लगाने के लिए मरने से ठीक पहले classes को dump करें: ```js Java.perform(() => { Java.enumerateLoadedClasses({ @@ -94,7 +111,15 @@ onComplete: () => console.log('Done') }); }); ``` -संदिग्ध methods को Log और निष्क्रिय करके execution flow की पुष्टि करें: +// Quick root detection stub example (adapt to target package/class names) +Java.perform(() => { +try { +const RootChecker = Java.use('com.target.security.RootCheck'); +RootChecker.isDeviceRooted.implementation = function () { return false; }; +} catch (e) {} +}); + +लॉग करें और संदिग्ध मेथड्स को निष्क्रिय करके निष्पादन प्रवाह की पुष्टि करें: ```js Java.perform(() => { const Det = Java.use('com.example.security.DetectionManager'); @@ -104,24 +129,64 @@ return false; }; }); ``` -## चरण 6 — Java hooks विफल होने पर JNI/native ट्रेल का अनुसरण करें +## Bypass emulator/VM detection (Java stubs) -native loaders और detection init का पता लगाने के लिए JNI entry points को ट्रेस करें: +सामान्य संकेत: Build.FINGERPRINT/MODEL/MANUFACTURER/HARDWARE में generic/goldfish/ranchu/sdk शामिल होना; QEMU artifacts जैसे /dev/qemu_pipe, /dev/socket/qemud; डिफ़ॉल्ट MAC 02:00:00:00:00:00; 10.0.2.x NAT; telephony/sensors का अभाव। + +Build फ़ील्ड्स का त्वरित spoof: +```js +Java.perform(function(){ +var Build = Java.use('android.os.Build'); +Build.MODEL.value = 'Pixel 7 Pro'; +Build.MANUFACTURER.value = 'Google'; +Build.BRAND.value = 'google'; +Build.FINGERPRINT.value = 'google/panther/panther:14/UP1A.231105.003/1234567:user/release-keys'; +}); +``` +फाइल अस्तित्व जांच और पहचानकर्ताओं (TelephonyManager.getDeviceId/SubscriberId, WifiInfo.getMacAddress, SensorManager.getSensorList) के लिए स्टब जोड़ें ताकि वे यथार्थवादी मान लौटाएँ। + +## SSL pinning bypass quick hook (Java) + +कस्टम TrustManagers को निष्क्रिय करें और अनुमत SSL contexts लागू करने के लिए मजबूर करें: +```js +Java.perform(function(){ +var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager'); +var SSLContext = Java.use('javax.net.ssl.SSLContext'); + +// No-op validations +X509TrustManager.checkClientTrusted.implementation = function(){ }; +X509TrustManager.checkServerTrusted.implementation = function(){ }; + +// Force permissive TrustManagers +var TrustManagers = [ X509TrustManager.$new() ]; +var SSLContextInit = SSLContext.init.overload('[Ljavax.net.ssl.KeyManager;','[Ljavax.net.ssl.TrustManager;','java.security.SecureRandom'); +SSLContextInit.implementation = function(km, tm, sr){ +return SSLContextInit.call(this, km, TrustManagers, sr); +}; +}); +``` +नोट्स +- OkHttp के लिए बढ़ाएँ: आवश्यकतानुसार okhttp3.CertificatePinner और HostnameVerifier को hook करें, या CodeShare से एक universal unpinning script का उपयोग करें. +- उदाहरण चलाएँ: `frida -U -f com.target.app -l ssl-bypass.js --no-pause` + +## चरण 6 — जब Java hooks असफल हों तो JNI/native trail का पालन करें + +JNI entry points को ट्रेस करें ताकि native loaders और detection init का पता लगाया जा सके: ```bash frida-trace -n com.example.app -i "JNI_OnLoad" ``` -बंडल किए गए .so फ़ाइलों का त्वरित native triage: +बंडल किए गए .so फ़ाइलों का त्वरित नेटिव ट्रायेज़: ```bash # List exported symbols & JNI nm -D libfoo.so | head objdump -T libfoo.so | grep Java_ strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root' ``` -इंटरैक्टिव/नेटीव रिवर्सिंग: +इंटरैक्टिव/native reversing: - Ghidra: https://ghidra-sre.org/ - r2frida: https://github.com/nowsecure/r2frida -उदाहरण: ptrace को निष्क्रिय करके libc के सरल anti‑debug को पराजित करें: +उदाहरण: ptrace को निष्क्रिय करके libc में सरल anti‑debug को बेअसर करें: ```js const ptrace = Module.findExportByName(null, 'ptrace'); if (ptrace) { @@ -130,33 +195,35 @@ return -1; // pretend failure }, 'int', ['int', 'int', 'pointer', 'pointer'])); } ``` -See also: +संदर्भ: {{#ref}} reversing-native-libraries.md {{#endref}} ## चरण 7 — Objection patching (embed gadget / strip basics) -जब आप repacking को runtime hooks की तुलना में प्राथमिकता देते हैं, तो कोशिश करें: +जब आप runtime hooks की बजाय repacking को प्राथमिकता देते हैं, तो आज़माएँ: ```bash objection patchapk --source app.apk ``` नोट्स: -- Requires apktool; ensure a current version from the official guide to avoid build issues: https://apktool.org/docs/install -- Gadget injection enables instrumentation without root but can still be caught by stronger init‑time checks. +- apktool आवश्यक है; बिल्ड समस्याओं से बचने के लिए आधिकारिक गाइड से नवीनतम संस्करण सुनिश्चित करें: https://apktool.org/docs/install +- Gadget injection बिना root के instrumentation सक्षम करता है, लेकिन इसे मजबूत init‑time checks द्वारा फिर भी पकड़ा जा सकता है। -संदर्भ: +वैकल्पिक रूप से, LSPosed modules और Shamiko जोड़ें ताकि Zygisk environments में root छुपाने को मजबूत किया जा सके, और child processes को कवर करने के लिए DenyList को curate करें। + +References: - Objection: https://github.com/sensepost/objection -## Step 8 — बैकअप: नेटवर्क दृश्यता के लिए TLS pinning को patch करें +## चरण 8 — Fallback: नेटवर्क दृश्यता के लिए TLS pinning को पैच करें -यदि instrumentation अवरुद्ध है, तो आप pinning को स्थैतिक रूप से हटाकर अभी भी ट्रैफ़िक का निरीक्षण कर सकते हैं: +यदि instrumentation अवरुद्ध है, तो आप pinning को स्थैतिक रूप से हटाकर ट्रैफ़िक का निरीक्षण कर सकते हैं: ```bash apk-mitm app.apk # Then install the patched APK and proxy via Burp/mitmproxy ``` - टूल: https://github.com/shroudedcode/apk-mitm -- नेटवर्क कॉन्फ़िग CA‑trust ट्रिक्स (और Android 7+ user CA trust) के लिए, देखें: +- नेटवर्क कॉन्फ़िग CA‑trust ट्रिक्स (और Android 7+ user CA trust) के लिए देखें: {{#ref}} make-apk-accept-ca-certificate.md @@ -184,12 +251,12 @@ objection --gadget com.example.app explore # Static TLS pinning removal apk-mitm app.apk ``` -## टिप्स और सावधानियां +## टिप्स और सावधानियाँ -- जब apps लॉन्च पर crash हों तो spawn करने की बजाय बाद में attach करना प्राथमिकता दें -- कुछ detections critical flows (जैसे payment, auth) में फिर से चल सकती हैं — navigation के दौरान hooks को सक्रिय रखें -- static और dynamic को मिक्स करें: Jadx में string hunt कर classes की shortlist बनाएँ; फिर runtime पर verify करने के लिए methods को hook करें -- Hardened apps packers और native TLS pinning का उपयोग कर सकती हैं — native code को reverse करने की उम्मीद रखें +- ऐप्स लॉन्च पर क्रैश होने पर spawning के बजाय attaching late करना बेहतर है +- कुछ detections critical flows (e.g., payment, auth) में फिर से चलते हैं — navigation के दौरान hooks को active रखें +- static और dynamic को mix करें: Jadx में string hunt करके classes shortlist करें; फिर runtime पर verify करने के लिए methods को hook करें +- Hardened apps packers और native TLS pinning का उपयोग कर सकते हैं — native code को reverse करने की उम्मीद रखें ## संदर्भ @@ -202,5 +269,7 @@ apk-mitm app.apk - [r2frida](https://github.com/nowsecure/r2frida) - [Apktool install guide](https://apktool.org/docs/install) - [Magisk](https://github.com/topjohnwu/Magisk) +- [Medusa (Android Frida framework)](https://github.com/Ch0pin/medusa) +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md index 54cc45ef6..724e8c15d 100644 --- a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md +++ b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md @@ -1,24 +1,24 @@ -# AVD - Android Virtual Device +# AVD - Android वर्चुअल डिवाइस {{#include ../../banners/hacktricks-training.md}} -Thank you very much to [**@offsecjay**](https://twitter.com/offsecjay) for his help while creating this content. +इस सामग्री को बनाने में उनकी मदद के लिए [**@offsecjay**](https://twitter.com/offsecjay) का बहुत-बहुत धन्यवाद। -## What is +## क्या है -Android Studio **आपको APKs का परीक्षण करने के लिए उपयोग करने के लिए Android के वर्चुअल मशीन चलाने की अनुमति देता है**। उनका उपयोग करने के लिए आपको आवश्यकता होगी: +Android Studio आपको **Android की virtual machines चलाने की अनुमति देता है जिन्हें आप APKs टेस्ट करने के लिए उपयोग कर सकते हैं**। इनका उपयोग करने के लिए आपको निम्न की आवश्यकता होगी: -- **Android SDK tools** - [Download here](https://developer.android.com/studio/releases/sdk-tools). -- या **Android Studio** (Android SDK tools के साथ) - [Download here](https://developer.android.com/studio). +- The **Android SDK tools** - [Download here](https://developer.android.com/studio/releases/sdk-tools). +- या **Android Studio** (with Android SDK tools) - [Download here](https://developer.android.com/studio). -Windows में (मेरे मामले में) **Android Studio स्थापित करने के बाद** मेरे पास **SDK Tools स्थापित थे**: `C:\Users\\AppData\Local\Android\Sdk\tools` +Windows में (मेरे मामले में) **Android Studio इंस्टॉल करने के बाद** मेरे पास **SDK Tools इस स्थान पर इंस्टॉल थे**: `C:\Users\\AppData\Local\Android\Sdk\tools` -Mac में आप **SDK tools डाउनलोड कर सकते हैं** और उन्हें PATH में रख सकते हैं: +mac पर आप **SDK tools डाउनलोड कर सकते हैं** और PATH में जोड़ने के लिए चला सकते हैं: ```bash brew tap homebrew/cask brew install --cask android-sdk ``` -या **Android Studio GUI** से जैसा कि [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) में संकेतित किया गया है, जो उन्हें `~/Library/Android/sdk/cmdline-tools/latest/bin/` और `~/Library/Android/sdk/platform-tools/` और `~/Library/Android/sdk/emulator/` में स्थापित करेगा। +या **Android Studio GUI** के माध्यम से जैसा कि [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) में बताया गया है, जो इन्हें `~/Library/Android/sdk/cmdline-tools/latest/bin/` और `~/Library/Android/sdk/platform-tools/` और `~/Library/Android/sdk/emulator/` में स्थापित करेगा Java समस्याओं के लिए: ```java @@ -28,7 +28,7 @@ export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home ### Prepare Virtual Machine -यदि आपने Android Studio स्थापित किया है, तो आप बस मुख्य प्रोजेक्ट दृश्य खोल सकते हैं और पहुँच सकते हैं: _**Tools**_ --> _**AVD Manager.**_ +यदि आपने Android Studio इंस्टॉल किया है, तो आप मुख्य प्रोजेक्ट व्यू खोलकर सीधे _**Tools**_ --> _**AVD Manager**_ तक पहुँच सकते हैं।
@@ -36,38 +36,38 @@ export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jbr/Contents/Home
-फिर, _**Create Virtual Device**_ पर क्लिक करें। +फिर, _**Create Virtual Device**_ पर क्लिक करें
-_**select** वह फोन जिसे आप उपयोग करना चाहते हैं_ और _**Next.**_ पर क्लिक करें। +_**वह फोन चुनें जिसे आप उपयोग करना चाहते हैं**_ और _**Next**_ पर क्लिक करें। > [!WARNING] -> यदि आपको Play Store के साथ फोन की आवश्यकता है, तो एक ऐसा चुनें जिसमें Play Store का आइकन हो! +> यदि आपको Play Store इंस्टॉल किया हुआ फोन चाहिए तो Play Store आइकन वाले फोन का चयन करें! > > -वर्तमान दृश्य में आप **Android इमेज का चयन और डाउनलोड** करने में सक्षम होंगे जिसे फोन चलाएगा: +वर्तमान दृश्य में आप उस Android image को चुन (select) और डाउनलोड कर पाएँगे जिसे फोन चलाएगा:
-तो, इसे चुनें और यदि यह डाउनलोड नहीं हुआ है तो नाम के बगल में _**Download**_ प्रतीक पर क्लिक करें (**अब इमेज डाउनलोड होने तक प्रतीक्षा करें)।**\ -एक बार इमेज डाउनलोड हो जाने के बाद, बस **`Next`** और **`Finish`** का चयन करें। +इसे चुनें और अगर यह डाउनलोड नहीं हुआ है तो नाम के बगल में _**Download**_ आइकन पर क्लिक करें (डाउनलोड पूरा होने तक प्रतीक्षा करें)।\ +जब image डाउनलोड हो जाए, तो बस **`Next`** और **`Finish`** चुनें। -वर्चुअल मशीन बनाई जाएगी। अब **हर बार जब आप AVD प्रबंधक तक पहुँचेंगे, यह मौजूद होगा**। +वर्चुअल मशीन बन जाएगी। अब **हर बार जब आप AVD manager को खोलेंगे यह वहाँ मौजूद रहेगा।** ### Run Virtual Machine -इसे **चलाने** के लिए बस _**Start button**_ दबाएँ। +इसे **run** करने के लिए बस _**Start button**_ दबाएँ। ![](<../../images/image (518).png>) ## Command Line tool > [!WARNING] -> macOS के लिए आप `avdmanager` टूल `/Users//Library/Android/sdk/tools/bin/avdmanager` में और `emulator` को `/Users//Library/Android/sdk/emulator/emulator` में पा सकते हैं यदि आपने इन्हें स्थापित किया है। +> For macOS you can find the `avdmanager` tool in `/Users//Library/Android/sdk/tools/bin/avdmanager` and the `emulator` in `/Users//Library/Android/sdk/emulator/emulator` if you have them installed. -सबसे पहले आपको **निर्धारित करना होगा कि आप कौन सा फोन उपयोग करना चाहते हैं**, संभावित फोन की सूची देखने के लिए निष्पादित करें: +सबसे पहले आपको **निर्णय लेना होगा कि आप कौन सा फोन उपयोग करना चाहते हैं**, संभावित फोन की सूची देखने के लिए निम्न कमांड चलाएँ: ``` C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list device @@ -95,16 +95,16 @@ Name: Nexus 10 OEM : Google [...] ``` -एक बार जब आप उस डिवाइस का नाम तय कर लेते हैं जिसे आप उपयोग करना चाहते हैं, तो आपको **निर्णय लेना होगा कि आप इस डिवाइस में कौन सा Android इमेज चलाना चाहते हैं।**\ -आप सभी विकल्पों को `sdkmanager` का उपयोग करके सूचीबद्ध कर सकते हैं: +एक बार जब आप उस डिवाइस का नाम तय कर लें जिसे आप उपयोग करना चाहते हैं, तो आपको यह तय करना होगा कि आप इस डिवाइस में कौन सा **Android image** चलाना चाहते हैं।\ +आप `sdkmanager` का उपयोग करके सभी विकल्प सूचीबद्ध कर सकते हैं: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list ``` -और **डाउनलोड** करें वह (या सभी) जिसे आप उपयोग करना चाहते हैं: +और **डाउनलोड** करें उस एक (या सभी) को जिसे आप उपयोग करना चाहते हैं: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64" ``` -एक बार जब आप उस Android इमेज को डाउनलोड कर लेते हैं जिसे आप उपयोग करना चाहते हैं, आप **सभी डाउनलोड की गई Android इमेज़ की सूची** इस प्रकार देख सकते हैं: +एक बार जब आपने उपयोग करने के लिए Android image डाउनलोड कर लिया हो, तब आप निम्न के साथ **डाउनलोड की गई सभी Android images को सूचीबद्ध** कर सकते हैं: ``` C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target ---------- @@ -120,12 +120,12 @@ Type: Platform API level: 29 Revision: 4 ``` -इस समय आपने उस डिवाइस का चयन कर लिया है जिसे आप उपयोग करना चाहते हैं और आपने Android इमेज डाउनलोड कर ली है, इसलिए **आप वर्चुअल मशीन बना सकते हैं**: +इस समय आपने वह डिवाइस चुन लिया है जिसका आप उपयोग करना चाहते हैं और आपने Android image डाउनलोड कर ली है, इसलिए **आप वर्चुअल मशीन का निर्माण निम्न का उपयोग करके कर सकते हैं:** ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X" ``` -अंतिम कमांड में **मैंने एक VM नामित** "_AVD9_" **निर्मित किया** जो **डिवाइस** "_Nexus 5X_" और **एंड्रॉइड इमेज** "_system-images;android-28;google_apis;x86_64_" का उपयोग करता है।\ -अब आप **आपके द्वारा निर्मित वर्चुअल मशीनों की सूची** प्राप्त कर सकते हैं: +पिछली कमांड में **मैंने VM बनाया जिसका नाम** "_AVD9_" **था**, **डिवाइस** "_Nexus 5X_" और **Android image** "_system-images;android-28;google_apis;x86_64_".\ +अब आप **वर्चुअल मशीनों की सूची** जिन्हें आपने बनाया है, निम्न के साथ देख सकते हैं: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd @@ -143,73 +143,127 @@ Error: Google pixel_2 no longer exists as a device ### वर्चुअल मशीन चलाएँ > [!WARNING] -> macOS के लिए, आप `avdmanager` टूल `/Users//Library/Android/sdk/tools/bin/avdmanager` में और `emulator` `/Users//Library/Android/sdk/emulator/emulator` में पा सकते हैं यदि आपने इन्हें स्थापित किया है। +> macOS के लिए आप `avdmanager` टूल को `/Users//Library/Android/sdk/tools/bin/avdmanager` और `emulator` को `/Users//Library/Android/sdk/emulator/emulator` में पा सकते हैं यदि वे इंस्टॉल हैं। -हम पहले ही देख चुके हैं कि आप बनाए गए वर्चुअल मशीनों की सूची कैसे देख सकते हैं, लेकिन **आप उन्हें निम्नलिखित का उपयोग करके भी सूचीबद्ध कर सकते हैं**: +हम पहले ही देख चुके हैं कि आप बनाए गए वर्चुअल मशीनों को कैसे सूचीबद्ध कर सकते हैं, लेकिन **आप इन्हें निम्न का उपयोग करके भी सूचीबद्ध कर सकते हैं**: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -list-avds AVD9 Pixel_2_API_27 ``` -आप बस **किसी भी वर्चुअल मशीन को चला सकते हैं** जिसका निर्माण किया गया है: +आप बस निम्नलिखित का उपयोग करके **बनी हुई किसी भी virtual machine को चला सकते हैं**: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "VirtualMachineName" C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" ``` -या अधिक उन्नत विकल्पों का उपयोग करके आप एक वर्चुअल मशीन चला सकते हैं जैसे: +या अधिक उन्नत विकल्पों का उपयोग करके आप इस तरह एक वर्चुअल मशीन चला सकते हैं: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system ``` -### Command line options +### कमांड लाइन विकल्प -हालांकि **कई विभिन्न कमांड लाइन उपयोगी विकल्प** हैं जिन्हें आप एक वर्चुअल मशीन शुरू करने के लिए उपयोग कर सकते हैं। नीचे कुछ दिलचस्प विकल्प दिए गए हैं लेकिन आप [**यहां एक पूर्ण सूची पा सकते हैं**](https://developer.android.com/studio/run/emulator-commandline) +हालाँकि वर्चुअल मशीन शुरू करने के लिए आप उपयोग कर सकते हैं **कई अलग-अलग उपयोगी कमांड लाइन विकल्प**। नीचे कुछ दिलचस्प विकल्प दिए गए हैं लेकिन आप [**find a complete list here**](https://developer.android.com/studio/run/emulator-commandline) -**Boot** +**बूट** - `-snapshot name` : VM स्नैपशॉट शुरू करें -- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : सभी रिकॉर्ड किए गए स्नैपशॉट्स की सूची बनाएं +- `-snapshot-list -snapstorage ~/.android/avd/Nexus_5X_API_23.avd/snapshots-test.img` : रिकॉर्ड किए गए सभी स्नैपशॉट सूचीबद्ध करें -**Network** +**नेटवर्क** -- `-dns-server 192.0.2.0, 192.0.2.255` : VM के लिए कॉमा से अलग DNS सर्वर निर्दिष्ट करने की अनुमति दें। -- **`-http-proxy 192.168.1.12:8080`** : उपयोग करने के लिए एक HTTP प्रॉक्सी निर्दिष्ट करने की अनुमति दें (Burp का उपयोग करके ट्रैफ़िक कैप्चर करने के लिए बहुत उपयोगी) -- यदि प्रॉक्सी सेटिंग्स किसी कारण से काम नहीं कर रही हैं, तो उन्हें आंतरिक रूप से या "Super Proxy" या "ProxyDroid" जैसी एप्लिकेशन का उपयोग करके कॉन्फ़िगर करने का प्रयास करें। -- `-netdelay 200` : मिलीसेकंड में नेटवर्क विलंबता अनुकरण सेट करें। -- `-port 5556` : कंसोल और adb के लिए उपयोग किए जाने वाले TCP पोर्ट नंबर सेट करें। -- `-ports 5556,5559` : कंसोल और adb के लिए उपयोग किए जाने वाले TCP पोर्ट सेट करें। -- **`-tcpdump /path/dumpfile.cap`** : एक फ़ाइल में सभी ट्रैफ़िक कैप्चर करें +- `-dns-server 192.0.2.0, 192.0.2.255` : VM के लिए DNS सर्वरों को कॉमा से अलग करके बताने की अनुमति देता है। +- **`-http-proxy 192.168.1.12:8080`** : इस्तेमाल करने के लिए HTTP proxy बताने की अनुमति देता है (Burp का उपयोग करके ट्रैफ़िक कैप्चर करने के लिए बहुत उपयोगी) +- अगर किसी कारण से proxy सेटिंग्स काम नहीं कर रही हैं, तो उन्हें आंतरिक रूप से कॉन्फ़िगर करने की कोशिश करें या "Super Proxy" या "ProxyDroid" जैसे ऐप्लिकेशन का उपयोग करें। +- `-netdelay 200` : नेटवर्क विलंबता एमुलेशन (मिलीसेकंड में) सेट करें। +- `-port 5556` : उस TCP पोर्ट नंबर को सेट करें जिसका उपयोग console और adb के लिए किया जाता है। +- `-ports 5556,5559` : console और adb के लिए उपयोग किए जाने वाले TCP पोर्ट सेट करें। +- **`-tcpdump /path/dumpfile.cap`** : सभी ट्रैफ़िक को एक फ़ाइल में कैप्चर करें -**System** +**सिस्टम** -- `-selinux {disabled|permissive}` : Linux ऑपरेटिंग सिस्टम पर सुरक्षा-संवर्धित लिनक्स सुरक्षा मॉड्यूल को या तो अक्षम या अनुमति मोड पर सेट करें। -- `-timezone Europe/Paris` : वर्चुअल डिवाइस के लिए समय क्षेत्र सेट करें -- `-screen {touch(default)|multi-touch|o-touch}` : अनुकरण किए गए टच स्क्रीन मोड सेट करें। -- **`-writable-system`** : अपने अनुकरण सत्र के दौरान एक लिखने योग्य सिस्टम छवि रखने के लिए इस विकल्प का उपयोग करें। आपको `adb root; adb remount` भी चलाना होगा। यह सिस्टम में एक नया प्रमाणपत्र स्थापित करने के लिए बहुत उपयोगी है। +- `-selinux {disabled|permissive}` : Linux ऑपरेटिंग सिस्टम पर Security-Enhanced Linux सुरक्षा मॉड्यूल को disabled या permissive मोड में सेट करें। +- `-timezone Europe/Paris` : वर्चुअल डिवाइस के लिए टाइमज़ोन सेट करें +- `-screen {touch(default)|multi-touch|o-touch}` : इम्यूलेटेड टच स्क्रीन मोड सेट करें। +- **`-writable-system`** : इस विकल्प का उपयोग करें ताकि आपके एमुलेशन सत्र के दौरान सिस्टम इमेज लिखने योग्य हो। आपको साथ ही `adb root; adb remount` भी चलाना होगा। यह सिस्टम में नया प्रमाणपत्र इंस्टॉल करने के लिए बहुत उपयोगी है। + +## Linux CLI setup (SDK/AVD quickstart) + +आधिकारिक CLI tools Android Studio के बिना तेज़, डिबग करने योग्य इम्यूलेटर्स बनाना आसान बनाते हैं। +```bash +# Directory layout +mkdir -p ~/Android/cmdline-tools/latest + +# Download commandline tools (Linux) +wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip -O /tmp/cmdline-tools.zip +unzip /tmp/cmdline-tools.zip -d ~/Android/cmdline-tools/latest +rm /tmp/cmdline-tools.zip + +# Env vars (add to ~/.bashrc or ~/.zshrc) +export ANDROID_HOME=$HOME/Android +export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH + +# Install core SDK components +sdkmanager --install "platform-tools" "emulator" + +# Install a debuggable x86_64 system image (Android 11 / API 30) +sdkmanager --install "system-images;android-30;google_apis;x86_64" + +# Create an AVD and run it with a writable /system & snapshot name +avdmanager create avd -n PixelRootX86 -k "system-images;android-30;google_apis;x86_64" -d "pixel" +emulator -avd PixelRootX86 -writable-system -snapshot PixelRootX86_snap + +# Verify root (debuggable images allow `adb root`) +adb root +adb shell whoami # expect: root +``` +नोट्स +- सिस्टम इमेज फ्लेवर्स: google_apis (debuggable, adb root की अनुमति), google_apis_playstore (rootable नहीं), aosp/default (हल्का). +- बिल्ड प्रकार: userdebug अक्सर debug-capable images पर `adb root` की अनुमति देता है। Play Store images प्रोडक्शन बिल्ड होते हैं और root को ब्लॉक करते हैं। +- x86_64 होस्ट्स पर, API 28+ से पूर्ण-सिस्टम ARM64 इम्यूलेशन समर्थित नहीं है। Android 11+ पर तेज़ी से कई ARM-only apps चलाने के लिए उन Google APIs/Play images का उपयोग करें जिनमें per-app ARM-to-x86 translation शामिल है। + +### CLI से स्नैपशॉट्स +```bash +# Save a clean snapshot from the running emulator +adb -s emulator-5554 emu avd snapshot save my_clean_setup + +# Boot from a named snapshot (if it exists) +emulator -avd PixelRootX86 -writable-system -snapshot my_clean_setup +``` +## ARM→x86 बाइनरी अनुवाद (Android 11+) + +Android 11+ पर Google APIs और Play Store images प्रति प्रोसेस ARM app binaries का अनुवाद कर सकते हैं, जबकि सिस्टम के बाकी हिस्से को native x86/x86_64 पर रखा जाता है। यह अक्सर desktop पर कई ARM-only apps का परीक्षण करने के लिए पर्याप्त तेज़ होता है। + +> टिप: pentests के दौरान Google APIs x86/x86_64 images को प्राथमिकता दें। Play images सुविधाजनक हैं लेकिन `adb root` को ब्लॉक करती हैं; इन्हें तभी उपयोग करें जब आपको विशेष रूप से Play services की आवश्यकता हो और root के अभाव को स्वीकार कर लें। ## Rooting a Play Store device -यदि आपने Play Store के साथ एक डिवाइस डाउनलोड किया है, तो आप सीधे रूट प्राप्त नहीं कर पाएंगे, और आपको यह त्रुटि संदेश मिलेगा +यदि आपने Play Store वाला device डाउनलोड किया है तो आप सीधे root प्राप्त नहीं कर पाएंगे, और आपको यह त्रुटि संदेश मिलेगा ``` $ adb root adbd cannot run as root in production builds ``` -Using [rootAVD](https://github.com/newbit1/rootAVD) with [Magisk](https://github.com/topjohnwu/Magisk) मैं इसे रूट करने में सक्षम था (उदाहरण के लिए [**इस वीडियो**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **या** [**इस एक**](https://www.youtube.com/watch?v=qQicUW0svB8))। +Using [rootAVD](https://github.com/newbit1/rootAVD) with [Magisk](https://github.com/topjohnwu/Magisk) का उपयोग करके मैं इसे root कर पाया (उदाहरण के लिए [**यह वीडियो**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) या [**यह वाला**](https://www.youtube.com/watch?v=qQicUW0svB8)). -## Burp प्रमाणपत्र स्थापित करें - -कस्टम CA प्रमाणपत्र स्थापित करने के लिए निम्नलिखित पृष्ठ की जांच करें: +## Burp Certificate इंस्टॉल करें +custom CA cert कैसे इंस्टॉल करें जानने के लिए निम्नलिखित पृष्ठ देखें: {{#ref}} install-burp-certificate.md {{#endref}} -## अच्छे AVD विकल्प +## उपयोगी AVD विकल्प ### स्नैपशॉट लें -आप किसी भी समय VM का स्नैपशॉट लेने के लिए **GUI का उपयोग कर सकते हैं**: +आप किसी भी समय VM का स्नैपशॉट लेने के लिए **GUI का उपयोग** कर सकते हैं: ![](<../../images/image (234).png>) +## संदर्भ + +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) +- [Android Emulator command line](https://developer.android.com/studio/run/emulator-commandline) +- [Run ARM apps on the Android Emulator (x86 translation)](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md index 1fff32b69..d0ab26e21 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md @@ -1,54 +1,107 @@ -# Frida Tutorial +# Frida ट्यूटोरियल {{#include ../../../banners/hacktricks-training.md}} -## Installation +## इंस्टॉलेशन -**frida tools** स्थापित करें: +इंस्टॉल करें **frida tools**: ```bash pip install frida-tools pip install frida ``` -**एंड्रॉइड में डाउनलोड और इंस्टॉल करें** **फ्रिडा सर्वर** ([नवीनतम रिलीज़ डाउनलोड करें](https://github.com/frida/frida/releases)).\ -रूट मोड में adb को पुनः प्रारंभ करने, इससे कनेक्ट करने, frida-server अपलोड करने, कार्यान्वयन अनुमतियाँ देने और इसे बैकग्राउंड में चलाने के लिए एक-लाइनर: +**डाउनलोड और इंस्टॉल** Android में **frida server** ([Download the latest release](https://github.com/frida/frida/releases)).\ +adb को root मोड में restart करने, उससे connect करने, frida-server अपलोड करने, exec permissions देने और इसे बैकग्राउंड में चलाने के लिए One-liner: ```bash adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local/tmp/; adb shell "chmod 755 /data/local/tmp/frida-server"; adb shell "/data/local/tmp/frida-server &" ``` -**जांचें** कि यह **काम कर रहा है**: +**जाँचें** क्या यह **काम कर रहा है**: ```bash frida-ps -U #List packages and processes frida-ps -U | grep -i #Get all the package name ``` -## Tutorials +## Frida server vs. Gadget (root vs. no-root) + +Frida के साथ Android apps को instrument करने के दो सामान्य तरीके: + +- Frida server (rooted devices): एक native daemon को push करके चलाएँ जो आपको किसी भी process से attach करने की अनुमति देता है। +- Frida Gadget (no root): Frida को APK के अंदर एक shared library के रूप में bundle करें और इसे target process के भीतर auto-load कराएँ। + +Frida server (rooted) +```bash +# Download the matching frida-server binary for your device's arch +# https://github.com/frida/frida/releases +adb root +adb push frida-server--android- /data/local/tmp/frida-server +adb shell chmod 755 /data/local/tmp/frida-server +adb shell /data/local/tmp/frida-server & # run at boot via init/magisk if desired + +# From host, list processes and attach +frida-ps -Uai +frida -U -n com.example.app +``` +Frida Gadget (no-root) + +1) APK को अनपैक करें, gadget .so और config जोड़ें: +- libfrida-gadget.so को lib// में रखें (e.g., lib/arm64-v8a/) +- assets/frida-gadget.config बनाएँ और इसमें अपनी script लोड करने की सेटिंग्स डालें + +Example frida-gadget.config +```json +{ +"interaction": { "type": "script", "path": "/sdcard/ssl-bypass.js" }, +"runtime": { "logFile": "/sdcard/frida-gadget.log" } +} +``` +2) गैजेट को रेफ़रेंस/लोड करें ताकि यह जल्दी इनिशियलाइज़ हो: +- सबसे आसान: Application.onCreate() में System.loadLibrary("frida-gadget") कॉल करने वाला एक छोटा Java stub जोड़ें, या पहले से मौजूद native lib loading का उपयोग करें। + +3) APK को रिपैक और साइन करें, फिर इंस्टॉल करें: +```bash +apktool d app.apk -o app_m +# ... add gadget .so and config ... +apktool b app_m -o app_gadget.apk +uber-apk-signer -a app_gadget.apk -o out_signed +adb install -r out_signed/app_gadget-aligned-debugSigned.apk +``` +4) होस्ट से gadget process में Attach करें: +```bash +frida-ps -Uai +frida -U -n com.example.app +``` +Notes +- कुछ सुरक्षा उपाय Gadget का पता लगा सकते हैं; names/paths को छिपा रखें और आवश्यकता होने पर उन्हें देर से/शर्तों के अनुसार लोड करें। +- सख्त-सुरक्षा वाले ऐप्स पर, server + late attach के साथ rooted testing को प्राथमिकता दें, या Magisk/Zygisk hiding के साथ संयोजित करें। + +## ट्यूटोरियल्स ### [Tutorial 1](frida-tutorial-1.md) -**From**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ +**स्रोत**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ **APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\ -**Source Code**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo) +**स्रोत कोड**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo) -**[लिंक पर पढ़ें](frida-tutorial-1.md)।** +**पढ़ने के लिए [यहाँ क्लिक करें](frida-tutorial-1.md).** ### [Tutorial 2](frida-tutorial-2.md) -**From**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parts 2, 3 & 4)\ -**APKs और Source code**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) +**स्रोत**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Parts 2, 3 & 4)\ +**APKs और स्रोत कोड**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) -**[लिंक पर पढ़ें।](frida-tutorial-2.md)** +**पढ़ने के लिए [यहाँ क्लिक करें](frida-tutorial-2.md).** ### [Tutorial 3](owaspuncrackable-1.md) -**From**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ +**स्रोत**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ **APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk) -**[लिंक पर पढ़ें](owaspuncrackable-1.md)।** +**पढ़ने के लिए [यहाँ क्लिक करें](owaspuncrackable-1.md).** -**आप यहाँ और शानदार Frida स्क्रिप्ट्स पा सकते हैं:** [**https://codeshare.frida.re/**](https://codeshare.frida.re) +**आप यहां और Awesome Frida scripts पा सकते हैं:** [**https://codeshare.frida.re/**](https://codeshare.frida.re) -## Quick Examples +## त्वरित उदाहरण -### Calling Frida from command line +### कमांड लाइन से Frida कॉल करना ```bash frida-ps -U @@ -61,7 +114,7 @@ frida -U --no-pause -l disableRoot.js -f owasp.mstg.uncrackable1 #frozen so that the instrumentation can occur, and the automatically #continue execution with our modified code. ``` -### बेसिक पायथन स्क्रिप्ट +### बेसिक Python स्क्रिप्ट ```python import frida, sys @@ -72,9 +125,9 @@ print('[ * ] Running Frida Demo application') script.load() sys.stdin.read() ``` -### बिना पैरामीटर के फ़ंक्शन को हुक करना +### बिना पैरामीटर वाले फ़ंक्शनों का Hooking -क्लास `sg.vantagepoint.a.c` के फ़ंक्शन `a()` को हुक करें +क्लास `sg.vantagepoint.a.c` के फ़ंक्शन `a()` को Hook करें ```javascript Java.perform(function () { ; rootcheck1.a.overload().implementation = function() { @@ -84,14 +137,14 @@ return false; }; }); ``` -जावा `exit()` को हुक करें +java के `exit()` को Hook करें ```javascript var sysexit = Java.use("java.lang.System") sysexit.exit.overload("int").implementation = function (var_0) { send("java.lang.System.exit(I)V // We avoid exiting the application :)") } ``` -MainActivity `.onStart()` और `.onCreate()` को हुक करें +Hook MainActivity `.onStart()` & `.onCreate()` ```javascript var mainactivity = Java.use("sg.vantagepoint.uncrackable1.MainActivity") mainactivity.onStart.overload().implementation = function () { @@ -105,7 +158,7 @@ send("MainActivity.onCreate() HIT!!!") var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0) } ``` -एंड्रॉइड `.onCreate()` को हुक करें +android `.onCreate()` को Hook करें ```javascript var activity = Java.use("android.app.Activity") activity.onCreate.overload("android.os.Bundle").implementation = function ( @@ -115,9 +168,9 @@ send("Activity HIT!!!") var ret = this.onCreate.overload("android.os.Bundle").call(this, var_0) } ``` -### पैरामीटर के साथ फ़ंक्शन को हुक करना और मान प्राप्त करना +### Hooking functions with parameters और वैल्यू प्राप्त करना -एक डिक्रिप्शन फ़ंक्शन को हुक करना। इनपुट प्रिंट करें, मूल फ़ंक्शन को कॉल करें, इनपुट को डिक्रिप्ट करें और अंत में, प्लेन डेटा प्रिंट करें: +एक decryption function को Hook करना। input प्रिंट करें, मूल function को कॉल करें, input को decrypt करें और अंत में, plain data प्रिंट करें: ```javascript function getString(data) { var ret = "" @@ -142,9 +195,9 @@ send("Decrypted flag: " + flag) return ret //[B } ``` -### फ़ंक्शंस को हुक करना और उन्हें हमारे इनपुट के साथ कॉल करना +### Hooking functions और उन्हें हमारे इनपुट के साथ कॉल करना -एक फ़ंक्शन को हुक करें जो एक स्ट्रिंग प्राप्त करता है और इसे अन्य स्ट्रिंग के साथ कॉल करें (from [here](https://11x256.github.io/Frida-hooking-android-part-2/)) +Hook एक function जो एक string प्राप्त करता है और उसे किसी अन्य string के साथ कॉल करें (from [here](https://11x256.github.io/Frida-hooking-android-part-2/)) ```javascript var string_class = Java.use("java.lang.String") // get a JS wrapper for java's String class @@ -157,11 +210,11 @@ console.log("Return value: " + ret) return ret } ``` -### पहले से बनाए गए क्लास के ऑब्जेक्ट को प्राप्त करना +### किसी पहले से बनाए गए class के object को प्राप्त करना -यदि आप किसी बनाए गए ऑब्जेक्ट के कुछ गुण निकालना चाहते हैं, तो आप इसका उपयोग कर सकते हैं। +यदि आप किसी बनाए गए object का कोई attribute निकालना चाहते हैं तो आप इसे उपयोग कर सकते हैं। -इस उदाहरण में, आप देखेंगे कि कैसे my_activity क्लास का ऑब्जेक्ट प्राप्त करें और कैसे .secret() फ़ंक्शन को कॉल करें जो ऑब्जेक्ट के एक निजी गुण को प्रिंट करेगा: +इस उदाहरण में आप देखेंगे कि class my_activity का object कैसे प्राप्त किया जाए और कैसे .secret() function को कॉल करें जो object का एक private attribute print करेगा: ```javascript Java.choose("com.example.a11x256.frida_test.my_activity", { onMatch: function (instance) { @@ -175,7 +228,13 @@ onComplete: function () {}, ## अन्य Frida ट्यूटोरियल - [https://github.com/DERE-ad2001/Frida-Labs](https://github.com/DERE-ad2001/Frida-Labs) -- [Advanced Frida Usage ब्लॉग श्रृंखला का भाग 1: IOS एन्क्रिप्शन पुस्तकालय](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/) +- [Part 1 of Advanced Frida Usage blog series: IOS Encryption Libraries](https://8ksec.io/advanced-frida-usage-part-1-ios-encryption-libraries-8ksec-blogs/) +## संदर्भ + +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) +- [Frida Gadget documentation](https://frida.re/docs/gadget/) +- [Frida releases (server binaries)](https://github.com/frida/frida/releases) + {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md index 26934a3fe..31b72189a 100644 --- a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md +++ b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md @@ -1,20 +1,32 @@ -# Burp प्रमाणपत्र स्थापित करें +# Burp सर्टिफिकेट इंस्टॉल करें {{#include ../../banners/hacktricks-training.md}} +## ADB के माध्यम से सिस्टम-व्यापी प्रॉक्सी + +एक वैश्विक HTTP प्रॉक्सी कॉन्फ़िगर करें ताकि सभी ऐप्स का ट्रैफ़िक आपके इंटरसेप्टर (Burp/mitmproxy) के माध्यम से जाए: +```bash +# Set proxy (device/emulator must reach your host IP) +adb shell settings put global http_proxy 192.168.1.2:8080 + +# Clear proxy +adb shell settings put global http_proxy :0 +``` +टिप: Burp में अपना listener 0.0.0.0 से bind करें ताकि LAN पर डिवाइस कनेक्ट कर सकें (Proxy -> Options -> Proxy Listeners). + ## एक वर्चुअल मशीन पर -सबसे पहले, आपको Burp से Der प्रमाणपत्र डाउनलोड करने की आवश्यकता है। आप इसे _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ में कर सकते हैं। +सबसे पहले आपको Burp से Der certificate डाउनलोड करना होगा। आप यह _**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ में कर सकते हैं। ![](<../../images/image (367).png>) -**Der प्रारूप में प्रमाणपत्र निर्यात करें** और इसे **उस रूप में परिवर्तित करें** जिसे **Android** **समझ सके।** ध्यान दें कि **AVD में Android मशीन पर burp प्रमाणपत्र कॉन्फ़िगर करने के लिए** आपको इस मशीन को **`-writable-system`** विकल्प के साथ **चलाना** होगा।\ -उदाहरण के लिए, आप इसे इस तरह चला सकते हैं: +**Der फॉर्मेट में certificate export करें** और चलिए इसे उस फॉर्म में बदलते हैं जिसे **Android** समझ सके। ध्यान दें कि **AVD में Android मशीन पर burp certificate configure करने के लिए** आपको यह मशीन **`-writable-system`** विकल्प के साथ **run** करना होगा।\ +उदाहरण के लिए आप इसे इस तरह चला सकते हैं: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -http-proxy 192.168.1.12:8080 -writable-system ``` -फिर, **burps प्रमाणपत्र को कॉन्फ़िगर करने के लिए**: +फिर, **burps certificate को कॉन्फ़िगर करने के लिए**: ```bash openssl x509 -inform DER -in burp_cacert.der -out burp_cacert.pem CERTHASHNAME="`openssl x509 -inform PEM -subject_hash_old -in burp_cacert.pem | head -1`.0" @@ -25,39 +37,43 @@ adb shell mv /sdcard/$CERTHASHNAME /system/etc/security/cacerts/ #Move to correc adb shell chmod 644 /system/etc/security/cacerts/$CERTHASHNAME #Assign privileges adb reboot #Now, reboot the machine ``` -एक बार जब **मशीन रीबूट करना समाप्त कर दे** तो बर्प प्रमाणपत्र इसका उपयोग में होगा! +जब **मशीन का पुनरारंभ पूरा होने के बाद** तो Burp प्रमाणपत्र इसका उपयोग करने लगेगा! -## मैजिक का उपयोग करना +## Magisc का उपयोग -यदि आपने **मैजिक के साथ अपने डिवाइस को रूट किया है** (शायद एक एमुलेटर), और आप **पिछले** **कदमों** का पालन नहीं कर सकते हैं बर्प प्रमाणपत्र स्थापित करने के लिए क्योंकि **फाइल सिस्टम केवल पढ़ने के लिए है** और आप इसे फिर से लिखने योग्य नहीं बना सकते, तो एक और तरीका है। +यदि आपने अपना डिवाइस **Magisc के साथ rooted** किया है (शायद एक emulator), और आप पिछले **steps** का पालन करके Burp cert इंस्टॉल नहीं कर पा रहे क्योंकि **filesystem is read-only** है और आप उसे writable के लिए remount नहीं कर सकते, तो एक और तरीका है। -[**इस वीडियो**](https://www.youtube.com/watch?v=qQicUW0svB8) में समझाया गया है कि आपको: +जैसा कि [**this video**](https://www.youtube.com/watch?v=qQicUW0svB8) में बताया गया है, आपको यह करना होगा: -1. **एक CA प्रमाणपत्र स्थापित करें**: बस **खींचें और छोड़ें** DER बर्प प्रमाणपत्र को **विस्तार बदलते हुए** `.crt` में मोबाइल में ताकि यह डाउनलोड फ़ोल्डर में संग्रहीत हो जाए और `Install a certificate` -> `CA certificate` पर जाएं। +1. **Install a CA certificate**: बस मोबाइल में DER Burp certificate को **drag&drop** करें और इसकी extension `.crt` में बदलें ताकि यह Downloads फोल्डर में सेव हो जाए और फिर `Install a certificate` -> `CA certificate` पर जाएँ
-- यह जांचें कि प्रमाणपत्र सही ढंग से संग्रहीत हुआ है `Trusted credentials` -> `USER` पर जाकर। +- पुष्टि करें कि प्रमाणपत्र सही तरीके से संग्रहित हुआ है: `Trusted credentials` -> `USER` पर जाएँ
-2. **इसे सिस्टम द्वारा विश्वसनीय बनाएं**: मैजिक मॉड्यूल [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (एक .zip फ़ाइल) डाउनलोड करें, इसे फोन में **खींचें और छोड़ें**, फोन में **मैजिक ऐप** पर जाएं और **`Modules`** अनुभाग में, **`Install from storage`** पर क्लिक करें, `.zip` मॉड्यूल का चयन करें और एक बार स्थापित होने पर **रीबूट** करें: +2. **Make it System trusted**: Magisc मॉड्यूल [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (.zip फ़ाइल) डाउनलोड करें, उसे फोन में **drag&drop** करें, फोन में **Magics app** खोलें और **`Modules`** सेक्शन में जाएँ, **`Install from storage`** पर क्लिक करें, `.zip` मॉड्यूल चुनें और इंस्टॉल होने के बाद फोन को **reboot** करें:
-- रीबूट करने के बाद, `Trusted credentials` -> `SYSTEM` पर जाएं और जांचें कि Postswigger प्रमाणपत्र वहां है। +- रीबूट के बाद, `Trusted credentials` -> `SYSTEM` पर जाएँ और जाँच करें कि Postswigger cert वहाँ है
-## एंड्रॉइड 14 के बाद +### Magisc मॉड्यूल कैसे बनाना सीखें -हाल के एंड्रॉइड 14 रिलीज़ में, सिस्टम-विश्वसनीय प्रमाणपत्र प्राधिकरण (CA) प्रमाणपत्रों के प्रबंधन में एक महत्वपूर्ण बदलाव देखा गया है। पहले, ये प्रमाणपत्र **`/system/etc/security/cacerts/`** में housed थे, जिन्हें रूट विशेषाधिकार वाले उपयोगकर्ताओं द्वारा पहुंचा और संशोधित किया जा सकता था, जिससे सिस्टम में तुरंत आवेदन की अनुमति मिलती थी। हालाँकि, एंड्रॉइड 14 के साथ, संग्रहण स्थान को **`/apex/com.android.conscrypt/cacerts`** में स्थानांतरित कर दिया गया है, जो **`/apex`** पथ के भीतर एक निर्देशिका है, जो स्वाभाविक रूप से अपरिवर्तनीय है। +Check [https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437](https://medium.com/@justmobilesec/magisk-for-mobile-pentesting-rooting-android-devices-and-building-custom-modules-part-ii-22badc498437) -**APEX cacerts पथ** को फिर से लिखने योग्य के रूप में माउंट करने के प्रयास विफल होते हैं, क्योंकि सिस्टम ऐसी संचालन की अनुमति नहीं देता। अस्थायी फ़ाइल प्रणाली (tmpfs) के साथ निर्देशिका को अनमाउंट या ओवरले करने के प्रयास भी अपरिवर्तनीयता को नहीं रोकते; अनुप्रयोग मूल प्रमाणपत्र डेटा तक पहुंचना जारी रखते हैं चाहे फ़ाइल सिस्टम स्तर पर परिवर्तन हों या न हों। यह लचीलापन **`/apex`** माउंट के PRIVATE प्रोपेगेशन के साथ कॉन्फ़िगर होने के कारण है, यह सुनिश्चित करता है कि **`/apex`** निर्देशिका के भीतर कोई भी संशोधन अन्य प्रक्रियाओं को प्रभावित नहीं करता। +## Android 14 के बाद -एंड्रॉइड का प्रारंभिककरण `init` प्रक्रिया द्वारा होता है, जो ऑपरेटिंग सिस्टम शुरू करने पर Zygote प्रक्रिया को भी प्रारंभ करता है। यह प्रक्रिया नए माउंट नामस्थान के साथ अनुप्रयोग प्रक्रियाओं को लॉन्च करने के लिए जिम्मेदार है जिसमें एक निजी **`/apex`** माउंट शामिल है, इस प्रकार इस निर्देशिका में परिवर्तनों को अन्य प्रक्रियाओं से अलग करता है। +हाल के Android 14 रिलीज़ में system-trusted Certificate Authority (CA) प्रमाणपत्रों के हैंडलिंग में एक बड़ा बदलाव देखा गया है। पहले ये प्रमाणपत्र **`/system/etc/security/cacerts/`** में रखे जाते थे, जिन्हें root privileges वाले उपयोगकर्ता एक्सेस और मॉडिफाई कर सकते थे, जिससे ये तुरंत पूरे सिस्टम में प्रभावी होते थे। हालांकि, Android 14 में इनका स्टोरेज स्थान **`/apex/com.android.conscrypt/cacerts`** पर शिफ्ट कर दिया गया है, जो **`/apex`** पाथ के भीतर का एक डायरेक्टरी है और प्रकृतिगत रूप से immutable है। -फिर भी, उन लोगों के लिए एक समाधान है जिन्हें **`/apex`** निर्देशिका के भीतर सिस्टम-विश्वसनीय CA प्रमाणपत्रों को संशोधित करने की आवश्यकता है। इसमें PRIVATE प्रोपेगेशन को हटाने के लिए **`/apex`** को मैन्युअल रूप से फिर से माउंट करना शामिल है, जिससे इसे लिखने योग्य बनाया जा सके। प्रक्रिया में **`/apex/com.android.conscrypt`** की सामग्री को एक अन्य स्थान पर कॉपी करना, पढ़ने के लिए केवल बाधा को समाप्त करने के लिए **`/apex/com.android.conscrypt`** निर्देशिका को अनमाउंट करना, और फिर सामग्री को **`/apex`** के भीतर उनके मूल स्थान पर पुनर्स्थापित करना शामिल है। इस दृष्टिकोण के लिए प्रणाली क्रैश से बचने के लिए त्वरित कार्रवाई की आवश्यकता होती है। इन परिवर्तनों के प्रणाली-व्यापी आवेदन को सुनिश्चित करने के लिए, `system_server` को पुनरारंभ करने की सिफारिश की जाती है, जो प्रभावी रूप से सभी अनुप्रयोगों को पुनरारंभ करता है और प्रणाली को एक सुसंगत स्थिति में लाता है। +APEX cacerts path को writable के रूप में remount करने के प्रयास विफल होते हैं, क्योंकि सिस्टम ऐसे ऑपरेशन की अनुमति नहीं देता। डायरेक्टरी को unmount करने या temporary file system (tmpfs) के साथ overlay करने के प्रयास भी immutability को पार नहीं कर पाते; एप्लिकेशन फ़ाइल सिस्टम स्तर पर किए गए बदलावों के बावजूद मूल प्रमाणपत्र डेटा तक पहुँचती रहती हैं। यह लचीलापन इसलिए है क्योंकि **`/apex`** माउंट को PRIVATE propagation के साथ कॉन्फ़िगर किया गया है, जिससे **`/apex`** डायरेक्टरी के भीतर किसी भी संशोधन का अन्य प्रक्रियाओं पर प्रभाव नहीं पड़ता। + +Android की initialization में `init` प्रक्रिया शामिल होती है, जो ऑपरेटिंग सिस्टम शुरू होने पर Zygote प्रक्रिया भी शुरू करती है। यह प्रक्रिया application processes को एक नए mount namespace के साथ लॉन्च करने के लिए जिम्मेदार है, जिसमें एक private **`/apex`** mount शामिल होता है, इस तरह इस डायरेक्टरी में किए गए परिवर्तन अन्य प्रक्रियाओं से अलग हो जाते हैं। + +फिर भी, जिन लोगों को **`/apex`** डायरेक्टरी के भीतर system-trusted CA प्रमाणपत्रों में संशोधन करना आवश्यक है उनके लिए एक workaround मौजूद है। इसमें PRIVATE propagation हटाने के लिए मैन्युअली **`/apex`** को remount करना शामिल है, जिससे यह writable बन जाता है। प्रक्रिया में **`/apex/com.android.conscrypt`** की सामग्री को किसी अन्य स्थान पर कॉपी करना, **`/apex/com.android.conscrypt`** डायरेक्टरी को unmount करना ताकि read-only बाधा हटे, और फिर सामग्री को उसके मूल स्थान पर वापस restore करना शामिल है। इस तरीके के लिए तेज़ कार्रवाई की आवश्यकता होती है ताकि system crashes से बचा जा सके। इन परिवर्तनों को सिस्टम-व्यापी प्रभावी करने के लिए `system_server` को restart करने की सलाह दी जाती है, जो प्रभावी रूप से सभी एप्लिकेशन को restart करता है और सिस्टम को एक consistent स्थिति में लाता है। ```bash # Create a separate temp directory, to hold the current certificates # Otherwise, when we add the mount we can't read the current certs anymore. @@ -115,28 +131,28 @@ wait # Launched in parallel - wait for completion here echo "System certificate injected" ``` -### NSEnter के माध्यम से बाइंड-माउंटिंग +### Bind-mounting through NSEnter -1. **एक लिखने योग्य निर्देशिका सेट करना**: प्रारंभ में, एक लिखने योग्य निर्देशिका स्थापित की जाती है जो मौजूदा गैर-APEX सिस्टम प्रमाणपत्र निर्देशिका के ऊपर `tmpfs` को माउंट करके बनाई जाती है। यह निम्नलिखित कमांड के साथ किया जाता है: +1. **Setting Up a Writable Directory**: शुरुआत में, मौजूदा `non-APEX` system certificate डायरेक्टरी के ऊपर `tmpfs` माउंट करके एक लिखने योग्य डायरेक्टरी बनाई जाती है। इसे निम्नलिखित कमांड से किया जाता है: ```bash mount -t tmpfs tmpfs /system/etc/security/cacerts ``` -2. **CA प्रमाणपत्रों की तैयारी**: लिखने योग्य निर्देशिका की सेटअप के बाद, CA प्रमाणपत्रों को इस निर्देशिका में कॉपी किया जाना चाहिए। इसमें `/apex/com.android.conscrypt/cacerts/` से डिफ़ॉल्ट प्रमाणपत्रों को कॉपी करना शामिल हो सकता है। इन प्रमाणपत्रों की अनुमतियों और SELinux लेबल को उचित रूप से समायोजित करना आवश्यक है। -3. **Zygote के लिए बाइंड माउंटिंग**: `nsenter` का उपयोग करते हुए, कोई Zygote के माउंट नामस्थान में प्रवेश करता है। Zygote, जो Android अनुप्रयोगों को लॉन्च करने के लिए जिम्मेदार प्रक्रिया है, इस कदम की आवश्यकता होती है ताकि सभी अनुप्रयोग जो आगे शुरू किए जाते हैं, नए कॉन्फ़िगर किए गए CA प्रमाणपत्रों का उपयोग करें। उपयोग की जाने वाली कमांड है: +2. **Preparing CA Certificates**: लिखने योग्य निर्देशिका सेट अप करने के बाद, जिन CA प्रमाणपत्रों का उपयोग करना हो उन्हें इस निर्देशिका में कॉपी करना चाहिए। इसमें संभवतः `/apex/com.android.conscrypt/cacerts/` से डिफ़ॉल्ट प्रमाणपत्रों को कॉपी करना शामिल होगा। इन प्रमाणपत्रों की permissions और SELinux labels को उपयुक्त रूप से समायोजित करना आवश्यक है। +3. **Bind Mounting for Zygote**: `nsenter` का उपयोग करते हुए, कोई Zygote के mount namespace में प्रवेश करता है। Zygote, जो Android applications लॉन्च करने के लिए जिम्मेदार प्रक्रिया है, इस कदम की आवश्यकता इसलिए होती है ताकि आगे से शुरू होने वाली सभी एप्लिकेशन नए कॉन्फ़िगर किए गए CA प्रमाणपत्रों का उपयोग करें। उपयोग किया जाने वाला कमांड है: ```bash nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts ``` -यह सुनिश्चित करता है कि हर नया ऐप जो शुरू किया जाएगा, अपडेटेड CA सर्टिफिकेट सेटअप का पालन करेगा। +यह सुनिश्चित करता है कि शुरू होने वाला हर नया ऐप अपडेट किए गए CA प्रमाणपत्र सेटअप का पालन करेगा। -4. **चल रहे ऐप्स पर परिवर्तन लागू करना**: पहले से चल रहे अनुप्रयोगों पर परिवर्तन लागू करने के लिए, `nsenter` का फिर से उपयोग किया जाता है ताकि प्रत्येक ऐप के नामस्थान में व्यक्तिगत रूप से प्रवेश किया जा सके और एक समान बाइंड माउंट किया जा सके। आवश्यक कमांड है: +4. **चल रहे ऐप्स पर परिवर्तन लागू करना**: पहले से चल रहे applications पर परिवर्तन लागू करने के लिए, `nsenter` का फिर से उपयोग प्रत्येक ऐप के namespace में अलग-अलग प्रवेश करने और समान bind mount करने के लिए किया जाता है। आवश्यक कमांड है: ```bash nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts ``` -5. **वैकल्पिक दृष्टिकोण - सॉफ्ट रीबूट**: एक वैकल्पिक विधि `init` प्रक्रिया (PID 1) पर बाइंड माउंट करने के बाद `stop && start` कमांड के साथ ऑपरेटिंग सिस्टम का सॉफ्ट रीबूट करना शामिल है। यह दृष्टिकोण सभी नेमस्पेस में परिवर्तनों को फैलाएगा, प्रत्येक चल रहे ऐप को व्यक्तिगत रूप से संबोधित करने की आवश्यकता से बचते हुए। हालांकि, इस विधि को आमतौर पर रीबूट की असुविधा के कारण कम पसंद किया जाता है। +5. **वैकल्पिक तरीका - Soft Reboot**: एक वैकल्पिक विधि में `init` process (PID 1) पर bind mount करना शामिल है, और उसके बाद ऑपरेटिंग सिस्टम को `stop && start` कमांड से soft reboot करना। यह तरीका सभी namespaces में बदलाव फैलाएगा, जिससे प्रत्येक चल रही app को अलग से संबोधित करने की आवश्यकता नहीं पड़ेगी। हालांकि, इस विधि को आमतौर पर कम पसंद किया जाता है क्योंकि reboot करने में असुविधा होती है। -## संदर्भ - -- [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/) +## References +- [Android 14: Install a system CA certificate on a rooted device](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/) +- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools) {{#include ../../banners/hacktricks-training.md}}