Objection ट्यूटोरियल

Reading time: 9 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

परिचय

objection - रनटाइम मोबाइल अन्वेषण

Objection एक रनटाइम मोबाइल अन्वेषण टूलकिट है, जो Frida द्वारा संचालित है। इसे बिना किसी jailbroken या rooted मोबाइल डिवाइस की आवश्यकता के, मोबाइल एप्लिकेशन और उनकी सुरक्षा स्थिति का आकलन करने में मदद करने के उद्देश्य से बनाया गया था।

नोट: यह किसी भी प्रकार का jailbreak / root bypass नहीं है। objection का उपयोग करते समय, आप लागू sandbox द्वारा लगाए गए सभी प्रतिबंधों से अभी भी सीमित रहते हैं।

सारांश

objection का लक्ष्य उपयोगकर्ता को Frida द्वारा दी जाने वाली मुख्य कार्रवाइयों को कॉल करने देना है। अन्यथा, उपयोगकर्ता को हर उस एप्लिकेशन के लिए एक सिंगल स्क्रिप्ट बनानी होगी जिसे वह परीक्षण करना चाहता है।

ट्यूटोरियल

इस ट्यूटोरियल के लिए मैं उस APK का उपयोग करूँगा जिसे आप यहाँ से डाउनलोड कर सकते हैं:

या इसे इसके original repository (download app-release.apk) से भी डाउनलोड कर सकते हैं।

इंस्टॉलेशन

bash
pip3 install objection

कनेक्शन

एक सामान्य ADB conection बनाएं और डिवाइस में frida सर्वर शुरू करें (और जांचें कि frida client और server दोनों में काम कर रहा है)।

यदि आप rooted device का उपयोग कर रहे हैं तो आपको उस application को चुनना होगा जिसे आप --gadget विकल्प के अंदर परीक्षण करना चाहते हैं। इस मामले में:

bash
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore

बुनियादी क्रियाएँ

objections के सभी संभावित कमांड इस ट्यूटोरियल में सूचीबद्ध नहीं किए गए हैं; केवल वे जिन्हें मैंने अधिक उपयोगी पाया हैं।

पर्यावरण

कुछ दिलचस्प जानकारी (जैसे passwords या paths) पर्यावरण के अंदर मिल सकती है।

bash
env

Frida की जानकारी

bash
frida

अपलोड/डाउनलोड

bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]

frida स्क्रिप्ट आयात करें

bash
import <local path frida-script>

SSLPinning

bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.

Root का पता लगाना

bash
android root disable  #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.

Exec Command

bash
android shell_exec whoami

Screenshots

bash
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false  #This may enable you to take screenshots using the hardware keys

Static analysis को Dynamic बनाया गया

एक वास्तविक एप्लिकेशन में objection का उपयोग करने से पहले हमें इस हिस्से में मिले सभी जानकारी static analysis की वजह से पता होनी चाहिए। वैसे भी, इस तरह आप शायद कुछ नया देख सकेंगे क्योंकि यहाँ आपको केवल classes, methods और exported objects की एक पूरी सूची ही मिलेगी।

यह भी उपयोगी है अगर किसी तरह आप ऐप का unable to get some readable source code प्राप्त करने में असमर्थ हों।

activities, receivers और services की सूची

bash
android hooking list activities

bash
android hooking list services
android hooking list receivers

यदि कोई नहीं मिला तो Frida त्रुटि फेंकेगा।

वर्तमान activity प्राप्त करना

bash
android hooking get current_activity

क्लास खोजें

आइए हमारे एप्लिकेशन के अंदर क्लासों की तलाश शुरू करें

bash
android hooking search classes asvid.github.io.fridaapp

किसी क्लास के मेथड्स खोजें

अब चलिए MainActivity: क्लास के अंदर के मेथड्स निकालते हैं।

bash
android hooking search methods asvid.github.io.fridaapp MainActivity

किसी class के घोषित Methods को उनके parameters के साथ सूचीबद्ध करें

आइए पता करें कि class के methods को कौन से parameters चाहिए:

bash
android hooking list class_methods asvid.github.io.fridaapp.MainActivity

क्लासों की सूची

आप वर्तमान एप्लिकेशन के भीतर लोड की गई सभी क्लासों की सूची भी प्रदर्शित कर सकते हैं:

bash
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.

यह बहुत उपयोगी है अगर आप hook the method of a class and you only know the name of the class. आप इस function का उपयोग search which module owns the class करने के लिए कर सकते हैं और फिर उसके method को hook कर सकते हैं।

Hooking being easy

Hooking (watching) a method

एप्लिकेशन के source code से हम जानते हैं कि function sum() from MainActivity is being run every second. आइए हर बार जब यह function कॉल हो तब dump all possible information करें (arguments, return value and backtrace):

bash
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return

Hooking (watching) एक पूरी class

असल में मुझे class MainActivity के सभी methods बहुत ही दिलचस्प लगते हैं, चलिए hook them all करते हैं। सावधान रहें, इससे एप्लिकेशन crash हो सकता है।

bash
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return

यदि आप application के साथ खेलते हैं जबकि class hooked है, तो आप देखेंगे कि प्रत्येक function कब call हो रहा है, उसके arguments और return value क्या हैं।

किसी function के boolean return value को बदलना

Source code से आप देख सकते हैं कि function checkPin को एक String argument के रूप में मिलता है और यह एक boolean return करता है। आइए इस function को हमेशा true return करने वाला बनाते हैं:

अब, यदि आप PIN code के लिए text box में कुछ भी लिखते हैं तो आप देखेंगे कि कोई भी value valid है:

Class instances

Search for and print live instances of a specific Java class, specified by a fully qualified class name. Out उस प्रयास का परिणाम है जिसमें किसी discovered objection के लिए string value प्राप्त करने की कोशिश की गई थी, जो आमतौर पर ऑब्जेक्ट के लिए property values को contain करेगा।

android heap print_instances <class>

Keystore/Intents

आप keystore और intents के साथ खेल सकते हैं:

bash
android keystore list
android intents launch_activity
android intent launch_service

मेमोरी

डंप

bash
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part

सूची

bash
memory list modules

सूची के नीचे आप frida देख सकते हैं:

आइए देखें frida क्या export कर रहा है:

खोज/लिखें

आप objection के साथ मेमोरी के अंदर खोज और लिख भी सकते हैं:

bash
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)

SQLite

आप sqlite कमांड का उपयोग sqlite डेटाबेस के साथ इंटरैक्ट करने के लिए कर सकते हैं।

बाहर निकलें

bash
exit

Objection में मुझे क्या कमी लगती है

  • The hooking methods कभी-कभी application को crash कर देते हैं (यह भी Frida की वजह से है)।
  • आप classes के instances का उपयोग उस instance के functions को कॉल करने के लिए नहीं कर सकते। और आप classes के नए instances नहीं बना सकते और उनका उपयोग functions कॉल करने के लिए नहीं कर सकते।
  • एप्लिकेशन द्वारा उपयोग किए जा रहे सभी common crypto methods को hook करने के लिए कोई shortcut नहीं है (जैसे sslpinnin के लिए वाला) जिससे आप cyphered text, plain text, keys, IVs और उपयोग किए गए algorithms देख सकें।

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें