Exploiting a debuggeable application
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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
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" सक्रिय है।
ये कदम सामूहिक रूप से सुनिश्चित करते हैं कि एप्लिकेशन को डिबग किया जा सके और कि कुछ सुरक्षा जांचों को डिबगर का उपयोग करके बायपास किया जा सके, जिससे एप्लिकेशन के व्यवहार का अधिक गहन विश्लेषण या संशोधन किया जा सके।
चरण 2 में फ्लैग मान को 814267972 में बदलना शामिल है, जो बाइनरी में 110000101101000000100010100 के रूप में दर्शाया गया है।
एक कमजोर एप्लिकेशन का प्रदर्शन किया गया जिसमें एक बटन और एक टेक्स्टव्यू था। प्रारंभ में, एप्लिकेशन "Crack Me" प्रदर्शित करता है। लक्ष्य यह है कि "Try Again" से "Hacked" संदेश को रनटाइम पर बदला जाए, बिना स्रोत कोड को संशोधित किए।
एप्लिकेशन को apktool
का उपयोग करके डिकंपाइल किया गया ताकि AndroidManifest.xml
फ़ाइल तक पहुँच प्राप्त की जा सके।
AndroidManifest.xml में android_debuggable="true"
की उपस्थिति यह संकेत करती है कि एप्लिकेशन डिबग करने योग्य है और शोषण के लिए संवेदनशील है।
यह ध्यान देने योग्य है कि apktool
का उपयोग केवल डिबग करने योग्य स्थिति की जांच के लिए किया जाता है बिना किसी कोड को बदले।
प्रक्रिया में एक एमुलेटर शुरू करना, कमजोर एप्लिकेशन स्थापित करना, और adb jdwp
का उपयोग करके उन डलविक वीएम पोर्ट की पहचान करना शामिल था जो सुन रहे थे।
JDWP (Java Debug Wire Protocol) एक VM में चल रहे एप्लिकेशन को डिबग करने की अनुमति देता है एक अद्वितीय पोर्ट को उजागर करके।
दूरस्थ डिबगिंग के लिए पोर्ट फॉरवर्डिंग आवश्यक थी, इसके बाद JDB को लक्षित एप्लिकेशन से जोड़ा गया।
शोषण को ब्रेकपॉइंट सेट करके और एप्लिकेशन के प्रवाह को नियंत्रित करके किया गया।
एप्लिकेशन की संरचना को उजागर करने के लिए classes
और methods <class_name>
जैसे कमांड का उपयोग किया गया।
onClick
विधि पर एक ब्रेकपॉइंट सेट किया गया, और इसके निष्पादन को नियंत्रित किया गया।
स्थानीय वेरिएबल्स का निरीक्षण और संशोधन करने के लिए locals
, next
, और set
कमांड का उपयोग किया गया, विशेष रूप से "Try Again" संदेश को "Hacked" में बदलने के लिए।
संशोधित कोड को run
कमांड का उपयोग करके निष्पादित किया गया, सफलतापूर्वक एप्लिकेशन के आउटपुट को वास्तविक समय में बदल दिया गया।
इस उदाहरण ने दिखाया कि कैसे एक डिबग करने योग्य एप्लिकेशन के व्यवहार को हेरफेर किया जा सकता है, जिससे अधिक जटिल शोषण की संभावनाओं को उजागर किया जा सकता है जैसे कि एप्लिकेशन के संदर्भ में डिवाइस पर शेल एक्सेस प्राप्त करना।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)