
Frida स्क्रिप्ट्स जो मोबाइल एप्लिकेशन को रनटाइम पर पुनर्लेखित करती हैं ताकि सभी HTTPS ट्रैफ़िक को सीधे MitM किया जा सके।
HTTP Toolkit का हिस्सा: HTTP(S) बनाने, परीक्षण करने और डीबग करने के लिए शक्तिशाली उपकरण
इस रिपॉजिटरी में Frida स्क्रिप्ट्स हैं जिन्हें मोबाइल डिवाइसों पर पूरी तरह से स्वचालित HTTPS MitM इंटरसेप्शन के लिए आवश्यक सब कुछ करने के लिए डिज़ाइन किया गया है।
स्क्रिप्ट्स का यह सेट एक साथ उपयोग किया जा सकता है, Android और iOS पर HTTP(S) ट्रैफ़िक की MitM इंटरसेप्शन के लिए इंटरसेप्शन संभालने, सर्टिफिकेट ट्रस्ट प्रबंधित करने और सर्टिफिकेट पिनिंग व ट्रांसपेरेंसी जाँच को अक्षम करने हेतु, या इन्हें केवल विशिष्ट सुविधाओं को हुक करने के लिए स्वतंत्र रूप से उपयोग और ट्वीक किया जा सकता है।
स्क्रिप्ट्स स्वचालित रूप से निम्नलिखित संभाल सकती हैं:
-----BEGIN CERTIFICATE----- से शुरू होना चाहिए। आप इसे टेक्स्ट एडिटर में खोलकर देख सकते हैं और यह सामग्री निकाल सकते हैं।config.js खोलें, और ये विवरण जोड़ें:
CERT_PEM: आपका CA सर्टिफिकेट PEM फॉर्मेट में।PROXY_PORT: प्रॉक्सी का पोर्टPROXY_HOST: आपके डिवाइस के दृष्टिकोण से आपके प्रॉक्सी का पता (या ADB के माध्यम से पोर्ट फॉरवर्ड करने के लिए adb reverse tcp:$PORT tcp:$PORT उपयोग करें, और होस्ट के रूप में 127.0.0.1 उपयोग करें)frida-server डाउनलोड करें, इसे निकालें, इसे अपने डिवाइस पर adb push करें, और फिर इसे निम्नलिखित 4 कमांड्स के साथ चलाएँ: , , , ।-----BEGIN CERTIFICATE----- से शुरू होना चाहिए। आप इसे टेक्स्ट एडिटर में खोलकर देख सकते हैं और यह सामग्री निकाल सकते हैं।config.js खोलें, और ये विवरण जोड़ें:
CERT_PEM: आपका CA सर्टिफिकेट PEM फॉर्मेट में।PROXY_PORT: प्रॉक्सी का पोर्टPROXY_HOST: आपके डिवाइस के दृष्टिकोण से आपके प्रॉक्सी का पताhttps://build.frida.re को पैकेज स्रोत के रूप में उपयोग करके उपलब्ध है।frida-ps -Uai चला सकते हैं कि यह सही ढंग से काम कर रहा है।frida-ps -Uai के माध्यम से जिस ऐप में आपकी रुचि है उसका id खोजें (त्वरित परीक्षण के लिए, github.com/httptoolkit/ios-ssl-pinning-demo उपयोग करने का प्रयास करें - id है)ऊपर दिए गए कमांड सभी प्रासंगिक स्क्रिप्ट्स का उपयोग करते हैं, लेकिन आप आम तौर पर अपनी पसंद का कोई भी सबसेट उपयोग कर सकते हैं, हालाँकि लगभग सभी मामलों में आप config.js को पहली स्क्रिप्ट के रूप में शामिल करना चाहेंगे (यह कुछ वेरिएबल्स को परिभाषित करता है जिनका उपयोग अन्य स्क्रिप्ट्स द्वारा किया जाता है)।
उदाहरण के लिए, Android पर केवल अनपिनिंग करने के लिए, जब प्रॉक्सी और सर्टिफिकेट कॉन्फ़िगरेशन कहीं और संभाला जा रहा हो और बिना ऑब्सफस्केशन फॉलबैक के, आप केवल यह चला सकते हैं:
frida -U \
-l ./config.js \
-l ./android/android-certificate-unpinning.js
-f $PACKAGE_ID
प्रत्येक स्क्रिप्ट में शीर्ष पर एक बड़े टिप्पणी अनुभाग में यह क्या करती है और कैसे काम करती है, इसका विस्तृत दस्तावेज़ीकरण शामिल है। स्क्रिप्ट्स हैं:
config.js
यह अन्य स्क्रिप्ट्स द्वारा उपयोग किए जाने वाले वेरिएबल्स को परिभाषित करता है:
CERT_PEM - भरोसा करने के लिए अतिरिक्त CA सर्टिफिकेट, PEM फॉर्मेट मेंPROXY_HOST - उपयोग करने के लिए प्रॉक्सी सर्वर का IP पता (IPv4) (केवल अनपिनिंग करने पर आवश्यक नहीं)PROXY_PORT - उपयोग करने के लिए प्रॉक्सी सर्वर का पोर्ट (केवल अनपिनिंग करने पर आवश्यक नहीं)DEBUG_MODE - डिफ़ॉल्ट रूप से false है, लेकिन इसे true में बदलने से बहुत सारा अतिरिक्त आउटपुट सक्षम होगा जो किसी भी समस्या के डीबगिंग और रिवर्स इंजीनियरिंग के लिए उपयोगी हो सकता है।BLOCK_HTTP3 - डिफ़ॉल्ट रूप से true है, जो पोर्ट 443 पर सभी UDP कनेक्शनों को छोड़कर HTTP/3 को ब्लॉक करता है।इसे कमांड लाइन पर किसी भी अन्य स्क्रिप्ट्स से पहले सूचीबद्ध किया जाना चाहिए।
native-connect-hook.js
सभी नेटवर्क ट्रैफ़िक को सीधे कैप्चर करता है, सभी कनेक्शनों को कॉन्फ़िगर किए गए प्रॉक्सी होस्ट और पोर्ट पर रूट करता है।
यह एक निम्न-स्तरीय हुक है जो सभी नेटवर्क कनेक्शनों पर लागू होता है। यह सुनिश्चित करता है कि सभी कनेक्शन जबरन लक्ष्य प्रॉक्सी सर्वर पर पुनर्निर्देशित हों, यहाँ तक कि वे भी जो प्रॉक्सी सेटिंग्स को अनदेखा करते हैं या अन्य रॉ सॉकेट कनेक्शन बनाते हैं, और सक्षम होने पर HTTP/3 कनेक्शनों को भी ब्लॉक करता है।
ये स्क्रिप्ट्स एक व्यापक HTTP Toolkit परियोजना का हिस्सा हैं, जिसे NGI Zero Entrust Fund के माध्यम से वित्त पोषित किया गया है, जिसे NLnet द्वारा यूरोपीय आयोग के Next Generation Internet कार्यक्रम के वित्तीय समर्थन के साथ स्थापित किया गया है। NLnet परियोजना पृष्ठ पर और अधिक जानें।
adb shellsuchmod +x /.../frida-server/.../frida-serveradb devices का उपयोग करके)। ध्यान दें कि Frida केवल रूट के रूप में डिवाइस पर चलेगा, जो ऊपर दिए गए उदाहरण में su प्रदान करता है, जब रूटेड डिवाइस पर चलाया जाता है। su या समान चलाने के बाद यह जाँचने के लिए कि आप रूट हैं, शेल में whoami चलाने पर root प्रिंट होता है यह देखें।tech.httptoolkit.pinning_demo है)config.js से शुरू करते हुए)। कौन सी स्क्रिप्ट्स उपयोग करनी हैं यह आप पर निर्भर है, लेकिन Android के लिए शुरू करने के लिए एक अच्छा कमांड यह है:
frida -U \
-l ./config.js \
-l ./native-connect-hook.js \
-l ./native-tls-hook.js \
-l ./android/android-proxy-override.js \
-l ./android/android-system-certificate-injection.js \
-l ./android/android-certificate-unpinning.js \
-l ./android/android-certificate-unpinning-fallback.js \
-l ./android/android-disable-root-detection.js \
-f $PACKAGE_ID
com.httptoolkit.ios-pinning-democonfig.js से शुरू करते हुए)। कौन सी स्क्रिप्ट्स उपयोग करनी हैं यह आप पर निर्भर है, लेकिन iOS के लिए शुरू करने के लिए एक अच्छा कमांड यह है:
frida -U \
-l ./config.js \
-l ./ios/ios-connect-hook.js \
-l ./ios/ios-disable-detection.js \
-l ./native-tls-hook.js \
-l ./native-connect-hook.js \
-f $APP_ID
यह हुक libc पर लागू होता है, और Android, Linux, iOS, और कई अन्य संबंधित वातावरणों के लिए काम करता है।
native-tls-hook.js
BoringSSL-आधारित लाइब्रेरीज़ के लिए सभी TLS सत्यापन को संशोधित करता है ताकि आपके कॉन्फ़िगर किए गए CA सर्टिफिकेट पर भरोसा किया जा सके।
विशेष रूप से, यह iOS पर अंतर्निहित BoringSSL API को हुक करता है, जो iOS द्वारा TLS सर्टिफिकेट सत्यापन को संभालने का सामान्य तरीका है (इसलिए यह लगभग सभी iOS HTTPS इंटरसेप्शन के लिए पर्याप्त है) लेकिन इसका उपयोग iOS और Android दोनों पर कुछ अन्य मामलों में भी किया जाता है।
यह प्रभावी रूप से सभी सर्टिफिकेटों के लिए आपके CA पर भरोसा करता है, और आपके CA के लिए सभी सर्टिफिकेट पिनिंग, सर्टिफिकेट ट्रांसपेरेंसी और अन्य प्रतिबंधों को अक्षम करता है। ध्यान दें कि अन्य कई Frida हुकों के विपरीत यह TLS सत्यापन को पूरी तरह से नहीं अक्षम करता है (जो बहुत असुरक्षित है)। इसके बजाय, यह सत्यापन को ओवरराइड करता है ताकि यह सुनिश्चित किया जा सके कि आपके विशिष्ट CA सर्टिफिकेट का उपयोग करने वाले सभी कनेक्शनों पर भरोसा किया जाए, बिना तीसरे पक्ष द्वारा इंटरसेप्शन की अनुमति देने के लिए सत्यापन को शिथिल किए।
android/
android-proxy-override.js
लक्षित ऐप के लिए Android प्रॉक्सी सेटिंग्स को ओवरराइड करता है, यह सुनिश्चित करता है कि सभी अच्छे व्यवहार वाला ट्रैफ़िक प्रॉक्सी सर्वर के माध्यम से पुनर्निर्देशित और इंटरसेप्ट किया जाए।
android-system-certificate-injection.js
मूल Android API को संशोधित करता है ताकि यह सुनिश्चित किया जा सके कि सभी ट्रस्ट स्टोर डिफ़ॉल्ट रूप से आपके अतिरिक्त CA सर्टिफिकेट पर भरोसा करें, जिससे एन्क्रिप्टेड TLS ट्रैफ़िक को कैप्चर किया जा सके।
android-certificate-unpinning.js
अतिरिक्त सर्टिफिकेट प्रतिबंधों के लिए कई सामान्य ज्ञात तकनीकों को संशोधित या अक्षम करता है, जिसमें सर्टिफिकेट पिनिंग (सिस्टम पर भरोसा किए गए सभी सर्टिफिकेटों के बजाय केवल मान्यता प्राप्त सर्टिफिकेटों का एक छोटा सेट स्वीकार करना) और सर्टिफिकेट ट्रांसपेरेंसी (यह सत्यापित करना कि उपयोग किए गए सभी सर्टिफिकेट सार्वजनिक सर्टिफिकेट लॉग में पंजीकृत हैं) शामिल हैं।
android-certificate-unpinning-fallback.js
अनहैंडल किए गए सर्टिफिकेट सत्यापन विफलताओं का पता लगाता है, और अज्ञात/अपरिचित मामलों को स्वतः-जनित फॉलबैक पैच के साथ संभालने का प्रयास करता है। यह अधिक प्रयोगात्मक है और थोड़ा अप्रत्याशित हो सकता है, लेकिन ऑब्सफस्केटेड मामलों के लिए बहुत सहायक है, और सामान्य रूप से यह या तो पिनिंग समस्याओं को ठीक करेगा (एक प्रारंभिक विफलता के बाद) या कम से कम Frida लॉग आउटपुट में आगे रिवर्स इंजीनियरिंग के लिए कोड को उजागर करेगा। यह स्क्रिप्ट android-certificate-unpinning.js के साथ कुछ तर्क साझा करती है, और इसे अकेले उपयोग नहीं किया जा सकता है - यदि आप इस स्क्रिप्ट का उपयोग करना चाहते हैं, तो आपको गैर-फॉलबैक अनपिनिंग स्क्रिप्ट भी शामिल करनी होगी।
android-disable-root-detection.js
रूटेड Android डिवाइसों का पता लगाने से रोकने के लिए नेटिव और Java परतों में सामान्य root डिटेक्शन जाँचों को अक्षम करता है।
यह स्क्रिप्ट ज्ञात root संकेतकों (जैसे su, Magisk, और संबंधित ऐप्स) के लिए फ़ाइल सिस्टम एक्सेस, शेल कमांड्स और पैकेज लुकअप को इंटरसेप्ट करता है, और उत्पादन वातावरण का अनुकरण करने के लिए प्रमुख सिस्टम प्रॉपर्टी (ro.secure, ro.debuggable, आदि) को फेक करता है।
यह फ़ाइल अस्तित्व जाँच और शेल कमांड निष्पादन जैसे संदिग्ध व्यवहार को ब्लॉक करता है, जिससे मानक और उन्नत दोनों root जाँचों का उपयोग करने वाले ऐप्स में पता लगाने से बचने में मदद मिलती है।
android-disable-flutter-certificate-pinning.js
सुनिश्चित करता है कि Flutter-आधारित एप्लिकेशन (जो आम तौर पर सिस्टम सर्टिफिकेट कॉन्फ़िगरेशन को अनदेखा करते हैं) आपके CA सर्टिफिकेट पर भरोसा करें, यहाँ तक कि स्पष्ट सर्टिफिकेट पिनिंग के अधिकांश मामलों में भी। यह स्क्रिप्ट अभी के लिए प्रयोगात्मक बनी हुई है।
ios/
ios-connect-hook.js
सभी iOS नेटवर्क ट्रैफ़िक को सीधे कैप्चर करता है, सभी कनेक्शनों को कॉन्फ़िगर किए गए प्रॉक्सी होस्ट और पोर्ट पर रूट करता है।
यह एक निम्न-स्तरीय हुक है जो सभी नेटवर्क कनेक्शनों पर लागू होता है। यह सुनिश्चित करता है कि सभी कनेक्शन जबरन लक्ष्य प्रॉक्सी सर्वर पर पुनर्निर्देशित हों, यहाँ तक कि वे भी जो प्रॉक्सी सेटिंग्स को अनदेखा करते हैं या अन्य रॉ सॉकेट कनेक्शन बनाते हैं।
ios-disable-detection.js
JailMonkey jailbreak डिटेक्शन को अक्षम करता है।
utilities/test-ip-connectivity.js
आप शायद इसे सामान्य रूप से इंटरसेप्शन के हिस्से के रूप में उपयोग नहीं करना चाहेंगे, लेकिन यह आपके कॉन्फ़िगरेशन सेटअप के हिस्से के रूप में बहुत उपयोगी हो सकता है।
यह स्क्रिप्ट आपको संभावित IP पतों की एक सूची और एक लक्ष्य पोर्ट कॉन्फ़िगर करने की अनुमति देती है, और प्रक्रिया को प्रत्येक पते का परीक्षण करने और पहले पहुंच योग्य पते के लिए Frida क्लाइंट को एक संदेश भेजने की अनुमति देती है। यह स्वचालित कॉन्फ़िगरेशन प्रक्रियाओं के लिए उपयोगी हो सकता है, यदि आप नहीं जानते हैं कि लक्ष्य डिवाइस (आपका फ़ोन) से प्रॉक्सी सर्वर (आपका कंप्यूटर) तक पहुँचने के लिए कौन सा IP पता सबसे अच्छा है।