
🤖 एक CLI एप्लिकेशन जो स्वचालित रूप से Android APK फ़ाइलों को HTTPS निरीक्षण के लिए तैयार करता है
एक CLI एप्लिकेशन जो HTTPS निरीक्षण के लिए स्वचालित रूप से Android APK फ़ाइलें तैयार करता है
प्रॉक्सी का उपयोग करके मोबाइल ऐप के HTTPS ट्रैफ़िक का निरीक्षण करना शायद यह समझने का सबसे आसान तरीका है कि यह कैसे काम करता है। हालाँकि, Android 7 में शुरू किए गए नेटवर्क सुरक्षा कॉन्फ़िगरेशन और सर्टिफिकेट पिनिंग का उपयोग करके MITM हमलों को रोकने की कोशिश करने वाले ऐप डेवलपर्स के साथ, किसी ऐप को HTTPS प्रॉक्सी के साथ काम करना काफी कठिन हो गया है।
apk-mitm पूरी प्रक्रिया को स्वचालित करता है। आपको बस इसे एक APK फ़ाइल देनी होगी और apk-mitm यह करेगा:
आप apk-mitm का उपयोग Android App Bundle का उपयोग करके ऐप्स को पैच करने के लिए भी कर सकते हैं और आपके फ़ोन को रूट करना आवश्यक नहीं है।
सर्टिफिकेट पिनिंग जैसी सुरक्षा सुविधाओं को दरकिनार करने के लिए किसी ऐप के सामान्य व्यवहार को संशोधित करने के लिए या तो ऐप के स्रोत कोड को चलाने से पहले संशोधित करना होगा या फ़ंक्शन कॉल को इंटरसेप्ट करने के लिए ऐप को चलने के दौरान "हुक" करना होगा।
apk-mitm वर्तमान में ऐप के कोड को संशोधित करने का पूर्व दृष्टिकोण अपना रहा है, पहले Apktool का उपयोग करके ऐप को "डिसअसेंबल" करना, कई फ़ाइलों में बदलाव करना, और फिर इसे वापस एक साथ असेंबल करना (फिर से Apktool का उपयोग करके)।
इस दृष्टिकोण का लाभ यह है कि इसमें रूट किए गए डिवाइस की आवश्यकता नहीं है, लेकिन इसके कई नुकसान भी हैं। सबसे बड़ी समस्या यह है कि ऐप्स वास्तव में डिसअसेंबल किए जाने के लिए नहीं बनाए गए हैं। Apktool वैसे भी इसे प्राप्त करने का प्रयास करता है, लेकिन विशेष रूप से बड़े और जटिल ऐप्स के साथ, इसे अक्सर समस्याओं का सामना करना पड़ता है।
इस दृष्टिकोण के साथ एक और मुद्दा यह है कि कुछ सर्टिफिकेट पिनिंग विधियाँ, जैसे कि नेटिव बाइनरी के भीतर किए गए चेक (जैसा कि Flutter जैसे फ्रेमवर्क के मामले में है), को दरकिनार करना बहुत कठिन या असंभव है। इस कारण से, अधिक पेचीदा ऐप्स के लिए अन्य दृष्टिकोणों को आज़माना फायदेमंद हो सकता है।
विशेष रूप से, मैं mitmproxy के android-unpinner प्रोजेक्ट और HTTP Toolkit द्वारा अंतर्निहित frida-interception-and-unpinning स्क्रिप्ट्स को उजागर करना चाहूंगा। उनका दृष्टिकोण Frida का उपयोग करके रनटाइम पर पैच लागू करता है, जो बहुत अधिक शक्तिशाली है, लेकिन इसका अर्थ यह भी है कि इसका उपयोग रूट किए गए डिवाइस के बिना या तो नहीं किया जा सकता या अधिक कठिन है।
यदि आपके पास Node.js (14+) और Java (8+) का अद्यतित संस्करण है, तो आप निम्न चलाकर apk-mitm स्थापित कर सकते हैं:
npm install -g apk-mitm
एक बार स्थापित होने के बाद, आप किसी ऐप को पैच करने के लिए यह कमांड चला सकते हैं:
apk-mitm <path-to-apk>
example.apk नामक APK फ़ाइल को पैच करना कुछ इस तरह दिख सकता है:
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done! Patched APK: ./example-patched.apk
अब आप example-patched.apk फ़ाइल को अपने Android डिवाइस पर इंस्टॉल कर सकते हैं और ऐप के ट्रैफ़िक को देखने के लिए Charles या mitmproxy जैसे प्रॉक्सी का उपयोग कर सकते हैं।
आप apk-mitm के साथ Android App Bundle का उपयोग करके ऐप्स को पैच भी कर सकते हैं, इसे एक *.xapk फ़ाइल (उदाहरण के लिए APKPure से) या *.apks फ़ाइल (जिसे आप SAI का उपयोग करके स्वयं निर्यात कर सकते हैं) प्रदान करके। यदि आप Linux पर ऐसा कर रहे हैं, तो सुनिश्चित करें कि zip और unzip दोनों स्थापित हैं।
कभी-कभी किसी ऐप को काम करने के लिए आपको उसमें मैन्युअल बदलाव करने की आवश्यकता होगी। ऐसे मामलों में --wait विकल्प वही है जिसकी आपको आवश्यकता है। इसे सक्षम करने से apk-mitm ऐप को पुनः एन्कोड करने से पहले प्रतीक्षा करेगा, जिससे आप अस्थायी निर्देशिका में फ़ाइलों में बदलाव कर सकेंगे।
यदि आप APK में विभिन्न परिवर्तनों के साथ प्रयोग करना चाहते हैं, तो --wait का उपयोग करना शायद सबसे सुविधाजनक विकल्प नहीं है क्योंकि यह आपको हर बार इसका उपयोग करने पर शुरू से शुरू करने के लिए मजबूर करता है। इस मामले में आप APKLab पर एक नज़र डालना चाह सकते हैं। यह VS Code के ऊपर बनाया गया एक Android रिवर्स इंजीनियरिंग वर्कबेंच है जो apk-mitm समर्थन के साथ आता है और आपको बहुत तेज़ी से पुनरावृत्ति करने की अनुमति देनी चाहिए।
कुछ उपकरणों (जैसे Android TV) पर आप सिस्टम के रूट प्रमाणपत्रों में एक नया प्रमाणपत्र जोड़ने में सक्षम नहीं हो सकते हैं। उन मामलों में आप अभी भी अपने प्रॉक्सी के प्रमाणपत्र को सीधे ऐप के नेटवर्क सुरक्षा कॉन्फ़िगरेशन में जोड़ सकते हैं क्योंकि यह किसी भी डिवाइस पर काम करेगा। आप इसे apk-mitm को अपने प्रॉक्सी द्वारा उपयोग किए जाने वाले प्रमाणपत्र (.pem या .der फ़ाइल) के पथ पर सेट --certificate फ़्लैग के साथ चलाकर पूरा कर सकते हैं।
यदि ऐप Google Maps का उपयोग करता है और पैच करने के बाद मैप टूट गया है, तो ऐप की API कुंजी संभवतः डेवलपर के प्रमाणपत्र तक सीमित है। आपको बिना प्रतिबंधों के अपनी स्वयं की API कुंजी बनानी होगी और ऐप की AndroidManifest.xml फ़ाइल में com.google.android.geo.API_KEY मान को बदलने में सक्षम होने के लिए apk-mitm को --wait विकल्प के साथ चलाना होगा।
यदि डीकोडिंग या एन्कोडिंग के दौरान apk-mitm क्रैश हो जाता है, तो समस्या संभवतः Apktool से संबंधित है। संभावित समाधान खोजने के लिए GitHub पर उनके मुद्दों की जाँच करें। यदि आपको कोई ऐसा Apktool संस्करण मिलता है जो समस्या से प्रभावित नहीं है, तो आप --apktool विकल्प के माध्यम से इसकी JAR फ़ाइल का पथ निर्दिष्ट करके apk-mitm को इसका उपयोग करने का निर्देश दे सकते हैं।
MIT © Niklas Higi