⚡ Shadow Academy
🎭 Chapter 13

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

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

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

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

🎭
Obfuscation — Encrypted Code āĻĒāĻĄāĻŧā§‹
ProGuard āĻ“ DexGuard-āĻāϰ āύāĻžāĻŽ āĻ­āĻžāρ⧜āĻžāύ⧋ āĻ“ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āωāĻ˛ā§āĻŸā§‡ āĻĢ⧇āϞāĻžāϰ āĻ•ā§ŒāĻļāϞ
🧭 āĻĻāĻ•ā§āώāϤāĻž āϝāĻžāϚāĻžāχ āĻ“ āĻĒā§āϰāϤāĻŋāϰāĻ•ā§āώāĻžāĻŽā§‚āϞāĻ• takeaway
Skill checkpoint: Obfuscation āϕ⧀ āĻ†ā§œāĻžāϞ āĻ•āϰ⧇ āĻāĻŦāĻ‚ analysis-āĻ āϕ⧀ āϏ⧂āĻ¤ā§āϰ āĻĨāĻžāϕ⧇ āϤāĻž āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰ⧋āĨ¤
Defense checkpoint: Obfuscation-āϕ⧇ secret storage āĻ­āĻžāĻŦāĻŦ⧇ āύāĻž; key āĻ“ credential āφāϞāĻžāĻĻāĻž āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āϰāĻžāĻ–ā§‹.
Lab scope: āĻļ⧁āϧ⧁ āύāĻŋāĻœā§‡āϰ lab, synthetic data āĻŦāĻž āϞāĻŋāĻ–āĻŋāϤ āĻ…āύ⧁āĻŽāϤāĻŋāĻĒā§āϰāĻžāĻĒā§āϤ target-āĻ āĻ…āύ⧁āĻļā§€āϞāύ āĻ•āϰ⧋āĨ¤ Real credential, token āĻŦāĻž customer data āĻŦā§āϝāĻŦāĻšāĻžāϰ āϕ⧋āϰ⧋ āύāĻžāĨ¤
Portfolio proof: finding, impact, fix āĻ“ retest āύāĻŋā§Ÿā§‡ ā§Ģ-āϞāĻžāχāύ⧇āϰ redacted note āϰāĻžāĻ–ā§‹āĨ¤
🧩 āĻ—āĻ˛ā§āĻĒ ā§§: āĻšā§€āύāĻž āĻ­āĻžāώāĻžā§Ÿ āϞ⧇āĻ–āĻž āĻĒā§āϰ⧇āĻŽā§‡āϰ āϚāĻŋāĻ āĻŋ — āĻ…āĻŦāĻĢāĻžāϏāϕ⧇āĻļāύ āϕ⧀?
āϏ⧌āϰāĻ­ JADX āĻĻāĻŋā§Ÿā§‡ āĻāĻ•āϟāĻŋ āĻŦ⧜ āĻļāĻĒāĻŋāĻ‚ āĻ…ā§āϝāĻžāĻĒ āĻĄāĻŋāĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰ⧇ āĻŽāĻžāĻĨāĻžā§Ÿ āĻšāĻžāϤ āĻĻāĻŋā§Ÿā§‡ āĻŦāϏāϞ!

āϕ⧋āĻĄā§‡āϰ āϭ⧇āϤāϰ āĻ•ā§āϞāĻžāϏ⧇āϰ āύāĻžāĻŽ: a.java, b.java, āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āύāĻžāĻŽ a(a aVar, b bVar), āφāϰ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ⧇āϰ āύāĻžāĻŽ c, d, e! āϕ⧋āĻĨāĻžāĻ“ āϕ⧋āύ⧋ āϏ⧋āϜāĻž āχāĻ‚āϰ⧇āϜāĻŋ āĻļāĻŦā§āĻĻ āύ⧇āχ!

āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽ āĻāĻ• āĻ•āĻžāĻĒ āϚāĻž āĻāĻ—āĻŋā§Ÿā§‡ āĻĻāĻŋā§Ÿā§‡ āĻŦāϞāϞ⧇āύ, "āϏ⧌āϰāĻ­, āĻāϟāĻžāϕ⧇ āĻŦāϞ⧇ ObfuscationāĨ¤ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāϰāĻž ProGuard āĻŦāĻž R8 āύāĻžāĻŽā§‡āϰ āϟ⧁āϞ āĻĻāĻŋā§Ÿā§‡ āϕ⧋āĻĄā§‡āϰ āϏāĻŦ āφāϏāϞ āύāĻžāĻŽ āĻŦāĻĻāϞ⧇ āϛ⧋āϟ āϛ⧋āϟ āχāĻ‚āϰ⧇āϜāĻŋ āĻ…āĻ•ā§āώāϰ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰ⧇, āϝāĻžāϤ⧇ āĻšā§āϝāĻžāĻ•āĻžāϰāĻĻ⧇āϰ āϕ⧋āĻĄ āĻĒā§œā§‡ āĻŽāĻžāĻĨāĻž āĻ–āĻžāϰāĻžāĻĒ āĻšā§Ÿā§‡ āϝāĻžā§Ÿ!"
🔤 āĻ—āĻ˛ā§āĻĒ ā§¨: āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āĻ“ āĻ—ā§‹āĻĒāύ API āĻĒāĻžāĻĨ
āĻļ⧁āϧ⧁ āύāĻžāĻŽ āĻŦāĻĻāϞāĻžāύ⧋āχ āύ⧟, āĻĒā§āϰ⧋-āϞ⧇āϭ⧇āϞ⧇āϰ āĻ…ā§āϝāĻžāĻĒ⧇ āϕ⧋āύ⧋ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĒā§āϞ⧇āχāύāĻŸā§‡āĻ•ā§āϏāĻŸā§‡ āĻĨāĻžāϕ⧇ āύāĻžāĨ¤

āϏāĻžāϧāĻžāϰāĻŖ āĻ…ā§āϝāĻžāĻĒ⧇ āϤ⧁āĻŽāĻŋ āϏāĻžāĻ°ā§āϚ āĻ•āϰāϤ⧇: https://api.training.example.test/orderāĨ¤
āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ…āĻŦāĻĢāĻžāϏāϕ⧇āĻŸā§‡āĻĄ āĻ…ā§āϝāĻžāĻĒ⧇ āĻĻ⧇āĻ–āĻŦ⧇:
String endpoint = decrypt(new byte[]{0x4d, 0x65, 0x65, 0x73, 0x68, 0x6f}, 0x5a);

āϤāĻžāϰāĻž XOR āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āĻŦāĻž AES āĻĻāĻŋā§Ÿā§‡ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āϗ⧁āϞ⧋āϕ⧇ āĻšā§‡āĻ•ā§āϏ āĻŦāĻž āĻŦāĻžāχāϟ āĻ…ā§āϝāĻžāϰ⧇ āĻŦāĻžāύāĻŋā§Ÿā§‡ āϞ⧁āĻ•āĻŋā§Ÿā§‡ āϰāĻžāϖ⧇ āϝāĻžāϤ⧇ āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āχāĻžā§āϜāĻŋāύāĻŋ⧟āĻžāϰāϰāĻž grep āĻ•āϰ⧇ āĻ•āĻŋāϛ⧁ āύāĻž āĻĒāĻžā§Ÿ!
đŸ”Ŧ āĻ—āĻ˛ā§āĻĒ ā§Š: āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽā§‡āϰ āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āĻ•ā§ŒāĻļāϞ — āĻŽā§‡āĻŽā§‹āϰāĻŋ āϝāĻ–āύ āϏāĻ¤ā§āϝ āĻŦāϞ⧇
"āϏ⧌āϰāĻ­, āϕ⧋āĻĄ āϝāϤ āχāĻšā§āϛ⧇ āĻšāĻŋāϜāĻŋāĻŦāĻŋāϜāĻŋ āĻšā§‹āĻ•, āĻ…ā§āϝāĻžāĻĒ āϝāĻ–āύ āϚāϞāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇, āϤāĻ–āύ āϤ⧋ āϤāĻžāϕ⧇ āϏ⧇āχ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĄāĻŋāĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒāĻžāĻ āĻžāϤ⧇āχ āĻšā§Ÿ!"

āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽā§‡āϰ āĻŽā§‹āĻ•ā§āώāĻŽ āϟāĻŋāĻĒāϏ:
ā§§. Static Deobfuscator: Jadx-āĻāϰ āϭ⧇āϤāϰ⧇ Deobfuscate (Rename) āĻ…āύ āĻ•āϰ⧋ — Jadx āύāĻŋāĻœā§‡ āĻĨ⧇āϕ⧇ āĻ…āĻ°ā§āĻĨāĻĒā§‚āĻ°ā§āĻŖ āύāĻžāĻŽ āϏāĻžāϜāĻŋā§Ÿā§‡ āĻĻ⧇āĻŦ⧇āĨ¤
⧍. Dynamic String Hooking: āϜāĻžāĻ­āĻžāϰ String.getBytes() āĻŦāĻž StringBuilder.toString()-āĻ āĻĢā§āϰāĻžāχāĻĄāĻž āĻšā§āĻ• āĻŦāϏāĻžāĻ“āĨ¤ āĻ…ā§āϝāĻžāĻĒ āϰāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŽā§Ÿ āϝāϤ āĻāύāĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āĻĄ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĄāĻŋāĻ•ā§āϰāĻŋāĻĒā§āϟ āĻšā§Ÿā§‡ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āĻŦāĻŋāĻ˛ā§āĻĄāĻžāϰ⧇ āφāϏāĻŦ⧇, āϏāĻŦ āϤ⧋āĻŽāĻžāϰ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āϟāĻĒāĻžāϟāĻĒ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇!
đŸ› ī¸ āĻ—āĻ˛ā§āĻĒ ā§Ē: XOR De-obfuscation āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽ āĻšāĻžāϤ⧇-āĻ•āϞāĻŽā§‡
āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āχāĻžā§āϜāĻŋāύāĻŋ⧟āĻžāϰāĻŋāĻ‚ā§Ÿā§‡ āϏāĻŦāĻšā§‡ā§Ÿā§‡ āϜāύāĻĒā§āϰāĻŋ⧟ āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āĻšāϞ⧋ XORāĨ¤

āϝāĻĻāĻŋ A ^ Key = Cipher āĻšā§Ÿ, āϤāĻŦ⧇ āĻŽāϜāĻžāϰ āĻŦā§āϝāĻžāĻĒāĻžāϰ āĻšāϞ⧋ Cipher ^ Key = A!
āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻāĻ•āχ āĻ•āĻŋ āĻĻāĻŋā§Ÿā§‡ āĻĻ⧁āχāĻŦāĻžāϰ āĻāĻ•ā§āϏ-āĻ…āϰ āĻ•āϰāϞ⧇āχ āφāϏāϞ āĻŸā§‡āĻ•ā§āϏāϟ āĻŦ⧇āϰāĻŋā§Ÿā§‡ āφāϏ⧇āĨ¤ āύāĻŋāĻšā§‡āϰ āĻ˛ā§āϝāĻžāĻŦ⧇ āφāĻŽāϰāĻž āĻāχ āĻāĻ•ā§āϏ-āĻ…āϰ āĻĄāĻŋāĻ•ā§āϰāĻŋāĻĒāĻļāύ āύāĻŋāĻœā§‡ āĻšāĻžāϤ⧇ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻŦ!
🔤 Native XOR String Decryptor Lab
āĻšā§‡āĻ•ā§āϏ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻ“ āĻšā§‡āĻ•ā§āϏ āĻ•āĻŋ āχāύāĻĒ⧁āϟ āĻĻāĻžāĻ“ — āϰāĻŋā§Ÿā§‡āϞ-āϟāĻžāχāĻŽ āĻāĻ•ā§āϏ-āĻ…āϰ āĻĄāĻŋāĻ•ā§āϰāĻŋāĻĒāĻļāύ āĻ•āϰ⧇ āφāϏāϞ āĻ—ā§‹āĻĒāύ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻŦ⧇āϰ āĻ•āϰ⧋!
👆 āωāĻĒāϰ⧇ āχāύāĻĒ⧁āϟ āĻĻāĻŋā§Ÿā§‡ "āĻ˛ā§āϝāĻžāĻŦ āϚāĻžāϞ⧁ āĻ•āϰ⧋" āĻŦāĻžāϟāύ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧋...
đŸŽ¯ Chapter 13 āϕ⧁āχāϜ (ā§§ā§ĻāϟāĻž āĻĒā§āϰāĻļā§āύ)
āĻĒā§āϰāϤāĻŋāϟāĻž āωāĻ¤ā§āϤāϰ⧇ click āĻ•āϰ⧋ → āϏāĻŦ⧁āϜ/āϞāĻžāϞ + āĻŦā§āϝāĻžāĻ–ā§āϝāĻž!
❓ āĻĒā§āϰāĻļā§āύ 1: Obfuscation āϕ⧇āύ āĻ•āϰāĻž āĻšāϝāĻŧ?
💡 Obfuscation = intentional code complexityāĨ¤ Attacker-āϰāĻž āϝāĻžāϤ⧇ easily API keys, logic āĻŦ⧇āϰ āĻ•āϰāϤ⧇ āύāĻž āĻĒāĻžāϰ⧇āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 2: ProGuard āϕ⧋āύ āϧāϰāύ⧇āϰ obfuscation āĻ•āϰ⧇?
💡 ProGuard name mangling āĻ•āϰ⧇ — getAuthToken() → a()āĨ¤ Code logic same āĻĨāĻžāϕ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ names meaninglessāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 3: String obfuscation bypass-āĻāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ method?
💡 Decrypt function Frida-āϤ⧇ hook āĻ•āϰ⧇ return value log āĻ•āϰāϞ⧇ plaintext automatically āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤ Static decrypt āĻ•āϰāĻžāϰ āĻĻāϰāĻ•āĻžāϰ āύ⧇āχāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 4: XOR encryption āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇?
💡 XOR-āĻāϰ property: A XOR B XOR B = AāĨ¤ Encrypt āĻ“ decrypt same operationāĨ¤ Key āϜāĻžāύāϞ⧇āχ decrypt āϏāĻŽā§āĻ­āĻŦāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 5: jadx --deobf flag āϕ⧀ āĻ•āϰ⧇?
💡 jadx-āĻāϰ --deobf flag āĻ•āĻŋāϛ⧁ automated deobfuscation āĻ•āϰ⧇ — class hierarchies āĻĨ⧇āϕ⧇ names infer āĻ•āϰ⧇āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 6: Control flow obfuscation āϕ⧀?
💡 Control flow obfuscation extra dead code, opaque predicates, jump instructions āĻĻāĻŋāϝāĻŧ⧇ code flow āĻŦā§‹āĻāĻž āĻ•āĻ āĻŋāύ āĻ•āϰ⧇āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 7: Dynamic analysis āϕ⧇āύ static analysis-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻ­āĻžāϞ⧋ obfuscated code-āĻ?
💡 Obfuscated code static analysis-āĻ confusingāĨ¤ Runtime-āĻ actual decrypted values memory-āϤ⧇ āĻĨāĻžāϕ⧇ — Frida āĻĻāĻŋāϝāĻŧ⧇ capture āĻ•āϰ⧋āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 8: R8 compiler āϕ⧀?
💡 R8 = Android-āĻāϰ default code shrinker/obfuscator (ProGuard-āĻāϰ successor)āĨ¤ AGP 3.4+ āĻĨ⧇āϕ⧇ defaultāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 9: Deobfuscation āĻŽāĻžāύ⧇ āϕ⧀?
💡 Deobfuscation = obfuscated code → readable formāĨ¤ Fully automatic āϏāĻŽā§āĻ­āĻŦ āύāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ partial recovery āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 10: String literal obfuscation bypass āĻ•āϰāĻžāϰ Python approach?
💡 App-āĻāϰ encryption logic extract āĻ•āϰ⧋ → Python-āĻ implement āĻ•āϰ⧋ → encrypted strings batch decrypt āĻ•āϰ⧋āĨ¤

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

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

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