Exploiting a debuggeable application
Exploiting a debuggeable application
रूट और डिबग करने योग्य जांचों को बायपास करना
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
APK को डिकंपाइल करें:
APK को डिकंपाइल करने के लिए APK-GUI टूल का उपयोग करें।
android-manifest फ़ाइल में, डिबगिंग मोड सक्षम करने के लिए
android:debuggable=true
डालें।संशोधित एप्लिकेशन को फिर से संकलित करें, साइन करें और ज़िपलाइन करें।
संशोधित एप्लिकेशन स्थापित करें:
कमांड का उपयोग करें:
adb install <application_name>
।
पैकेज नाम प्राप्त करें:
तीसरे पक्ष के अनुप्रयोगों की सूची बनाने और पैकेज नाम खोजने के लिए
adb shell pm list packages –3
चलाएँ।
ऐप को डिबगर कनेक्शन की प्रतीक्षा करने के लिए सेट करें:
कमांड:
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>
का उपयोग करें।
Android Studio में डिबगिंग के लिए तैयार करें:
Android Studio में File -> Open Profile or APK पर जाएँ।
पुनः संकलित APK खोलें।
मुख्य जावा फ़ाइलों में ब्रेकपॉइंट सेट करें:
MainActivity.java
(विशेष रूप सेonCreate
विधि में),b.java
, औरContextWrapper.java
में ब्रेकपॉइंट रखें।
जांचों को बायपास करना
ऐपlication, कुछ बिंदुओं पर, यह सत्यापित करेगा कि यह डिबग करने योग्य है और यह रूटेड डिवाइस को इंगित करने वाले बाइनरी की भी जांच करेगा। डिबगर का उपयोग ऐप जानकारी को संशोधित करने, डिबग करने योग्य बिट को अनसेट करने और खोजे गए बाइनरी के नामों को बदलने के लिए किया जा सकता है ताकि इन जांचों को बायपास किया जा सके।
डिबग करने योग्य जांच के लिए:
फ्लैग सेटिंग्स को संशोधित करें:
डिबगर कंसोल के वेरिएबल सेक्शन में जाएँ:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
।नोट:
flags = 814267974
का बाइनरी प्रतिनिधित्व11000011100111011110
है, जो इंगित करता है कि "Flag_debuggable" सक्रिय है।
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1400%2F1*-ckiSbWGSoc1beuxxpKbow.png&width=768&dpr=4&quality=100&sign=f015bdd2&sv=1)
ये कदम सामूहिक रूप से सुनिश्चित करते हैं कि एप्लिकेशन को डिबग किया जा सके और कि कुछ सुरक्षा जांचों को डिबगर का उपयोग करके बायपास किया जा सके, जिससे एप्लिकेशन के व्यवहार का अधिक गहन विश्लेषण या संशोधन किया जा सके।
चरण 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
Last updated