hacktricks/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md

11 KiB
Raw Blame History

डीबग करने योग्य एप्लिकेशन का शोधन

htARTE (HackTricks AWS Red Team Expert) के साथ जीरो से हीरो तक AWS हैकिंग सीखें!

HackTricks का समर्थन करने के अन्य तरीके:

रूट और डीबग की जांच को छलकरना

इस पोस्ट का यह खंड https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0 से एक सारांश है।

एंड्रॉइड एप्लिकेशन को डीबग करने और जांच को छलकरने के चरण

ऐप को डीबग करना

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 डालें ताकि डीबगिंग मोड सक्षम हो।
  • संशोधित एप्लिकेशन को पुनः कॉम्पाइल, साइन करें, और zipalign करें।
  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 में ब्रेकपॉइंट रखें।

जांच को छलकरना

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

डीबग की जांच के लिए:

  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 (जावा डीबग वायर प्रोटोकॉल) एक अद्वितीय पोर्ट को उजागर करके वीएम में चल रहे एप्लिकेशन की डीबगिंग की अनुमति देता है।
  • दूरस्थ डीबगिंग के लिए पोर्ट फॉरवार्डिंग आवश्यक था, जिसके बाद लक्षित एप्लिकेशन को जेडीबी से जोड़ने की आवश्यकता थी।

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

  • छलांग को सेट करके और एप्लिकेशन के फ्लो को नियंत्रित करके छलांग किया गया था।
  • classes और methods <class_name> जैसे कमांड्स का उपयोग किया गया था ताकि एप्लिकेशन की संरचना का पता चल सके।
  • onClick विधि पर एक ब्रेकपॉइंट सेट किया गया था, और इसका नियंत्रण किया गया था।
  • locals, next, और set कमांड्स का उपयोग किया गया था ताकि स्थानीय चरों की जांच और संशोधन किया जा सके, विशेष रूप से "Try Again" संदेश को "Hacked" में बदलने के लिए।
  • संशो