Android एप्लिकेशन Pentesting

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 का समर्थन करें

Android एप्लिकेशन बुनियादी बातें

यह पृष्ठ पढ़ना अत्यधिक अनुशंसित है ताकि आप Android सुरक्षा से संबंधित सबसे महत्वपूर्ण हिस्सों और एक Android एप्लिकेशन में सबसे खतरनाक घटकों के बारे में जान सकें:

Android Applications Basics

ADB (Android Debug Bridge)

यह मुख्य टूल है जिसकी आपको एक android डिवाइस (emulated या physical) से कनेक्ट होने के लिए जरूरत होती है।
ADB कंप्यूटर से USB या Network के माध्यम से डिवाइसेज़ को नियंत्रित करने की अनुमति देता है। यह यूटिलिटी दोनों दिशाओं में फाइलों की copying, ऐप्स की installation और uninstallation, shell कमांड्स का execution, डेटा का backing up, लॉग्स का reading, और अन्य कार्यों को सक्षम बनाती है।

Take a look to the following list of ADB Commands to learn how to use adb.

Smali

कभी-कभी एप्प्लिकेशन कोड को modify करना उपयोगी होता है ताकि hidden information (शायद अच्छी तरह obfuscated passwords या flags) तक पहुंच बनाई जा सके। तब, apk को decompile करना, कोड को modify करना और उसे फिर से recompile करना दिलचस्प हो सकता है।
In this tutorial you can learn how to decompile and APK, modify Smali code and recompile the APK with the new functionality. यह dynamic analysis के दौरान किए जाने वाले कई tests के लिए एक उपयोगी alternative हो सकता है। इसलिए, इस संभावना को हमेशा ध्यान में रखें।

Other interesting tricks

Automated multi-source APK acquisition (justapk)

pip install justapk (Python 3.11+). CLI stdout पर JSON आउटपुट करता है और progress stderr पर भेजता है (pipe-friendly). यह deterministic fallback chain का अनुसरण करता है: APK20 → F-Droid → APKPure (mobile API) → APKMirror (HTML scrape) → Uptodown (mobile API) → APKCombo (HTML scrape)। Cloudflare-protected sources वास्तविक क्लाइंट्स की नकल करने और bot-detection ब्लॉक्स को कम करने के लिए curl_cffi का उपयोग करते हैं, साथ ही TLS fingerprint impersonation का उपयोग भी करते हैं।

justapk download <package>              # auto fallback
justapk download <package> -s apkpure   # pin a source / version / output dir
justapk search telegram
justapk info org.telegram.messenger
justapk convert app.xapk -o output/      # merges splits, re-signs with debug key

convert XAPK/split APKs को मर्ज करता है और उन्हें debug key से साइन करता है, इसलिए परिणामी APK signature/provenance मूल से भिन्न हो जाता है (testing/analysis के लिए उपयोग करें, production installs के लिए नहीं)।

  • डिवाइस से APK निकालें:
adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
  • सभी splits और base apks को APKEditor से मर्ज करें:
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk

# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

Android malware tradecraft (loaders, fileless DEX, persistence)

Native staging + fileless DEX loaders

कुछ Android droppers एक native library (lib*.so) embed करते हैं जो decrypt करके एक दूसरा ELF (e.g., l.so) अस्थायी path पर लिखता है, JNI के माध्यम से लोड करता है, और फिर असली logic को DEX के रूप में केवल memory में लोड करता है dalvik.system.InMemoryDexClassLoader का उपयोग करके। इससे payload की static visibility कम होती है और classes*.dex को disk पर लिखने से बचता है।

Practical triage points:

  • उन native libs की तलाश करें जो बहुत जल्दी dlopen या System.loadLibrary कॉल करते हैं, और फिर obfuscated stack strings के माध्यम से Java methods को resolve करते हैं (e.g., स्टैक पर XOR decoded)।
  • logs/strings या hooks में InMemoryDexClassLoader के लिए जांच करें, जो fileless DEX execution को इंगित करता है।

Quick Frida hook to dump the in‑memory DEX buffer:

Java.perform(() => {
const IM = Java.use('dalvik.system.InMemoryDexClassLoader');
IM.$init.overload('java.nio.ByteBuffer','java.lang.ClassLoader').implementation = function(buf, parent){
const arr = Java.array('byte', buf.array());
const fos = Java.use('java.io.FileOutputStream').$new("/sdcard/memdex.dex");
fos.write(arr); fos.close();
return this.$init(buf, parent);
};
});

Anti-analysis kill-switch

Packed loaders अक्सर emulator या analysis checks fail होने पर (उदा., CPU_ABI validation) self-terminate होकर निम्न को कॉल करते हैं:

android.os.Process.killProcess(android.os.Process.myPid());

Persistence via foreground service + MediaPlayer loop

एक हल्का Persistence पैटर्न यह है कि एक foreground service को pinned notification के साथ जीवित रखा जाए और MediaPlayer के माध्यम से निरंतर लगभग-अनसुना ऑडियो लूप चलाया जाए। यह process को “active” रखता है और OS की inactivity kills को कम करता है। ऐसी ForegroundService + MediaPlayer उपयोग की तलाश करें जो एक छोटा asset लूप करे (अक्सर कुछ सेकंड लंबा)।

Accessibility overlay + ACTION_SET_TEXT hijacking

जब उपयोगकर्ता Accessibility की अनुमति देता है, तो banking trojans foreground app की निगरानी कर सकते हैं, एक वास्तविक जैसा overlay रेंडर कर सकते हैं (अक्सर WebView HTML जिसे Base64 में स्टोर किया गया होता है), और लेन‑देन फ़ील्ड्स को AccessibilityNodeInfo.ACTION_SET_TEXT का उपयोग करके बदल सकते हैं। इससे पीड़ित एक विश्वसनीय UI देखता है, जबकि silent recipient address substitution चुपचाप संभव हो जाता है।

Minimal text replacement example:

Bundle args = new Bundle();
args.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
"ATTACKER_USDT_ADDRESS");
node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, args);

Legitimate push infrastructure as C2 gating

कस्टम sockets के बजाय, कुछ malware Firebase Cloud Messaging (FCM) का उपयोग C2 चैनल के रूप में करते हैं। FCM messages telemetry checks (charging state, battery %, temperature, user inactivity) ट्रिगर कर सकते हैं और माइनिंग या फ्रॉड जैसी actions को स्टील्थ के लिए gate कर सकते हैं।

Encrypted native payload staging with filename‑derived keys

Native payloads को encrypted ELF blobs के रूप में दिया जा सकता है और CipherInputStream() से decrypt किया जा सकता है, एक key का उपयोग करते हुए जो download किए गए filename के SHA‑1 से derived होता है। हर filename/version एक अलग key देता है, जिससे static IOC reuse मुश्किल हो जाता है।

Jezail rooted Android pentesting toolkit (REST API + web UI)

  • rooted device (Magisk/rootAVD) पर चलता है और tcp/8080 पर एक HTTP server स्टार्ट करता है जिसमें Flutter web UI और REST API होता है।
  • Release APK को perms के साथ इंस्टॉल करें: adb install -g -r jezail.apk, फिर app लॉन्च करें (server auto-starts)।
  • Endpoints: http://<device-ip>:8080/ (UI), http://<device-ip>:8080/api/json (API listing), http://<device-ip>:8080/api/swagger (Swagger)।
  • Host से UI/API तक पहुँचने के लिए emulator port-forward: adb forward tcp:8080 tcp:8080 फिर ब्राउज़ करें http://localhost:8080

Android Enterprise & Work Profile Attacks

Android Enterprise Work Profile Bypass

Case Studies & Vulnerabilities

Air Keyboard Remote Input Injection

Android Rooting Frameworks Manager Auth Bypass Syscall Hook

Abusing Android Media Pipelines Image Parsers

Firmware Level Zygote Backdoor Libandroid Runtime

Static Analysis

सबसे पहले, एक APK का analysis करने के लिए आपको decompiler का उपयोग करके Java code को देखना चाहिए।
Please, read here to find information about different available decompilers.

Looking for interesting Info

APK की strings देखकर आप passwords, URLs (https://github.com/ndelphit/apkurlgrep), api keys, encryption, bluetooth uuids, tokens और अन्य रोचक चीजें खोज सकते हैं… code execution backdoors या authentication backdoors (app में hardcoded admin credentials) के लिए भी देखें।

Firebase

खास ध्यान firebase URLs पर दें और जांचें कि क्या यह गलत तरीके से configured है। More information about whats is FIrebase and how to exploit it here.

Basic understanding of the application - Manifest.xml, strings.xml

एक application’s Manifest.xml और strings.xml फाइलों की जांच संभावित सुरक्षा कमजोरियों का पता लगा सकती है। इन फ़ाइलों तक decompilers से पहुँच सकते हैं या APK की file extension को .zip में rename करके unzip कर सकते हैं।

Manifest.xml से पहचानी जाने वाली Vulnerabilities में शामिल हैं:

  • Debuggable Applications: यदि Manifest.xml में debuggable="true" सेट है तो यह जोखिम पैदा करता है क्योंकि यह कनेक्शन्स की अनुमति देता है जो exploitation तक ले जा सकते हैं। debuggable applications कैसे exploit किए जाएं, इस पर tutorial देखें।
  • Backup Settings: संवेदनशील जानकारी वाले applications के लिए android:allowBackup="false" attribute को स्पष्ट रूप से सेट किया जाना चाहिए ताकि adb के माध्यम से unauthorized data backups रोके जा सकें, खासकर जब usb debugging enabled हो।
  • Network Security: कस्टम network security configurations (android:networkSecurityConfig="@xml/network_security_config") res/xml/ में certificate pins और HTTP traffic settings जैसी सुरक्षा details specify कर सकते हैं। एक उदाहरण कुछ domains के लिए HTTP traffic की अनुमति देना है।
  • Exported Activities and Services: Manifest में exported activities और services की पहचान ऐसे components को उजागर कर सकती है जिन्हें दुरुपयोग किया जा सकता है। dynamic testing के दौरान आगे के analysis से पता चल सकता है कि इन components का कैसे exploit किया जा सकता है।
  • Content Providers and FileProviders: exposed content providers unauthorized access या data modification की अनुमति दे सकते हैं। FileProviders की configuration भी ध्यान से जाँची जानी चाहिए।
  • Broadcast Receivers and URL Schemes: ये components exploitation के लिए leverage किए जा सकते हैं, खासकर यह देखने के लिए कि URL schemes input vulnerabilities के लिए कैसे manage किए जाते हैं।
  • SDK Versions: minSdkVersion, targetSDKVersion, और maxSdkVersion attributes supported Android versions को संकेत करते हैं, जो यह दिखाते हैं कि पुराने, vulnerable Android versions का समर्थन न करना सुरक्षा के लिहाज से क्यों महत्वपूर्ण है।

strings.xml फ़ाइल से sensitive जानकारी जैसे API keys, custom schemas, और अन्य developer notes मिल सकते हैं, इसलिए इन resources की सावधानीपूर्वक समीक्षा आवश्यक है।

Tapjacking

Tapjacking एक ऐसा attack है जहाँ एक malicious application लॉन्च किया जाता है और वह victim application के ऊपर अपनी स्थिति बना लेता है। जब यह victim app को दृश्यमान रूप से ओबरस्क्योर कर देता है, तो इसका user interface इस तरह से डिज़ाइन किया जाता है कि यह user को धोखा दे कर interaction करने के लिए प्रेरित करता है, जबकि यह interaction को victim app की ओर पास कर देता है।
असल में, यह user को यह जानने से अन्धा कर देता है कि वे वास्तव में victim app पर actions कर रहे हैं

अधिक जानकारी के लिए देखें:

Tapjacking

Task Hijacking

एक activity जिसका launchMode singleTask पर सेट है और कोई taskAffinity defined नहीं है, वह task Hijacking के लिए vulnerable है। इसका मतलब है कि एक application install की जा सकती है और यदि वह real application से पहले लॉन्च की जाती है तो वह real application के task को hijack कर सकती है (तो user यह सोचकर malicious application के साथ इंटरैक्ट करेगा कि वह real app का उपयोग कर रहा है)।

अधिक जानकारी:

Android Task Hijacking

Insecure data storage

Internal Storage

Android में, files जो internal storage में store की जाती हैं, वे आम तौर पर उसी app द्वारा access करने के लिए डिज़ाइन की जाती हैं जिसने उन्हें बनाया है। यह सुरक्षा उपाय Android operating system द्वारा लागू किया जाता है और अधिकांश applications की security आवश्यकताओं के लिये पर्याप्त होता है। हालांकि, developers कभी-कभी MODE_WORLD_READABLE और MODE_WORLD_WRITABLE जैसे modes का उपयोग करते हैं ताकि files को विभिन्न applications के बीच share किया जा सके। ये modes इन files तक अन्य applications, संभावित malicious वाले भी, द्वारा access को रोकते नहीं हैं।

  1. Static Analysis:
  • MODE_WORLD_READABLE और MODE_WORLD_WRITABLE के उपयोग को ध्यान से जाँचे। ये modes फ़ाइलों को अनचाहे या unauthorized access के लिए संभावित रूप से उजागर कर सकते हैं।
  1. Dynamic Analysis:
  • ऐप द्वारा बनाए गए files पर सेट permissions की पुस्ति करें। विशेष रूप से जाँचें कि क्या कोई files worldwide readable या writable के रूप में सेट हैं। यह एक गंभीर सुरक्षा जोखिम हो सकता है, क्योंकि इससे कोई भी application जो device पर इंस्टॉल है, उनकी उत्पत्ति या इरादे की परवाह किए बिना, उन files को read या modify कर सकता है।

External Storage

SD Cards जैसे external storage पर फ़ाइलों के साथ काम करते समय कुछ सावधानियाँ बरतनी चाहिए:

  1. Accessibility:
  • external storage पर फाइलें globally readable और writable होती हैं। इसका अर्थ है कि कोई भी application या user इन फाइलों तक पहुँच सकता है।
  1. Security Concerns:
  • आसान पहुँच को देखते हुए, संवेदनशील जानकारी को external storage पर स्टोर न करने की सलाह दी जाती है।
  • external storage को हटाया जा सकता है या कोई भी application एक्सेस कर सकता है, जिससे यह कम सुरक्षित हो जाता है।
  1. Handling Data from External Storage:
  • external storage से प्राप्त data पर हमेशा input validation करें। यह महत्वपूर्ण है क्योंकि यह data untrusted स्रोत से आता है।
  • executables या class files को dynamic loading के लिए external storage पर स्टोर करना कड़ाई से discouraged है।
  • यदि आपका application external storage से executable files retrieve करता है, तो सुनिश्चित करें कि ये files signed और cryptographically verified हों इससे पहले कि उन्हें dynamically load किया जाए। यह कदम आपकी application की security integrity बनाए रखने के लिए आवश्यक है।

External storage को /storage/emulated/0 , /sdcard , /mnt/sdcard में access किया जा सकता है

Tip

Android 4.4 (API 17) से शुरू होकर, SD card में एक directory संरचना है जो किसी app से केवल उस directory तक access को सीमित करती है जो विशेष रूप से उस app के लिए है। यह किसी malicious application को दूसरे app की files तक read या write access प्राप्त करने से रोकता है।

Sensitive data stored in clear-text

  • Shared preferences: Android प्रत्येक application को आसानी से xml files को path /data/data/<packagename>/shared_prefs/ में save करने की अनुमति देता है और कभी-कभी उस folder में clear-text में sensitive information मिल सकती है।
  • Databases: Android प्रत्येक application को sqlite databases को path /data/data/<packagename>/databases/ में save करने की अनुमति देता है और कभी-कभी उस folder में clear-text में sensitive information मिल सकती है।

Broken TLS

Accept All Certificates

किसी कारण से कभी-कभी developers सभी certificates को accept कर देते हैं भले ही उदाहरण के लिए hostname match न करे, ऐसी lines of code के साथ जैसे निम्नलिखित:

SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.

खराब क्रिप्टोग्राफी

खराब कुंजी प्रबंधन प्रक्रियाएँ

कुछ डेवलपर्स संवेदनशील डेटा को स्थानीय स्टोरेज में सेव करते हैं और उसे कोड में hardcoded/predictable key से encrypt कर देते हैं। ऐसा नहीं किया जाना चाहिए क्योंकि कुछ reversing से attackers confidential information निकाल सकते हैं।

असुरक्षित और/या अप्रचलित एल्गोरिदम का उपयोग

डेवलपर्स को authorization checks, data को store या send करने के लिए deprecated algorithms का उपयोग नहीं करना चाहिए। इनमें से कुछ एल्गोरिदम हैं: RC4, MD4, MD5, SHA1… यदि hashes का उपयोग passwords स्टोर करने के लिए किया जा रहा है, तो salt के साथ brute-force प्रतिरोधी hashes का उपयोग किया जाना चाहिए।

अन्य जाँच

  • यह सलाह दी जाती है कि APK को obfuscate किया जाए ताकि reverse engineer का काम attackers के लिए कठिन हो।
  • यदि ऐप संवेदनशील है (जैसे बैंक ऐप्स), तो इसे मोबाइल के rooted होने की अपनी जाँच करनी चाहिए और उसी अनुसार व्यवहार करना चाहिए।
  • यदि ऐप संवेदनशील है (जैसे बैंक ऐप्स), तो इसे यह जाँचना चाहिए कि क्या emulator उपयोग किया जा रहा है।
  • यदि ऐप संवेदनशील है (जैसे बैंक ऐप्स), तो इसे execute करने से पहले अपनी integrity चेक करनी चाहिए ताकि यह पता चले कि इसे modify किया गया है या नहीं।
  • Use APKiD to check which compiler/packer/obfuscator was used to build the APK

React Native Application

नीचे दी गई पेज पढ़ें ताकि आप React applications के javascript code तक आसानी से पहुँचने का तरीका समझ सकें:

React Native Application

Xamarin Applications

नीचे दी गई पेज पढ़ें ताकि आप एक xamarin applications के C# code तक आसानी से पहुँचने का तरीका जान सकें:

Xamarin Apps

Superpacked Applications

According to this blog post superpacked एक Meta algorithm है जो एक application की content को एक single file में compress कर देता है। ब्लॉग में इन प्रकार के apps को decompress करने वाली app बनाने की संभावना और एक तेज़ तरीका बताया गया है जिसमें application को execute करके filesystem से decompressed files इकट्ठा करना शामिल है।

Automated Static Code Analysis

टूल mariana-trench application के code को scan करके vulnerabilities खोजने में सक्षम है। इस टूल में कई known sources (जो टूल को बताती हैं कि कहाँ user द्वारा नियंत्रित input आ सकता है), sinks (जो टूल को बताती हैं कि किन places पर malicious user input नुकसान पहुँचा सकता है) और rules शामिल हैं। ये rules sources-sinks के उन combinations को बताती हैं जो vulnerability को दर्शाती हैं।

इस ज्ञान के साथ, mariana-trench कोड की समीक्षा करेगा और संभावित vulnerabilities खोजेगा

Secrets leaked

एक application में secrets (API keys, passwords, hidden urls, subdomains…) हो सकते हैं जिन्हें आप खोज सकते हैं। आप ऐसे टूल का उपयोग कर सकते हैं जैसे https://github.com/dwisiswant0/apkleaks

Bypass Biometric Authentication

Bypass Biometric Authentication (Android)

अन्य दिलचस्प फ़ंक्शन्स

  • Code execution: Runtime.exec(), ProcessBuilder(), native code:system()
  • Send SMSs: sendTextMessage, sendMultipartTestMessage
  • Native functions declared as native: public native, System.loadLibrary, System.load
  • Read this to learn how to reverse native functions
  • In-memory native code execution via JNI (downloaded shellcode → mmap/mprotect → call):

In Memory Jni Shellcode Execution

Other tricks

content:// protocol



Dynamic Analysis

सबसे पहले, आपको ऐसा environment चाहिए जहाँ आप application और आवश्यक environment (Burp CA cert, Drozer और Frida मुख्य रूप से) install कर सकें। इसलिए, एक rooted device (emulated या नहीं) अत्यधिक recommend किया जाता है।

Online Dynamic analysis

आप एक free account बना सकते हैं: https://appetize.io/. यह प्लेटफ़ॉर्म आपको APKs को upload और execute करने की अनुमति देता है, इसलिए यह यह देखने में उपयोगी है कि apk कैसे behave कर रहा है।

आप web में अपने application के logs भी देख सकते हैं और adb के माध्यम से connect कर सकते हैं।

ADB connection की वजह से आप emulators के अंदर Drozer और Frida का उपयोग कर सकते हैं।

Local Dynamic Analysis

Using an emulator

  • Android Studio (आप x86 और arm devices बना सकते हैं, और according to this latest x86 versions ARM libraries का support करते हैं बिना धीमे arm emulator की जरूरत के).
  • इसे सेटअप करना इस पेज में सीखें:

AVD - Android Virtual Device

  • Genymotion (Free version: Personal Edition, आपको account बनाना होगा. It’s recommend to download the version WITH VirtualBox to avoid potential errors.)
  • Nox (Free, पर यह Frida या Drozer को सपोर्ट नहीं करता).

Tip

जब किसी भी प्लेटफ़ॉर्म पर नया emulator बनाते हैं तो ध्यान रखें कि स्क्रीन जितनी बड़ी होगी emulator उतना ही धीमा चलेगा। इसलिए संभव हो तो छोटे स्क्रीन चुनें।

Genymotion में google services (जैसे AppStore) install करने के लिए आपको निम्नलिखित छवि में लाल चिह्नित बटन पर क्लिक करना होगा:

साथ ही, ध्यान दें कि Genymotion में Android VM की configuration में आप Bridge Network mode चुन सकते हैं (यह उपयोगी होगा यदि आप tools वाले दूसरे VM से Android VM से connect कर रहे हों)।

Use a physical device

आपको debugging options activate करनी होंगी और अच्छा रहेगा अगर आप इसे root कर सकें:

  1. Settings.
  2. (FromAndroid 8.0) Select System.
  3. Select About phone.
  4. Press Build number 7 times.
  5. Go back and you will find the Developer options.

एक बार जब आपने application install कर लिया है, तो पहली चीज़ जो आपको करनी चाहिए वह है इसे चलाकर देखना और यह पता लगाना कि यह क्या करता है, कैसे काम करता है और इसके साथ सहज हो जाना।
मैं सुझाव दूँगा कि आप यह initial dynamic analysis MobSF dynamic analysis + pidcat का उपयोग करके करें, ताकि हम यह सीख सकें कि application कैसे काम करता है जबकि MobSF बहुत सी interesting data capture कर रहा है जिन्हें आप बाद में review कर सकते हैं।

Magisk/Zygisk quick notes (recommended on Pixel devices)

  • Magisk app से boot.img को patch करें और fastboot के माध्यम से flash करके systemless root प्राप्त करें
  • Zygisk + DenyList को enable करें ताकि root छुपाया जा सके; जब अधिक मजबूत छुपाना आवश्यक हो तो LSPosed/Shamiko पर विचार करें
  • OTA updates से recover करने के लिए original boot.img रखकर रखें; हर OTA के बाद पुनः patch करें
  • स्क्रीन mirroring के लिए host पर scrcpy का उपयोग करें

अनपेक्षित डेटा leak

Logging

डेवलपर्स को सार्वजनिक रूप से debugging information उजागर करने में सावधान रहना चाहिए, क्योंकि इससे संवेदनशील डेटा leak हो सकता है। application logs को monitor करने के लिए pidcat और adb logcat के उपयोग की सिफारिश की जाती है ताकि संवेदनशील जानकारी की पहचान और सुरक्षा की जा सके। पढ़ने में आसानी और उपयोग में सरलता के कारण Pidcat को प्राथमिकता दी जाती है।

Warning

ध्यान रखें कि Android 4.0 से नये संस्करणों में, applications केवल अपने ही logs तक पहुंच सकती हैं। इसलिए applications अन्य apps के logs तक access नहीं कर सकतीं।
हालाँकि, फिर भी यह सलाह दी जाती है कि संवेदनशील जानकारी को log न करें

Copy/Paste Buffer Caching

Android का clipboard-based framework apps में copy-paste functionality सक्षम करता है, फिर भी यह जोखिम पैदा करता है क्योंकि अन्य applications clipboard को access कर सकती हैं, जिससे संवेदनशील डेटा expose हो सकता है। इसलिए application के संवेदनशील हिस्सों जैसे credit card details के लिए copy/paste functions disable करना महत्वपूर्ण है ताकि डेटा leak न हो।

Crash Logs

यदि कोई application crash करता है और logs save करता है, तो ये logs attackers की मदद कर सकते हैं, खासकर जब application reverse-engineer नहीं की जा सकती। इस जोखिम को कम करने के लिए, crash पर logging से बचें, और यदि logs नेटवर्क पर भेजने आवश्यक हों तो सुनिश्चित करें कि वे SSL चैनल के माध्यम से भेजे जाएँ।

As pentester, इन logs को देखने की कोशिश करें

Analytics Data Sent To 3rd Parties

Applications अक्सर Google Adsense जैसी services integrate करते हैं, जो developers की गलत implementaton के कारण संवेदनशील डेटा को गलती से leak कर सकती हैं। संभावित डेटा leaks की पहचान करने के लिए, यह सलाह दी जाती है कि आप application’s traffic intercept करें और देखें कि क्या कोई संवेदनशील जानकारी third-party services को भेजी जा रही है।

SQLite DBs

ज़्यादातर applications information save करने के लिए internal SQLite databases का उपयोग करते हैं। pentest के दौरान बनाए गए databases, tables और columns के नामों और saved data पर नज़र डालें क्योंकि आप संवेदनशील जानकारी पा सकते हैं (जो vulnerability होगी).
Databases आमतौर पर /data/data/the.package.name/databases जैसे स्थान पर होते हैं, उदाहरण /data/data/com.mwr.example.sieve/databases

यदि database confidential information save कर रहा है और यह encrypted है लेकिन आप application के अंदर password ढूँढ लेते हैं तो यह फिर भी एक vulnerability है।

.tables का उपयोग करके tables enumerate करें और .schema <table_name> करके table के columns enumerate करें।

Drozer (Exploit Activities, Content Providers and Services)

From Drozer Docs: Drozer आपको एक Android app की भूमिका अपनाने और अन्य apps के साथ interact करने की अनुमति देता है। यह वह सब कुछ कर सकता है जो एक installed application कर सकता है, जैसे Android’s Inter-Process Communication (IPC) mechanism का उपयोग करना और underlying operating system के साथ interact करना। .
Drozer एक उपयोगी टूल है जो exported activities, exported services और Content Providers को exploit करने में मदद करता है जैसा कि आप नीचे के sections में सीखेंगे।

Exploiting exported Activities

Read this if you want to refresh what is an Android Activity.
यह भी याद रखें कि activity का कोड onCreate method में शुरू होता है।

Authorisation bypass

जब किसी Activity को exported किया जाता है तो आप उसे external app से invoke कर सकते हैं। इसलिए, यदि किसी activity में सेंसिटिव जानकारी है और वह exported है तो आप authentication mechanisms बायपास करके उस तक पहुँच सकते हैं।

Learn how to exploit exported activities with Drozer.

आप adb से भी एक exported activity start कर सकते हैं:

  • PackageName is com.example.demo
  • Exported ActivityName is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

NOTE: MobSF किसी activity में android:launchMode के रूप में singleTask/singleInstance के उपयोग को malicious के रूप में पहचानता है, लेकिन this के कारण, जाहिरा तौर पर यह केवल पुराने वर्शन (API versions < 21) पर ही खतरनाक है।

Tip

Note that an authorisation bypass is not always a vulnerability, it would depend on how the bypass works and which information is exposed.

संवेदनशील जानकारी leakage

Activities भी परिणाम वापस कर सकती हैं। यदि आप कोई exported और unprotected activity पाते हैं जो setResult method को call कर रही है और संवेदनशील जानकारी return कर रही है, तो वहाँ एक संवेदनशील जानकारी leakage मौजूद है।

Tapjacking

यदि Tapjacking को रोका नहीं गया है, तो आप exported activity का दुरुपयोग करके user को अनपेक्षित actions करने के लिए मजबूर कर सकते हैं। For more info about what is Tapjacking follow the link.

Exploiting Content Providers - Accessing and manipulating sensitive information

Read this if you want to refresh what is a Content Provider.
Content providers मूल रूप से data share करने के लिए उपयोग होते हैं। यदि किसी app के पास उपलब्ध content providers हैं, तो आप उनसे संवेदनशील data extract कर सकते हैं। यह भी महत्वपूर्ण है कि संभावित SQL injections और Path Traversals का परीक्षण करें क्योंकि वे vulnerable हो सकते हैं।

Learn how to exploit Content Providers with Drozer.

Exploiting Services

Read this if you want to refresh what is a Service.
याद रखें कि Service की actions method onStartCommand में शुरू होती हैं।

Service मूलतः ऐसी चीज़ है जो data receive कर सकती है, उसे process करती है और (या नहीं) response return करती है। इसलिए, यदि कोई application कुछ services export कर रहा है, तो आपको यह समझने के लिए code की जांच करनी चाहिए कि यह क्या कर रहा है और confidential जानकारी निकालने, authentication measures को bypass करने के लिए इसे dynamically टेस्ट करना चाहिए…
Learn how to exploit Services with Drozer.

Exploiting Broadcast Receivers

Read this if you want to refresh what is a Broadcast Receiver.
याद रखें कि Broadcast Receiver की actions method onReceive में शुरू होती हैं।

A broadcast receiver एक प्रकार के संदेश के लिए प्रतीक्षा करता है। यह इस बात पर निर्भर करता है कि receiver संदेश को कैसे handle करता है; यह vulnerable हो सकता है।
Learn how to exploit Broadcast Receivers with Drozer.

You can look for deep links manually, using tools like MobSF or scripts like this one.
आप किसी declared scheme को adb या किसी browser से खोल सकते हैं:

adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

ध्यान दें कि आप package name छोड़ सकते हैं और मोबाइल स्वचालित रूप से उस ऐप को कॉल करेगा जो उस लिंक को खोलना चाहिए.

<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

निष्पादित कोड

App में निष्पादित होने वाला कोड ढूँढने के लिए, deeplink द्वारा कॉल की गई activity में जाएँ और फ़ंक्शन onNewIntent खोजें।

संवेदनशील जानकारी

हर बार जब आप कोई deep link पाते हैं, तो जाँचें कि यह URL parameters के माध्यम से संवेदनशील डेटा (जैसे passwords) प्राप्त नहीं कर रहा है, क्योंकि कोई भी अन्य application उस deep link को impersonate कर सकता है और उस डेटा को चुरा सकता है!

Path में पैरामीटर

आपको यह भी सुनिश्चित करना चाहिए कि कोई deep link URL के path के अंदर parameter का उपयोग तो नहीं कर रहा है, जैसे: https://api.example.com/v1/users/{username} , उस स्थिति में आप path traversal करवा सकते हैं, जैसे: example://app/users?username=../../unwanted-endpoint%3fparam=value .
ध्यान दें कि यदि आप application के अंदर सही endpoints ढूँढ लेते हैं तो आप Open Redirect (यदि path का कोई हिस्सा domain name के रूप में उपयोग किया गया हो), account takeover (यदि आप CSRF token के बिना users के विवरण बदल सकते हैं और vuln endpoint ने सही method उपयोग किया हो) और किसी अन्य vuln को ट्रिगर कर सकते हैं। अधिक जानकारी के लिए यहाँ देखें।

अधिक उदाहरण

लिंक्स के बारे में एक दिलचस्प bug bounty report (/.well-known/assetlinks.json)।

Transport Layer निरीक्षण और सत्यापन की विफलताएँ

  • Certificates हमेशा सही तरीके से inspect नहीं किए जाते Android applications द्वारा। अक्सर ये applications warnings को अनदेखा कर देते हैं और self-signed certificates को accept कर लेते हैं या कुछ मामलों में HTTP connections का उपयोग कर लेते हैं।
  • SSL/TLS handshake के दौरान negotiations कभी-कभी कमजोर होती हैं, और insecure cipher suites का उपयोग होता है। यह vulnerability connection को man-in-the-middle (MITM) attacks के प्रति संवेदनशील बनाती है, जिससे attackers डेटा को decrypt कर सकते हैं।
  • निजी जानकारी का Leakage तब जोखिम बनता है जब applications secure channels का उपयोग करके authenticate करते हैं लेकिन अन्य लेन-देन के लिए non-secure channels पर communicate करते हैं। यह तरीका sensitive data, जैसे session cookies या user details, को malicious entities द्वारा interception से बचाने में विफल रहता है।

Certificate Verification

हम certificate verification पर ध्यान देंगे। सुरक्षा बढ़ाने के लिए server के certificate की integrity को verify करना आवश्यक है। यह इसलिए महत्वपूर्ण है क्योंकि insecure TLS configurations और संवेदनशील डेटा का unencrypted चैनलों पर प्रसारण गंभीर जोखिम पैदा कर सकता है। server certificates को verify करने और vulnerabilities को ठीक करने के विस्तृत कदमों के लिए, this resource व्यापक मार्गदर्शन प्रदान करता है।

SSL Pinning

SSL Pinning एक security measure है जिसमें application server के certificate को उस known copy के खिलाफ verify करता है जो application के अंदर संग्रहीत रहती है। यह तरीका MITM attacks को रोकने के लिए आवश्यक है। संवेदनशील जानकारी संभालने वाले applications के लिए SSL Pinning को लागू करना दृढ़तापूर्वक अनुशंसित है।

Traffic Inspection

HTTP traffic को inspect करने के लिए, proxy tool का certificate install करना जरूरी है (उदा., Burp)। इस certificate को install किए बिना encrypted traffic proxy के माध्यम से दिखाई नहीं दे सकती। custom CA certificate install करने के लिए गाइड के लिए, click here देखें।

जो applications API Level 24 and above को target करते हैं, उन्हें proxy के CA certificate को स्वीकार करने के लिए Network Security Config में संशोधन करने की आवश्यकता होती है। encrypted traffic inspect करने के लिए यह कदम महत्वपूर्ण है। Network Security Config को modify करने के निर्देशों के लिए, refer to this tutorial देखें।

यदि Flutter का उपयोग किया जा रहा है तो आपको this page में दिए निर्देशों का पालन करना होगा। ऐसा इसलिए है क्योंकि केवल certificate को store में जोड़ने से काम नहीं चलेगा — Flutter की अपनी valid CAs की सूची होती है।

Static detection of SSL/TLS pinning

runtime bypasses की कोशिश करने से पहले, जल्दी से मानचित्र बनाएं कि APK में pinning कहाँ लागू है। Static discovery आपको hooks/patches की योजना बनाने और सही code paths पर ध्यान केंद्रित करने में मदद करता है।

Tool: SSLPinDetect

  • Open-source static-analysis utility जो APK को Smali (via apktool) में decompile करता है और SSL/TLS pinning implementations के curated regex patterns के लिए scan करता है।
  • प्रत्येक match के लिए exact file path, line number, और एक code snippet रिपोर्ट करता है।
  • सामान्य frameworks और custom code paths को कवर करता है: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, और Network Security Config XML pins।

Install

  • Prereqs: Python >= 3.8, Java on PATH, apktool
git clone https://github.com/aancw/SSLPinDetect
cd SSLPinDetect
pip install -r requirements.txt

उपयोग

# Basic
python sslpindetect.py -f app.apk -a apktool.jar

# Verbose (timings + per-match path:line + snippet)
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v

उदाहरण पैटर्न नियम (JSON)

proprietary/custom pinning styles का पता लगाने के लिए signatures का उपयोग करें या उन्हें बढ़ाएँ। आप अपना JSON लोड कर सकते हैं और बड़े पैमाने पर स्कैन कर सकते हैं।

{
"OkHttp Certificate Pinning": [
"Lcom/squareup/okhttp/CertificatePinner;",
"Lokhttp3/CertificatePinner;",
"setCertificatePinner"
],
"TrustManager Override": [
"Ljavax/net/ssl/X509TrustManager;",
"checkServerTrusted"
]
}

Notes and tips

  • बड़े ऐप्स पर तेज़ स्कैनिंग multi-threading और memory-mapped I/O के जरिए; pre-compiled regex ओवरहेड/false positives घटाता है।
  • Pattern collection: https://github.com/aancw/smali-sslpin-patterns
  • Typical detection targets to triage next:
  • OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references
  • Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides
  • Custom SSL contexts: SSLContext.getInstance + SSLContext.init with custom managers
  • Declarative pins in res/xml network security config and manifest references
  • Use the matched locations to plan Frida hooks, static patches, or config reviews before dynamic testing.

SSL Pinning को बाईपास करना

जब SSL Pinning लागू किया गया हो, HTTPS ट्रैफ़िक का निरीक्षण करने के लिए इसे बाईपास करना आवश्यक हो जाता है। इसके लिए कई तरीके उपलब्ध हैं:

  • Automatically modify the apk to bypass SSLPinning with apk-mitm. इसका सबसे बड़ा फायदे यह है कि SSL Pinning को बाईपास करने के लिए आपको root की जरूरत नहीं पड़ेगी, पर आपको एप्लिकेशन को हटाकर नया इंस्टॉल करना होगा, और यह हमेशा काम नहीं करेगा।
  • आप इस प्रोटेक्शन को बाईपास करने के लिए Frida (नीचे चर्चा) का उपयोग कर सकते हैं। Burp+Frida+Genymotion का गाइड: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
  • आप objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable" का उपयोग करके automatically bypass SSL Pinning भी आज़मा सकते हैं।
  • आप MobSF dynamic analysis (नीचे समझाया गया) का उपयोग करके भी automatically bypass SSL Pinning आज़मा सकते हैं।
  • अगर आपको लगता है कि कुछ ट्रैफ़िक कैप्चर नहीं हो रहा है तो आप ट्रैफ़िक को burp पर iptables का उपयोग करके फॉरवर्ड करने की कोशिश कर सकते हैं। यह ब्लॉग पढ़ें: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

सामान्य Web Vulnerabilities की तलाश

ऐप्लिकेशन के भीतर सामान्य web vulnerabilities की खोज भी महत्वपूर्ण है। इन कमजोरियों की पहचान और निवारण पर विस्तृत जानकारी इस सारांश के दायरे से बाहर है, लेकिन इसे कहीं और विस्तार से कवर किया गया है।

Frida

Frida developers, reverse-engineers, और security researchers के लिए एक dynamic instrumentation toolkit है।
आप रनिंग application तक पहुँच कर run time पर methods को hook कर सकते हैं ताकि behaviour बदलें, values बदलें, values extract करें, अलग code चलाएँ…
अगर आप Android applications को pentest करना चाहते हैं तो आपको Frida का उपयोग करना आना चाहिए।

Anti-instrumentation & SSL Pinning बाईपास वर्कफ़्लो

Android Anti Instrumentation And Ssl Pinning Bypass

Dump Memory - Fridump

जाँचें कि क्या application memory के अंदर संवेदनशील जानकारी स्टोर कर रहा है जिसे उसे नहीं रखना चाहिए, जैसे passwords या mnemonics।

Using Fridump3 you can dump the memory of the app with:

# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

यह ./dump फ़ोल्डर में मेमोरी dump कर देगा, और वहाँ आप कुछ इस तरह grep कर सकते हैं:

strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Keystore में संवेदनशील डेटा

Android में Keystore संवेदनशील डेटा स्टोर करने के लिए सबसे अच्छा स्थान है, हालांकि पर्याप्त privileges होने पर इसे अभी भी एक्सेस किया जा सकता है। चूँकि applications अक्सर यहाँ sensitive data in clear text स्टोर करते हैं, pentests को इसे root user के रूप में जांचना चाहिए क्योंकि डिवाइस तक physical access रखने वाला कोई व्यक्ति यह डेटा चुरा सकता है।

यदि किसी app ने keystore में data स्टोर किया है, तो वह data encrypt किया जाना चाहिए।

Keystore के अंदर डेटा एक्सेस करने के लिए आप यह Frida script इस्तेमाल कर सकते हैं: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

Fingerprint/Biometrics Bypass

नीचे दिए गए Frida script का उपयोग करके संभवतः Android applications द्वारा कुछ संवेदनशील क्षेत्रों की रक्षा के लिए लागू की गई bypass fingerprint authentication को दरकिनार किया जा सकता है:

frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

पृष्ठभूमि छवियाँ

जब आप किसी एप्लिकेशन को background में भेजते हैं, Android एप्लिकेशन का एक एप्लिकेशन का स्नैपशॉट स्टोर करता है ताकि जब उसे foreground में वापस लाया जाए तो यह app के पहले image को लोड करना शुरू कर दे और ऐसा लगे कि app तेज़ी से लोड हुआ।

हालाँकि, अगर इस स्नैपशॉट में संवेदनशील जानकारी हो, तो जो कोई भी स्नैपशॉट तक पहुँच रखता है वह उस जानकारी को चुरा सकता है (ध्यान दें कि इसे एक्सेस करने के लिए root की आवश्यकता होती है)।

स्नैपशॉट आमतौर पर यहाँ संग्रहीत होते हैं: /data/system_ce/0/snapshots

Android एक तरीका प्रदान करता है जिससे layout parameter में FLAG_SECURE सेट करके स्क्रीनशॉट कैप्चर को रोका जा सकता है। इस flag का उपयोग करने पर विंडो की सामग्री को सुरक्षित माना जाता है, जिससे यह स्क्रीनशॉट में दिखाई देने या non-secure डिस्प्ले पर देखने से रोका जाता है।

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Android Application Analyzer

यह टूल डायनेमिक एनालिसिस के दौरान विभिन्न टूल्स को मैनेज करने में मदद कर सकता है: https://github.com/NotSoSecure/android_application_analyzer

Intent Injection

डेवलपर्स अक्सर proxy components जैसे activities, services, और broadcast receivers बनाते हैं जो इन Intents को हैंडल करते हैं और उन्हें startActivity(...) या sendBroadcast(...) जैसे methods को पास करते हैं, जो रिस्की हो सकता है।

खतरा इस बात में है कि attackers इन Intents को गलत दिशा में मोड़कर non-exported app components को ट्रिगर कर सकते हैं या sensitive content providers तक पहुँच बना सकते हैं। एक उल्लेखनीय उदाहरण WebView component है जो URLs को Intent objects में Intent.parseUri(...) के द्वारा कन्वर्ट करता है और फिर उन्हें execute कर सकता है, जिससे malicious Intent injections संभव हो सकते हैं।

Essential Takeaways

  • Intent Injection वेब के Open Redirect issue की तरह है।
  • Exploits में Intent objects को extras के रूप में पास करना शामिल है, जिन्हें redirect करके unsafe operations execute करवाए जा सकते हैं।
  • यह non-exported components और content providers को attackers के लिए expose कर सकता है।
  • WebView की URL से Intent conversion अनपेक्षित actions को आसान बना सकती है।

Android Client Side Injections and others

शायद आप Web से इस तरह की vulnerabilities के बारे में जानते होंगे। Android application में इन vulnerabilities के साथ विशेष सावधानी बरतनी चाहिए:

  • SQL Injection: जब dynamic queries या Content-Providers के साथ काम कर रहे हों तो सुनिश्चित करें कि आप parameterized queries का उपयोग कर रहे हैं।
  • JavaScript Injection (XSS): किसी भी WebViews के लिए JavaScript और Plugin support को disabled होना चाहिए (disabled by default)। More info here.
  • Local File Inclusion: WebViews को file system access disabled होना चाहिए (enabled by default) - (webview.getSettings().setAllowFileAccess(false);). More info here.
  • Eternal cookies: कई मामलों में जब Android application session समाप्त होती है तो cookie revoke नहीं होती या वह disk पर भी सेव हो सकती है।
  • Secure Flag in cookies

Automatic Analysis

MobSF

Static analysis

Vulnerability assessment of the application एक अच्छे web-based frontend के माध्यम से किया जाता है। आप dynamic analysis भी कर सकते हैं (लेकिन इसके लिए environment तैयार करना होगा)।

docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Notice that MobSF can analyse Android(apk), IOS(ipa) and Windows(apx) applications (Windows applications must be analyzed from a MobSF installed in a Windows host).
Also, if you create a ZIP file with the source code if an Android or an IOS app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.

MobSF also allows you to diff/Compare analysis and to integrate VirusTotal (you will need to set your API key in MobSF/settings.py and enable it: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). You can also set VT_UPLOAD to False, then the hash will be upload instead of the file.

Assisted Dynamic analysis with MobSF

MobSF Android में dynamic analysis के लिए भी बहुत उपयोगी हो सकता है, लेकिन इस स्थिति में आपको अपने host पर MobSF और genymotion install करने की आवश्यकता होगी (a VM या Docker काम नहीं करेंगे)। Note: You need to start first a VM in genymotion and then MobSF.
The MobSF dynamic analyser कर सकता है:

  • Dump application data (URLs, logs, clipboard, आपके द्वारा ली गई screenshots, “Exported Activity Tester” द्वारा ली गई screenshots, emails, SQLite databases, XML files, और अन्य बनाए गए फ़ाइलें). यह सब स्वचालित रूप से किया जाता है सिवाय screenshots के — स्क्रीनशॉट के लिए आपको जब स्क्रीनशॉट लेना हो तब बटन दबाना होगा या सभी exported activities के स्क्रीनशॉट प्राप्त करने के लिए आपको “Exported Activity Tester” दबाना होगा।
  • Capture HTTPS traffic
  • Use Frida to obtain runtime information

Android versions > 5 से, यह स्वतः ही Frida शुरू कर देगा और ट्रैफिक capture करने के लिए global proxy settings सेट कर देगा। यह केवल परीक्षण किए जा रहे application का ट्रैफिक ही capture करेगा।

Frida

By default, यह कुछ Frida Scripts का उपयोग करेगा ताकि SSL pinning, root detection और debugger detection को bypass किया जा सके और रोचक APIs की monitoring की जा सके।
MobSF exported activities को invoke भी कर सकता है, उनके screenshots ले सकता है और report के लिए उन्हें save कर सकता है।

Dynamic testing शुरू करने के लिए हरे बटन पर दबाएँ: “Start Instrumentation”. “Frida Live Logs” दबाकर आप Frida scripts द्वारा जनरेट किए गए logs देख सकते हैं और “Live API Monitor” दबाकर hooked methods के सभी invocation, पास किए गए arguments और returned values देख सकते हैं (यह “Start Instrumentation” दबाने के बाद दिखाई देगा).
MobSF आपको अपने खुद के Frida scripts भी load करने की अनुमति देता है (अपने Frida scripts के परिणाम MobSF को भेजने के लिए function send() का उपयोग करें)। इसमें कई pre-written scripts भी होते हैं जिन्हें आप load कर सकते हैं (आप और जोड़ सकते हैं MobSF/DynamicAnalyzer/tools/frida_scripts/others/ में), बस उन्हें select करें, “Load” दबाएँ और “Start Instrumentation” दबाएँ (आप उन scripts के logs “Frida Live Logs” के अंदर देख पाएंगे).

Moreover, you have some Auxiliary Frida functionalities:

  • Enumerate Loaded Classes: यह सभी loaded classes को print करेगा
  • Capture Strings: यह application उपयोग करते समय सभी captured strings को print करेगा (बहुत noisy)
  • Capture String Comparisons: बहुत उपयोगी हो सकता है। यह तुलना हो रही 2 strings दिखाएगा और परिणाम True था या False।
  • Enumerate Class Methods: क्लास का नाम डालें (जैसे “java.io.File”) और यह क्लास के सभी methods को print कर देगा।
  • Search Class Pattern: pattern द्वारा classes खोजें
  • Trace Class Methods: किसी पूरी class को Trace करें (क्लास के सभी methods के inputs और outputs देखें)। ध्यान रखें कि default रूप से MobSF कई रोचक Android Api methods को trace करता है।

एक बार जब आप वह auxiliary module चुन लेते हैं जिसे आप उपयोग करना चाहते हैं तो आपको “Start Intrumentation” दबाना होगा और आप सभी outputs “Frida Live Logs” में देखेंगे।

Shell

MobSF dynamic analysis पेज के नीचे आपको कुछ adb commands, MobSF commands, और सामान्य shell commands के साथ एक shell भी देता है। कुछ उपयोगी commands:

help
shell ls
activities
exported_activities
services
receivers

HTTP tools

जब HTTP ट्रैफिक कैप्चर होता है, आप कैप्चर किए गए ट्रैफिक का एक कच्चा दृश्य “HTTP(S) Traffic” बॉटम में देख सकते हैं या एक बेहतर दृश्य “Start HTTPTools” हरे बॉटन में। दूसरे विकल्प से, आप send किए गए captured requests को Burp या Owasp ZAP जैसे proxies को send कर सकते हैं.
ऐसा करने के लिए, power on Burp –> turn off Intercept –> in MobSB HTTPTools select the request –> प्रेस करें “Send to Fuzzer” –> select the proxy address (http://127.0.0.1:8080\).

एक बार जब आप MobSF के साथ dynamic analysis समाप्त कर लेते हैं तो आप “Start Web API Fuzzer” दबाकर http requests को fuzz कर सकते हैं और कमजोरियाँ ढूँढ सकते हैं।

Tip

MobSF के साथ dynamic analysis करने के बाद proxy सेटिंग्स गलत कॉन्फ़िगर हो सकती हैं और आप उन्हें GUI से ठीक नहीं कर पाएंगे। आप proxy सेटिंग्स को यह करके ठीक कर सकते हैं:

adb shell settings put global http_proxy :0

Assisted Dynamic Analysis with Inspeckage

आप यह टूल Inspeckage से प्राप्त कर सकते हैं।
यह टूल कुछ Hooks का उपयोग करेगा ताकि आप जान सकें what is happening in the application जबकि आप एक dynamic analysis कर रहे होते हैं।

Yaazhini

यह GUI के साथ static analysis करने का एक great tool है

Qark

यह टूल कई प्रकार की security related Android application vulnerabilities खोजने के लिए डिज़ाइन किया गया है, चाहे वह source code में हों या packaged APKs में। यह टूल कुछ पाए गए कमजोरियों (जैसे Exposed activities, intents, tapjacking…) का exploit करने के लिए “Proof-of-Concept” deployable APK और ADB commands भी बनाने में सक्षम है। Drozer की तरह, test device को root करने की आवश्यकता नहीं है।

pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • सभी निकाली गई फ़ाइलों को आसान संदर्भ के लिए दिखाता है
  • APK फ़ाइलों को स्वतः Java और Smali फॉर्मैट में decompile करता है
  • AndroidManifest.xml का common vulnerabilities और व्यवहार के लिए विश्लेषण करता है
  • Static source code analysis के माध्यम से common vulnerabilities और व्यवहार का विश्लेषण करता है
  • डिवाइस जानकारी
  • और भी
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER एक command-line application है जिसे Windows, MacOS X और Linux पर इस्तेमाल किया जा सकता है, जो .apk files का विश्लेषण कर vulnerabilities की तलाश करता है। यह APKs को decompress करके और उन vulnerabilities का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके ऐसा करता है।

सभी rules एक rules.json file में केंद्रित हैं, और प्रत्येक कंपनी या tester अपनी आवश्यकता के अनुसार analysis के लिए अपने rules बना सकती है।

नवीनतम binaries डाउनलोड करने के लिए download page देखें

super-analyzer {apk_file}

StaCoAn

StaCoAn एक crossplatform टूल है जो डेवलपर्स, bugbounty hunters और ethical hackers को मोबाइल एप्लिकेशन पर static code analysis करने में मदद करता है।

सिद्धांत यह है कि आप अपना मोबाइल एप्लिकेशन फ़ाइल (.apk या .ipa फ़ाइल) StaCoAn एप्लिकेशन पर drag and drop करते हैं और यह आपके लिए एक visual और portable रिपोर्ट जनरेट करेगा। आप settings और wordlists को tweak करके एक customized अनुभव प्राप्त कर सकते हैं।

Download latest release:

./stacoan

AndroBugs

AndroBugs Framework एक Android कमजोरियों का विश्लेषण करने वाली प्रणाली है जो डेवलपर्स या hackers को Android applications में संभावित सुरक्षा कमजोरियाँ खोजने में मदद करती है.
Windows releases

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

Androwarn एक ऐसा टूल है जिसका मुख्य उद्देश्य किसी Android एप्लिकेशन द्वारा विकसित संभावित दुर्भावनापूर्ण व्यवहारों का पता लगाना और उपयोगकर्ता को चेतावनी देना है।

डिटेक्शन एप्लिकेशन के Dalvik bytecode के static analysis, जो Smali के रूप में प्रस्तुत होता है, और androguard लाइब्रेरी के साथ किया जाता है।

यह टूल common behavior of “bad” applications जैसे निम्न का पता लगाता है: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution…

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

MARA एक Mobile Application Reverse engineering and Analysis Framework है। यह एक टूल है जो commonly used mobile application reverse engineering and analysis tools को एक साथ लाकर OWASP mobile security threats के खिलाफ mobile applications की testing में मदद करता है। इसका उद्देश्य mobile application developers और security professionals के लिए यह काम आसान और अधिक उपयोगकर्ता-अनुकूल बनाना है।

यह सक्षम है:

  • Extract Java and Smali code using different tools
  • Analyze APKs using: smalisca, ClassyShark, androbugs, androwarn, APKiD
  • APK से private information को regexps का उपयोग करके निकालना।
  • Manifest का विश्लेषण करना।
  • पाए गए domains का विश्लेषण करना using: pyssltest, testssl and whatweb
  • Deobfuscate APK via [apk-deguard.com]

Koodous

Useful to detect malware: https://koodous.com/

Obfuscating/Deobfuscating code

ध्यान दें कि जिस सेवा और configuration का आप उपयोग करते हैं कोड को obfuscate करने के लिए, उसके आधार पर secrets obfuscated हो सकते हैं या नहीं भी हो सकते हैं।

ProGuard

From Wikipedia: ProGuard एक open source command-line tool है जो Java code को shrink, optimize और obfuscate करता है। यह bytecode को optimize करने के साथ-साथ unused instructions का पता लगा कर उन्हें हटा सकता है। ProGuard free software है और यह GNU General Public License, version 2 के तहत वितरित किया जाता है।

ProGuard Android SDK का हिस्सा के रूप में वितरित होता है और application को release mode में build करते समय चलता है।

DexGuard

Deobfuscate करने के लिए एक step-by-step गाइड देखें: https://blog.lexfo.fr/dexguard.html

(उस गाइड से) जब हमने आखिरी बार जाँच की थी, Dexguard का mode of operation इस प्रकार था:

  • एक resource को InputStream के रूप में load करना;
  • परिणाम को decrypt करने के लिए FilterInputStream से inherit करने वाली एक class को feed करना;
  • reverser के कुछ मिनट बर्बाद करने के लिए कुछ बेकार obfuscation करना;
  • decrypted परिणाम को ZipInputStream में feed करके एक DEX file प्राप्त करना;
  • अंत में resulting DEX को Resource के रूप में loadDex method का उपयोग करके load करना।

DeGuard

DeGuard उस obfuscation प्रक्रिया को उलटता है जो Android obfuscation tools द्वारा की जाती है। इससे कई security analyses संभव होते हैं, जिनमें code inspection और libraries की पहचान शामिल हैं।

आप obfuscated APK अपने platform पर upload कर सकते हैं।

[Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app

यह एक LLM tool है जो android apps में किसी भी potential security vulnerabilities खोजने और android app code को deobfuscate करने के लिए है। Uses Google’s Gemini public API.

Simplify

यह एक generic android deobfuscator है। Simplify लगभग app को virtually execute करके इसके व्यवहार को समझता है और फिर code को optimize करने की कोशिश करता है ताकि यह व्यवहारically समान रहे परंतु human के लिए समझना आसान हो। प्रत्येक optimization type सरल और generic है, इसलिए यह मायने नहीं रखता कि कौन सा specific प्रकार का obfuscation इस्तेमाल किया गया है।

APKiD

APKiD आपको यह जानकारी देता है कि एक APK कैसे बनाई गई थी। यह कई compilers, packers, obfuscators और अन्य अजीब चीज़ों की पहचान करता है। यह Android के लिए PEiD है।

Manual

Read this tutorial to learn some tricks on how to reverse custom obfuscation

Labs

Androl4b

AndroL4b एक Android security virtual machine है जो ubuntu-mate पर आधारित है और इसमें reverse engineering और malware analysis के लिए latest framework, tutorials और labs का संग्रह शामिल है।

References

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 का समर्थन करें