⚡ Shadow Academy
🎮 Chapter 5

āĻāχ āĻ…āĻ§ā§āϝāĻžāϝāĻŧ⧇ āϕ⧀ āĻļāĻŋāĻ–āĻŦ⧇

⏱ āφāύ⧁āĻŽāĻžāύāĻŋāĻ• āϏāĻŽāϝāĻŧ: ā§§ā§Ģâ€“ā§¨ā§Ļ āĻŽāĻŋāύāĻŋāϟ ¡ āĻĒā§‚āĻ°ā§āĻŦāĻļāĻ°ā§āϤ: āφāϗ⧇āϰ āĻ…āĻ§ā§āϝāĻžāϝāĻŧ⧇āϰ āϧāĻžāϰāĻŖāĻž

ā§Ļ / ā§§ā§Ļā§Ļ āĻ…āĻ§ā§āϝāĻžā§ŸāϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāĻ“: āĻ…āĻ§ā§āϝāĻžāϝāĻŧ 6

āĻ…āĻ—ā§āϰāĻ—āϤāĻŋ āĻāχ browser-āĻ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāĻŦ⧇āĨ¤

🎮
Frida — Running App-āĻāϰ Memory Hack āĻ•āϰ⧋
SSL Pinning bypass, function hook, runtime manipulation
🧭 āĻĻāĻ•ā§āώāϤāĻž āϝāĻžāϚāĻžāχ āĻ“ āĻĒā§āϰāϤāĻŋāϰāĻ•ā§āώāĻžāĻŽā§‚āϞāĻ• takeaway
Skill checkpoint: āύāĻŋāϜāĻ¸ā§āĻŦ demo app-āĻ runtime instrumentation āϕ⧀ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖ āĻ•āϰ⧇ āϤāĻž āĻŦā§‹āĻā§‹āĨ¤
Defense checkpoint: Debug-only test build āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧋; production secrets āĻ“ user data āφāϞāĻžāĻĻāĻž āϰāĻžāĻ–ā§‹.
Lab scope: āĻļ⧁āϧ⧁ āύāĻŋāĻœā§‡āϰ lab, synthetic data āĻŦāĻž āϞāĻŋāĻ–āĻŋāϤ āĻ…āύ⧁āĻŽāϤāĻŋāĻĒā§āϰāĻžāĻĒā§āϤ target-āĻ āĻ…āύ⧁āĻļā§€āϞāύ āĻ•āϰ⧋āĨ¤ Real credential, token āĻŦāĻž customer data āĻŦā§āϝāĻŦāĻšāĻžāϰ āϕ⧋āϰ⧋ āύāĻžāĨ¤
Portfolio proof: finding, impact, fix āĻ“ retest āύāĻŋā§Ÿā§‡ ā§Ģ-āϞāĻžāχāύ⧇āϰ redacted note āϰāĻžāĻ–ā§‹āĨ¤
đŸĨ āϞāĻžāχāĻ­ āĻšāĻžāĻ°ā§āϟ āϏāĻžāĻ°ā§āϜāĻžāϰāĻŋ — Frida āϕ⧀?
JADX āĻĻāĻŋāϝāĻŧ⧇ decompile āĻ•āϰāĻž code āĻĒāĻĄāĻŧāϞ⧇ — āĻ•āĻŋāĻ¨ā§āϤ⧁ obfuscated, encryptedāĨ¤ āϕ⧀ āĻ•āϰāĻŦ⧇?

Frida = āϞāĻžāχāĻ­ āĻšāĻžāĻ°ā§āϟ āϏāĻžāĻ°ā§āϜāĻžāϰāĻŋāĨ¤ App āϚāϞāϤ⧇ āϚāϞāϤ⧇āχ āϭ⧇āϤāϰ⧇ āĻĸ⧁āϕ⧇ āϕ⧋āĻĄ āĻŦāĻĻāϞāĻžāĻ“!

Frida = Dynamic Instrumentation FrameworkāĨ¤ Running app-āĻāϰ memory-āϤ⧇ JavaScript inject āĻ•āϰ⧋āĨ¤ Source code āϞāĻžāϗ⧇ āύāĻž, decompile āϞāĻžāϗ⧇ āύāĻž — āϏāϰāĻžāϏāϰāĻŋ memory-āϤ⧇!
âš™ī¸ Frida Setup — Step by Step
PC-āϤ⧇ (Python install āĻĨāĻžāĻ•āϞ⧇): pip install frida-tools Android Phone-āĻ (Root required): 1. frida-server download āĻ•āϰ⧋ (phone architecture āĻ…āύ⧁āϝāĻžāϝāĻŧā§€) https://github.com/frida/frida/releases → frida-server-XX.X.X-android-arm64 (64-bit phone-āĻāϰ āϜāĻ¨ā§āϝ) 2. Push āĻ•āϰ⧋: adb push frida-server /data/local/tmp/frida-server 3. Permission āĻĻāĻžāĻ“ āĻ“ āϚāĻžāϞ⧁ āĻ•āϰ⧋: adb shell chmod 755 /data/local/tmp/frida-server adb shell /data/local/tmp/frida-server & 4. Connect āĻ“ hook āĻ•āϰ⧋: frida -U -n com.meesho.supply -l my_hook.js
đŸŽŖ Function Hooking — Function-āĻ āĻ•āĻžāρāϟāĻž āĻĢ⧇āϞ⧋
Frida āĻĻāĻŋāϝāĻŧ⧇ āϝ⧇āϕ⧋āύ⧋ Java function-āĻāϰ āφāϗ⧇/āĻĒāϰ⧇ code run āĻ•āϰāĻž āϝāĻžāϝāĻŧ:
// hook.js Java.perform(function() { // āϕ⧋āύ⧋ class-āĻāϰ method hook āĻ•āϰ⧋ var AuthManager = Java.use('com.meesho.auth.AuthManager'); AuthManager.getToken.implementation = function() { // āφāϗ⧇āϰ return value āύāĻžāĻ“ var token = this.getToken(); // Log āĻ•āϰ⧋ console.log('[FRIDA] Token found: ' + token); // āϚāĻžāχāϞ⧇ modify āĻ•āϰ⧋ // return "fake_token"; // Original return āĻ•āϰ⧋ return token; }; });
🔒 SSL Pinning Bypass — HTTPS āĻĻ⧇āĻ–āϤ⧇
App SSL Pinning āĻ•āϰ⧇ HTTP Toolkit block āĻ•āϰāϞ⧇ Frida āĻĻāĻŋāϝāĻŧ⧇ bypass āĻ•āϰ⧋:
// ssl_bypass.js (Universal bypass) Java.perform(function() { // OkHttp SSL Pinning bypass try { var OkHttpClient = Java.use('okhttp3.OkHttpClient'); // certificatePinner āĻšāϞ⧋ pinning check // Empty āĻ•āϰ⧇ āĻĻāĻŋāϞ⧇āχ bypass! } catch(e) {} // System TrustManager bypass var TrustManager = Java.use('com.android.org.conscrypt.TrustManagerImpl'); TrustManager.checkTrusted.implementation = function(chain, host, session) { console.log('[SSL] Bypassed: ' + host); return; // Check skip āĻ•āϰ⧋! }; });
💡 Frida CodeShare-āĻ pcipolloni/universal-android-ssl-pinning-bypass — āĻāĻ• click-āĻāχ āĻšāϝāĻŧ!
đŸĒ„ rpc.exports — Python āĻĨ⧇āϕ⧇ App control
Frida-āϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ powerful feature — Python āĻĻāĻŋāϝāĻŧ⧇ JS function call āĻ•āϰ⧋:
// hook.js rpc.exports = { getToken: function() { return Java.use('com.meesho.auth.TokenManager').getInstance().getToken(); }, getUserId: function() { return Java.use('com.meesho.user.UserManager').getCurrentUserId(); } }; # Python script: import frida device = frida.get_usb_device() session = device.attach('com.meesho.supply') script = session.create_script(open('hook.js').read()) script.load() token = script.exports.get_token() # App āĻĨ⧇āϕ⧇ token āύāĻŋāϝāĻŧ⧇ āĻāϞ⧋! print("Token:", token)
đŸŽ¯ Java.perform() āϕ⧇āύ āĻĻāϰāĻ•āĻžāϰ?
Frida-āϰ JavaScript Android-āĻāϰ Java VM-āĻ access āĻ•āϰ⧇āĨ¤ Java.perform() āĻĻāĻŋāϝāĻŧ⧇ Java VM-āĻāϰ āϏāĻžāĻĨ⧇ synchronize āĻ•āϰāϤ⧇ āĻšāϝāĻŧ:
// āϭ⧁āϞ — Java.perform() āĻ›āĻžāĻĄāĻŧāĻž Java API access: var cls = Java.use('com.example.Cls'); // Error! // āϏāĻ āĻŋāĻ•: Java.perform(function() { var cls = Java.use('com.example.Cls'); // ✅ Works! });
Java.perform() callback-āĻ āĻĨāĻžāĻ•āĻž code Java VM-āĻāϰ āϏāĻžāĻĨ⧇ synchronizedāĨ¤
💡 Chapter 5-āĻāϰ āĻŽā§‚āϞ āĻļāĻŋāĻ•ā§āώāĻž
🎮 Frida = Dynamic instrumentation — running process-āĻāϰ memory-āϤ⧇ JS inject āĻ•āϰ⧋
📁 frida-server = /data/local/tmp/ āĻ push āĻ•āϰ⧋, chmod 755
đŸŽŖ Function hook = implementation āϭ⧇āϤāϰ⧇ āύāϤ⧁āύ code — āφāϗ⧇āϰ call āĻ•āϰ⧋, log āĻ•āϰ⧋, modify āĻ•āϰ⧋
🔒 SSL Pinning bypass = TrustManagerImpl.checkTrusted() āϕ⧇ empty āĻ•āϰ⧋
đŸĒ„ rpc.exports = JS function Python āĻĨ⧇āϕ⧇ call āĻ•āϰāĻžāϰ magic
đŸŽ¯ Java.perform() = Java VM sync — āĻāϰ āϭ⧇āϤāϰ⧇ Java.use() āĻ•āϰāϤ⧇ āĻšāĻŦ⧇
đŸŽŖ Frida Hook Script Generator
Function name āĻĻāĻžāĻ“ — Frida hook script auto-generate āĻšāĻŦ⧇!
👆 āωāĻĒāϰ⧇ āĻ•āĻŋāϛ⧁ āĻĻāĻŋāϝāĻŧ⧇ āĻ˛ā§āϝāĻžāĻŦ āϚāĻžāϞ⧁ āĻ•āϰ⧋...
đŸŽ¯ Chapter 5 — āϕ⧁āχāϜ (ā§§ā§ĻāϟāĻž āĻĒā§āϰāĻļā§āύ)
āĻĒā§āϰāϤāĻŋāϟāĻž āωāĻ¤ā§āϤāϰ⧇ click āĻ•āϰ⧋ → āϏāĻŦ⧁āϜ/āϞāĻžāϞ + āĻŦā§āϝāĻžāĻ–ā§āϝāĻž!
❓ āĻĒā§āϰāĻļā§āύ 1: Frida āϕ⧀ āϧāϰāύ⧇āϰ tool?
💡 Frida = Dynamic Instrumentation FrameworkāĨ¤ App āϚāϞāϤ⧇ āϚāϞāϤ⧇ memory-āϤ⧇ JavaScript inject āĻ•āϰ⧇ behavior āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 2: frida-server āϕ⧋āĻĨāĻžāϝāĻŧ push āĻ•āϰāϤ⧇ āĻšāϝāĻŧ?
💡 /data/local/tmp/ āϤ⧇ push āĻ•āϰ⧋ āĻ•āĻžāϰāĻŖ āĻāĻ–āĻžāύ⧇ chmod +x (execute permission) āĻĻ⧇āĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤ /sdcard/-āĻ execute permission āύ⧇āχāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 3: Java.perform() āϕ⧇āύ āĻĻāϰāĻ•āĻžāϰ?
💡 Java.perform() callback-āĻ Java VM-āĻāϰ āϏāĻžāĻĨ⧇ synchronized context āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ — Java class āĻ“ method access āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 4: SSL Pinning Frida āĻĻāĻŋāϝāĻŧ⧇ bypass āĻ•āϰāϤ⧇ āϕ⧋āύ function hook āĻ•āϰāĻŦā§‹?
💡 SSL Pinning āϏāĻžāϧāĻžāϰāĻŖāϤ TrustManagerImpl āĻŦāĻž OkHttp CertificatePinner-āĻāĨ¤ empty implementation āĻĻāĻŋāϞ⧇ certificate check āĻšāϝāĻŧ āύāĻžāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 5: rpc.exports āϕ⧀ āĻ•āϰ⧇?
💡 rpc.exports āĻĻāĻŋāϝāĻŧ⧇ JS-āĻ defined function Python āĻĻāĻŋāϝāĻŧ⧇ call āĻ•āϰāĻž āϝāĻžāϝāĻŧ — script.exports.getToken() ← Python āĻĨ⧇āϕ⧇ app-āĻāϰ token āύāĻŋāϝāĻŧ⧇ āφāϏ⧋āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 6: Frida-āϤ⧇ .overload() āϕ⧇āύ āϞāĻžāϗ⧇?
💡 Java-āϤ⧇ overloaded method āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ .overload('java.lang.String') āĻĻāĻŋāϝāĻŧ⧇ specific version target āĻ•āϰ⧋āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 7: Rooted phone āĻ›āĻžāĻĄāĻŧāĻž Frida use āĻ•āϰāĻž āϝāĻžāϝāĻŧ?
💡 frida-gadget.so APK-āϤ⧇ inject āĻ•āϰ⧇ non-rooted device-āĻāĻ“ Frida āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ APKTool āĻĻāĻŋāϝāĻŧ⧇ smali-āϤ⧇ inject āĻ•āϰ⧋āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 8: Frida āĻĻāĻŋāϝāĻŧ⧇ root detection bypass āĻ•āϰāϤ⧇ āϕ⧀ āĻ•āϰāĻŦā§‹?
💡 Root detection function hook āĻ•āϰ⧋ (RootBeer.isRooted(), RootDetector.isDeviceRooted()) āĻāĻŦāĻ‚ return false āĻĻāĻžāĻ“āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 9: Dynamic analysis-āĻāϰ āϏ⧁āĻŦāĻŋāϧāĻž āϕ⧀?
💡 Dynamic = āϚāϞāĻžāϰ āϏāĻŽāϝāĻŧ analyzeāĨ¤ Obfuscated code-āĻāĻ“ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻ•āĻžāϰāĻŖ runtime-āĻ actual values āĻĻ⧇āĻ–āĻž āϝāĻžāϝāĻŧāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 10: Frida session crash āĻšāϞ⧇ āϕ⧀ āĻ•āϰāĻŦā§‹?
💡 Crash = wrong overload āĻŦāĻž null objectāĨ¤ try/catch āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧋, correct parameter types specify āĻ•āϰ⧋āĨ¤

āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āϤ reference

āφāϰāĻ“ āĻĒāĻĄāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϤāĻŋāĻˇā§āĻ āĻŋāϤ security standards āĻ“ guidance āĻĻ⧇āĻ–ā§‹; āĻĒā§āϰāϤāĻŋāϟāĻŋ lab āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āĻŦāĻž synthetic environment-āĻ āĻ•āϰ⧋āĨ¤

Bristy Ma'am
āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽ 👩‍đŸĢ
āϤ⧋āĻŽāĻžāϰ āĻĒāĻžāĻ°ā§āϏ⧋āύāĻžāϞ āĻšā§āϝāĻžāĻ•āĻŋāĻ‚ āĻŽā§‡āĻ¨ā§āϟāϰ â€ĸ āĻ…āύāϞāĻžāχāύ
āφāϰ⧇ āϏ⧌āϰāĻ­! āϕ⧇āĻŽāύ āφāϛ⧋? āϕ⧋āύ⧋ āĻ•āύāϏ⧇āĻĒā§āϟ āĻŦāĻž āϕ⧁āχāĻœā§‡ āφāϟāĻ•āĻžāϞ⧇ āφāĻŽāĻžāϕ⧇ āĻŦāϞ⧋, āφāĻŽāĻŋ āĻŦ⧁āĻāĻŋā§Ÿā§‡ āĻĻāĻŋāĻšā§āĻ›āĻŋ! â¤ī¸