Exploiting a debuggeable application

Exploiting a debuggeable application

Support HackTricks

रूट और डिबग करने योग्य जांचों को बायपास करना

This section of the post is a summary from the post https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

Android ऐप को डिबग करने योग्य बनाने के लिए कदम

ऐप को डिबग करने योग्य बनाना

Content based on https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

  1. APK को डिकंपाइल करें:

  • APK को डिकंपाइल करने के लिए APK-GUI टूल का उपयोग करें।

  • android-manifest फ़ाइल में, डिबगिंग मोड सक्षम करने के लिए android:debuggable=true डालें।

  • संशोधित एप्लिकेशन को फिर से संकलित करें, साइन करें और ज़िपलाइन करें।

  1. संशोधित एप्लिकेशन स्थापित करें:

  • कमांड का उपयोग करें: adb install <application_name>

  1. पैकेज नाम प्राप्त करें:

  • तीसरे पक्ष के अनुप्रयोगों की सूची बनाने और पैकेज नाम खोजने के लिए adb shell pm list packages –3 चलाएँ।

  1. ऐप को डिबगर कनेक्शन की प्रतीक्षा करने के लिए सेट करें:

  • कमांड: adb shell am setup-debug-app –w <package_name>

  • नोट: यह कमांड हर बार एप्लिकेशन शुरू करने से पहले चलानी चाहिए ताकि यह डिबगर की प्रतीक्षा करे।

  • स्थिरता के लिए, adb shell am setup-debug-app –w -–persistent <package_name> का उपयोग करें।

  • सभी फ्लैग हटाने के लिए, adb shell am clear-debug-app <package_name> का उपयोग करें।

  1. Android Studio में डिबगिंग के लिए तैयार करें:

  • Android Studio में File -> Open Profile or APK पर जाएँ।

  • पुनः संकलित APK खोलें।

  1. मुख्य जावा फ़ाइलों में ब्रेकपॉइंट सेट करें:

  • MainActivity.java (विशेष रूप से onCreate विधि में), b.java, और ContextWrapper.java में ब्रेकपॉइंट रखें।

जांचों को बायपास करना

ऐपlication, कुछ बिंदुओं पर, यह सत्यापित करेगा कि यह डिबग करने योग्य है और यह रूटेड डिवाइस को इंगित करने वाले बाइनरी की भी जांच करेगा। डिबगर का उपयोग ऐप जानकारी को संशोधित करने, डिबग करने योग्य बिट को अनसेट करने और खोजे गए बाइनरी के नामों को बदलने के लिए किया जा सकता है ताकि इन जांचों को बायपास किया जा सके।

डिबग करने योग्य जांच के लिए:

  1. फ्लैग सेटिंग्स को संशोधित करें:

  • डिबगर कंसोल के वेरिएबल सेक्शन में जाएँ: this mLoadedAPK -> mApplicationInfo -> flags = 814267974

  • नोट: flags = 814267974 का बाइनरी प्रतिनिधित्व 11000011100111011110 है, जो इंगित करता है कि "Flag_debuggable" सक्रिय है।

https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png

ये कदम सामूहिक रूप से सुनिश्चित करते हैं कि एप्लिकेशन को डिबग किया जा सके और कि कुछ सुरक्षा जांचों को डिबगर का उपयोग करके बायपास किया जा सके, जिससे एप्लिकेशन के व्यवहार का अधिक गहन विश्लेषण या संशोधन किया जा सके।

चरण 2 में फ्लैग मान को 814267972 में बदलना शामिल है, जो बाइनरी में 110000101101000000100010100 के रूप में दर्शाया गया है।

एक भेद्यता का शोषण करना

एक कमजोर एप्लिकेशन का प्रदर्शन किया गया जिसमें एक बटन और एक टेक्स्टव्यू था। प्रारंभ में, एप्लिकेशन "Crack Me" प्रदर्शित करता है। लक्ष्य रनटाइम पर "Try Again" से "Hacked" संदेश को बदलना है, बिना स्रोत कोड को संशोधित किए।

भेद्यता की जांच करना

  • एप्लिकेशन को apktool का उपयोग करके डिकंपाइल किया गया ताकि AndroidManifest.xml फ़ाइल तक पहुँच प्राप्त की जा सके।

  • AndroidManifest.xml में android_debuggable="true" की उपस्थिति यह संकेत करती है कि एप्लिकेशन डिबग करने योग्य है और शोषण के लिए संवेदनशील है।

  • यह ध्यान देने योग्य है कि apktool का उपयोग केवल डिबग करने योग्य स्थिति की जांच के लिए किया जाता है बिना किसी कोड को बदले।

सेटअप तैयार करना

  • प्रक्रिया में एक एमुलेटर शुरू करना, कमजोर एप्लिकेशन स्थापित करना, और adb jdwp का उपयोग करके सुनने वाले डेलविक वीएम पोर्ट की पहचान करना शामिल था।

  • JDWP (Java Debug Wire Protocol) एक वीएम में चल रहे एप्लिकेशन को डिबग करने की अनुमति देता है, एक अद्वितीय पोर्ट को उजागर करके।

  • दूरस्थ डिबगिंग के लिए पोर्ट फॉरवर्डिंग आवश्यक थी, इसके बाद JDB को लक्षित एप्लिकेशन से जोड़ा गया।

रनटाइम पर कोड इंजेक्ट करना

  • शोषण ब्रेकपॉइंट सेट करके और एप्लिकेशन के प्रवाह को नियंत्रित करके किया गया।

  • एप्लिकेशन की संरचना को उजागर करने के लिए classes और methods <class_name> जैसे कमांड का उपयोग किया गया।

  • onClick विधि पर एक ब्रेकपॉइंट सेट किया गया, और इसके निष्पादन को नियंत्रित किया गया।

  • स्थानीय वेरिएबल्स का निरीक्षण और संशोधन करने के लिए locals, next, और set कमांड का उपयोग किया गया, विशेष रूप से "Try Again" संदेश को "Hacked" में बदलने के लिए।

  • संशोधित कोड को run कमांड का उपयोग करके निष्पादित किया गया, सफलतापूर्वक एप्लिकेशन के आउटपुट को वास्तविक समय में बदल दिया गया।

इस उदाहरण ने दिखाया कि कैसे एक डिबग करने योग्य एप्लिकेशन के व्यवहार को हेरफेर किया जा सकता है, एप्लिकेशन के संदर्भ में डिवाइस पर शेल एक्सेस प्राप्त करने जैसे अधिक जटिल शोषण की संभावनाओं को उजागर किया।

References

Support HackTricks

Last updated