From 4470f54f7254b4b59e6ced8d76c0fd77541be5e5 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 29 Sep 2025 12:18:30 +0000 Subject: [PATCH] Translated ['', 'src/mobile-pentesting/android-app-pentesting/android-an --- ...-instrumentation-and-ssl-pinning-bypass.md | 116 ++++++++++-------- 1 file changed, 67 insertions(+), 49 deletions(-) diff --git a/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md index 73fd45cf2..2ce969a2a 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md +++ b/src/mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md @@ -2,46 +2,46 @@ {{#include ../../banners/hacktricks-training.md}} -यह पृष्ठ उन Android ऐप्स के खिलाफ dynamic analysis को बहाल करने के लिए एक व्यावहारिक वर्कफ़्लो प्रदान करता है जो instrumentation का पता लगाते/रूट‑ब्लॉक करते हैं या TLS pinning लागू करते हैं। यह तेज़ triage, सामान्य detections, और बिना repacking के संभव होने पर उन्हें bypass करने के लिए copy‑pasteable hooks/tactics पर केन्द्रित है। +यह पृष्ठ उन Android apps के खिलाफ डायनामिक analysis वापस पाने के लिए एक व्यावहारिक वर्कफ़्लो प्रदान करता है जो instrumentation का पता लगाते/रूट‑ब्लॉक करते हैं या TLS pinning लागू करते हैं। यह तेज़ triage, सामान्य detections, और कॉपी‑पेस्ट करने योग्य hooks/tactics पर केंद्रित है ताकि संभव होने पर बिना repacking के उन्हें bypass किया जा सके। ## Detection Surface (what apps check) -- Root checks: su binary, Magisk paths, getprop values, common root packages -- Frida/debugger checks (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), scanning /proc, classpath, loaded libs +- रूट जाँच: su binary, Magisk paths, getprop values, common root packages +- Frida/debugger जाँच (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), scanning /proc, classpath, loaded libs - Native anti‑debug: ptrace(), syscalls, anti‑attach, breakpoints, inline hooks - Early init checks: Application.onCreate() or process start hooks that crash if instrumentation is present - TLS pinning: custom TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt pinning, native pins ## Step 1 — Quick win: hide root with Magisk DenyList -- Zygisk को Magisk में सक्षम करें -- DenyList सक्षम करें, लक्ष्य पैकेज जोड़ें +- Magisk में Zygisk सक्षम करें +- DenyList सक्षम करें, target package जोड़ें - रीबूट करें और पुनः परीक्षण करें -कई ऐप्स केवल स्पष्ट संकेतकों (su/Magisk paths/getprop) की तलाश करते हैं। DenyList अक्सर naive checks को बेअसर कर देता है। +कई ऐप्स केवल स्पष्ट संकेतकों (su/Magisk paths/getprop) की तलाश करते हैं। DenyList अक्सर सरल जाँचों को निष्क्रिय कर देता है। -References: +संदर्भ: - Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk ## Step 2 — 30‑second Frida Codeshare tests -गहराई से जाने से पहले सामान्य drop‑in scripts आज़माएँ: +गहराई में जाने से पहले सामान्य drop‑in scripts आज़माएँ: - anti-root-bypass.js - anti-frida-detection.js - hide_frida_gum.js -Example: +उदाहरण: ```bash frida -U -f com.example.app -l anti-frida-detection.js ``` -ये सामान्यतः Java के root/debug checks, process/service scans, और native ptrace() को stub करते हैं। हल्के सुरक्षा वाले apps में उपयोगी; hardened targets को tailored hooks की जरूरत पड़ सकती है। +ये आमतौर पर Java के root/debug checks, process/service scans, और native ptrace() को stub करते हैं। हल्के सुरक्षा वाले ऐप्स पर उपयोगी; hardened targets के लिए tailored hooks की जरूरत पड़ सकती है। - Codeshare: https://codeshare.frida.re/ -## Medusa (Frida framework) के साथ स्वचालित करें +## Medusa (Frida framework) के साथ ऑटोमेट करें -Medusa 90+ ready-made मॉड्यूल प्रदान करता है — SSL unpinning, root/emulator detection bypass, HTTP comms logging, crypto key interception, और अन्य के लिए। +Medusa 90+ ready-made मॉड्यूल प्रदान करता है जो SSL unpinning, root/emulator detection bypass, HTTP comms logging, crypto key interception, और अन्य के लिए हैं। ```bash git clone https://github.com/Ch0pin/medusa cd medusa @@ -54,31 +54,31 @@ use http_communications/multiple_unpinner use root_detection/universal_root_detection_bypass run com.target.app ``` -टिप: Medusa कस्टम hooks लिखने से पहले जल्दी नतीजे पाने के लिए बेहतरीन है। आप modules को cherry-pick करके उन्हें अपने scripts के साथ combine कर सकते हैं। +टिप: Medusa जल्दी नतीजे हासिल करने के लिए बेहतरीन है, custom hooks लिखने से पहले। आप modules को चुनकर उन्हें अपने scripts के साथ मिला सकते हैं। -## Step 3 — init-time detectors को late attach करके bypass करें +## Step 3 — init-time detectors को late attach करके बायपास करें -कई detections केवल process spawn/onCreate() के दौरान ही चलते हैं। Spawn‑time injection (-f) या gadgets पकड़े जा सकते हैं; UI load होने के बाद attach करने से वे छूट सकते हैं। +कई detections केवल process spawn/onCreate() के दौरान ही चलते हैं। Spawn‑time injection (-f) या gadgets पकड़े जाते हैं; UI लोड होने के बाद attach करने से ये बच सकते हैं। ```bash # Launch the app normally (launcher/adb), wait for UI, then attach frida -U -n com.example.app # Or with Objection to attach to running process aobjection --gadget com.example.app explore # if using gadget ``` -यदि यह काम करता है, तो session को स्थिर रखें और map और stub checks पर आगे बढ़ें। +यदि यह काम करता है, तो सत्र को स्थिर रखें और मैप तथा स्टब जांचों पर आगे बढ़ें। -## चरण 4 — Jadx और string hunting के माध्यम से detection logic को मैप करें +## Step 4 — Jadx और string hunting के माध्यम से detection logic का मैप बनाना -Static triage keywords in Jadx: +Jadx में Static triage के लिए keywords: - "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger" -सामान्य Java पैटर्न: +आम Java पैटर्न: ```java public boolean isFridaDetected() { return getRunningServices().contains("frida"); } ``` -सामान्य APIs जिन्हें review/hook करना चाहिए: +सामान्य APIs जिनकी review/hook की जानी चाहिए: - android.os.Debug.isDebuggerConnected - android.app.ActivityManager.getRunningAppProcesses / getRunningServices - java.lang.System.loadLibrary / System.load (native bridge) @@ -87,7 +87,7 @@ return getRunningServices().contains("frida"); ## चरण 5 — Runtime stubbing with Frida (Java) -custom guards को ओवरराइड करें ताकि वे repacking किए बिना सुरक्षित मान लौटाएँ: +repacking के बिना सुरक्षित मान लौटाने के लिए custom guards को override करें: ```js Java.perform(() => { const Checks = Java.use('com.example.security.Checks'); @@ -102,7 +102,7 @@ const AM = Java.use('android.app.ActivityManager'); AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); }; }); ``` -Triaging early crashes? Crash होने से ठीक पहले classes को dump करें ताकि संभावित detection namespaces का पता चल सके: +शुरुआती crashes का triage कर रहे हैं? क्रैश होने से ठीक पहले Dump classes करें ताकि संभावित detection namespaces का पता चल सके: ```js Java.perform(() => { Java.enumerateLoadedClasses({ @@ -119,7 +119,7 @@ RootChecker.isDeviceRooted.implementation = function () { return false; }; } catch (e) {} }); -संदिग्ध विधियों को लॉग करें और निष्क्रिय करें ताकि निष्पादन प्रवाह की पुष्टि हो: +संदिग्ध methods को Log और neuter करके execution flow की पुष्टि करें: ```js Java.perform(() => { const Det = Java.use('com.example.security.DetectionManager'); @@ -131,9 +131,9 @@ return false; ``` ## Bypass emulator/VM detection (Java stubs) -सामान्य संकेत: Build.FINGERPRINT/MODEL/MANUFACTURER/HARDWARE में generic/goldfish/ranchu/sdk का होना; QEMU artifacts जैसे /dev/qemu_pipe, /dev/socket/qemud; डिफ़ॉल्ट MAC 02:00:00:00:00:00; 10.0.2.x NAT; telephony/sensors का अभाव। +सामान्य संकेत: Build.FINGERPRINT/MODEL/MANUFACTURER/HARDWARE में generic/goldfish/ranchu/sdk शामिल होना; QEMU artifacts जैसे /dev/qemu_pipe, /dev/socket/qemud; default MAC 02:00:00:00:00:00; 10.0.2.x NAT; telephony/sensors की अनुपस्थिति। -Quick spoof of Build fields: +Build fields का त्वरित spoof: ```js Java.perform(function(){ var Build = Java.use('android.os.Build'); @@ -143,11 +143,11 @@ Build.BRAND.value = 'google'; Build.FINGERPRINT.value = 'google/panther/panther:14/UP1A.231105.003/1234567:user/release-keys'; }); ``` -फाइल अस्तित्व जांच और पहचानकर्ताओं (TelephonyManager.getDeviceId/SubscriberId, WifiInfo.getMacAddress, SensorManager.getSensorList) के लिए स्टब जोड़ें ताकि वे वास्तविक दिखने वाले मान लौटाएँ। +फ़ाइल अस्तित्व जांच और identifiers के लिए stubs जोड़ें (TelephonyManager.getDeviceId/SubscriberId, WifiInfo.getMacAddress, SensorManager.getSensorList) ताकि वे वास्तविक मान लौटाएँ। ## SSL pinning bypass quick hook (Java) -कस्टम TrustManagers को निष्क्रिय करें और परमीसिव SSL contexts लागू करें: +Custom TrustManagers को निष्क्रिय करें और permissive SSL contexts लागू करें: ```js Java.perform(function(){ var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager'); @@ -165,28 +165,28 @@ return SSLContextInit.call(this, km, TrustManagers, sr); }; }); ``` -नोट्स -- OkHttp के लिए: जरूरत के अनुसार okhttp3.CertificatePinner और HostnameVerifier को hook करें, या CodeShare से एक universal unpinning script का उपयोग करें +Notes +- OkHttp के लिए विस्तारित करें: आवश्यकतानुसार okhttp3.CertificatePinner और HostnameVerifier को hook करें, या CodeShare से एक universal unpinning script का उपयोग करें। - उदाहरण चलाएँ: `frida -U -f com.target.app -l ssl-bypass.js --no-pause` -## Step 6 — Java hooks असफल होने पर JNI/native trail का पालन करें +## Step 6 — जब Java hooks विफल हों तो JNI/native trail का अनुसरण करें JNI entry points को ट्रेस करके native loaders और detection init का पता लगाएँ: ```bash frida-trace -n com.example.app -i "JNI_OnLoad" ``` -बंडल किए गए .so फ़ाइलों का त्वरित native triage: +बंडल किए गए .so फ़ाइलों का त्वरित नेटिव प्राथमिक मूल्यांकन: ```bash # List exported symbols & JNI nm -D libfoo.so | head objdump -T libfoo.so | grep Java_ strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root' ``` -इंटरैक्टिव/नेटीव reversing: +इंटरैक्टिव/नैटिव reversing: - Ghidra: https://ghidra-sre.org/ - r2frida: https://github.com/nowsecure/r2frida -उदाहरण: libc में सरल anti‑debug को मात देने के लिए ptrace को निष्क्रिय करें: +उदाहरण: ptrace को निष्क्रिय करना ताकि libc में सरल anti‑debug को विफल किया जा सके: ```js const ptrace = Module.findExportByName(null, 'ptrace'); if (ptrace) { @@ -195,35 +195,35 @@ return -1; // pretend failure }, 'int', ['int', 'int', 'pointer', 'pointer'])); } ``` -इन्हें भी देखें: +इसे भी देखें: {{#ref}} reversing-native-libraries.md {{#endref}} ## चरण 7 — Objection patching (embed gadget / strip basics) -जब आप repacking को runtime hooks की बजाय प्राथमिकता देते हैं, तो कोशिश करें: +यदि आप runtime hooks के बजाय repacking को प्राथमिकता देते हैं, तो आज़माएँ: ```bash objection patchapk --source app.apk ``` -Notes: -- Requires apktool; ensure a current version from the official guide to avoid build issues: https://apktool.org/docs/install -- Gadget injection enables instrumentation without root but can still be caught by stronger init‑time checks. +नोट्स: +- apktool की आवश्यकता; बिल्ड समस्याओं से बचने के लिए आधिकारिक गाइड से नवीनतम संस्करण सुनिश्चित करें: https://apktool.org/docs/install +- Gadget injection बिना root के instrumentation सक्षम करता है, लेकिन मजबूत init‑time checks द्वारा अभी भी पकड़ा जा सकता है। -Optionally, add LSPosed modules and Shamiko for stronger root hiding in Zygisk environments, and curate DenyList to cover child processes. +वैकल्पिक रूप से, LSPosed modules और Shamiko जोड़ें ताकि Zygisk environments में root छुपाने में मजबूती आए, और child processes को कवर करने के लिए DenyList को curate करें। -References: +संदर्भ: - Objection: https://github.com/sensepost/objection -## Step 8 — Fallback: Patch TLS pinning for network visibility +## Step 8 — Fallback: नेटवर्क दृश्यता के लिए TLS pinning को पैच करें -If instrumentation is blocked, you can still inspect traffic by removing pinning statically: +यदि instrumentation अवरुद्ध है, तो आप pinning को स्थैतिक रूप से हटाकर ट्रैफ़िक का निरीक्षण कर सकते हैं: ```bash apk-mitm app.apk # Then install the patched APK and proxy via Burp/mitmproxy ``` - टूल: https://github.com/shroudedcode/apk-mitm -- नेटवर्क कॉन्फिग CA‑trust ट्रिक्स (और Android 7+ user CA trust) के लिए देखें: +- नेटवर्क कॉन्फ़िग CA‑trust ट्रिक्स (और Android 7+ user CA trust) के लिए देखें: {{#ref}} make-apk-accept-ca-certificate.md @@ -233,7 +233,7 @@ make-apk-accept-ca-certificate.md install-burp-certificate.md {{#endref}} -## उपयोगी कमांड चीट‑शीट +## उपयोगी कमांड चीट-शीट ```bash # List processes and attach frida-ps -Uai @@ -251,12 +251,30 @@ objection --gadget com.example.app explore # Static TLS pinning removal apk-mitm app.apk ``` -## सुझाव और चेतावनियाँ +## Universal proxy forcing + TLS unpinning (HTTP Toolkit Frida hooks) -- ऐप्स लॉन्च पर क्रैश होने पर spawning करने की बजाय देर से attaching करना बेहतर है -- कुछ detections महत्वपूर्ण फ्लो (जैसे payment, auth) में पुनः चलते हैं — navigation के दौरान hooks सक्रिय रखें -- Static और dynamic दोनों मिलाएँ: Jadx में string hunt करके क्लासेज़ shortlist करें; फिर runtime पर verify करने के लिए methods को hook करें -- Hardened apps packers और native TLS pinning का उपयोग कर सकते हैं — native code को reverse करने की उम्मीद रखें +आधुनिक apps अक्सर system proxies को ignore कर देते हैं और multiple layers of pinning (Java + native) लागू करते हैं, जिससे user/system CAs इंस्टॉल होने के बावजूद traffic capture कठिन हो जाता है। एक व्यावहारिक तरीका यह है कि universal TLS unpinning को proxy forcing के साथ जोड़ दिया जाए, तैयार Frida hooks का उपयोग करके, और सब कुछ mitmproxy/Burp के माध्यम से route किया जाए। + +Workflow +- अपने host पर mitmproxy (या Burp) चलाएँ। सुनिश्चित करें कि डिवाइस host IP/port तक पहुँच सके। +- HTTP Toolkit’s consolidated Frida hooks लोड करें ताकि TLS को unpin किया जा सके और सामान्य stacks (OkHttp/OkHttp3, HttpsURLConnection, Conscrypt, WebView, आदि) में proxy उपयोग को मजबूर किया जा सके। यह CertificatePinner/TrustManager checks को बायपास करता है और proxy selectors को ओवरराइड करता है, इसलिए ट्रैफ़िक हमेशा आपके proxy के जरिए भेजा जाता है भले ही ऐप स्पष्ट रूप से proxies को disable करे। +- Frida और hook script के साथ target app शुरू करें, और mitmproxy में requests कैप्चर करें। + +Example +```bash +# Device connected via ADB or over network (-U) +# See the repo for the exact script names & options +frida -U -f com.vendor.app \ +-l ./android-unpinning-with-proxy.js \ +--no-pause + +# mitmproxy listening locally +mitmproxy -p 8080 +``` +Notes +- संभव होने पर सिस्टम-व्यापी प्रॉक्सी के साथ संयोजन करें via `adb shell settings put global http_proxy :`. The Frida hooks प्रॉक्सी के उपयोग को लागू करेंगे भले ही ऐप्स global settings को बायपास करें। +- यह technique आदर्श है जब आपको MITM mobile-to-IoT onboarding flows की ज़रूरत हो जहाँ pinning/proxy avoidance सामान्य हो। +- Hooks: https://github.com/httptoolkit/frida-interception-and-unpinning ## संदर्भ