⚡ Shadow Academy
🔌 Chapter 14

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

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

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

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

🔌
Protobuf āĻ“ gRPC — Binary API Decode āĻ•āϰ⧋
JSON āϝāĻ–āύ āĻ…āϚāϞ — āϗ⧁āĻ—āϞ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āĻŦāĻžāĻĢāĻžāĻ°ā§āϏ⧇āϰ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āĻĒā§œā§‡ āĻĄā§‡āϟāĻž āωāĻĻā§āϧāĻžāϰ
🧭 āĻĻāĻ•ā§āώāϤāĻž āϝāĻžāϚāĻžāχ āĻ“ āĻĒā§āϰāϤāĻŋāϰāĻ•ā§āώāĻžāĻŽā§‚āϞāĻ• takeaway
Skill checkpoint: Protobuf/gRPC message structure āĻ“ schema version āĻŦ⧁āĻā§‡ local sample decode āĻ•āϰ⧋āĨ¤
Defense checkpoint: Server-side authorization, size limit āĻ“ schema validation āϝ⧋āĻ— āĻ•āϰ⧋.
Lab scope: āĻļ⧁āϧ⧁ āύāĻŋāĻœā§‡āϰ lab, synthetic data āĻŦāĻž āϞāĻŋāĻ–āĻŋāϤ āĻ…āύ⧁āĻŽāϤāĻŋāĻĒā§āϰāĻžāĻĒā§āϤ target-āĻ āĻ…āύ⧁āĻļā§€āϞāύ āĻ•āϰ⧋āĨ¤ Real credential, token āĻŦāĻž customer data āĻŦā§āϝāĻŦāĻšāĻžāϰ āϕ⧋āϰ⧋ āύāĻžāĨ¤
Portfolio proof: finding, impact, fix āĻ“ retest āύāĻŋā§Ÿā§‡ ā§Ģ-āϞāĻžāχāύ⧇āϰ redacted note āϰāĻžāĻ–ā§‹āĨ¤
đŸ“Ļ āĻ—āĻ˛ā§āĻĒ ā§§: āϚāĻŋāĻ āĻŋāϰ āϜāĻžā§ŸāĻ—āĻžā§Ÿ āĻā§ā§œāĻŋāϤ⧇ āĻŦāĻ¨ā§āϧ āϏāĻŋāϞāĻŽā§‹āĻšāϰ — āĻĒā§āϰ⧋āĻŸā§‹āĻŦāĻžāĻĢ āϕ⧀?
āϏ⧌āϰāĻ­ āĻāĻ•āϟāĻŋ āĻšāĻžāχ-āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āϰāĻžāχāĻĄ āĻļā§‡ā§ŸāĻžāϰāĻŋāĻ‚ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻŸā§āĻ°ā§āϝāĻžāĻĢāĻŋāĻ• āχāĻ¨ā§āϟāĻžāϰāϏ⧇āĻĒā§āϟ āĻ•āϰāϞāĨ¤

āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āĻŋ! āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇ āϕ⧋āύ⧋ āĻšā§‡āύāĻž JSON āύ⧇āχ — {"price": 500}-āĻāϰ āĻŦāĻĻāϞ⧇ āĻļ⧁āϧ⧁āχ āĻ•āĻŋāϛ⧁ āĻ…āĻĻā§āĻ­ā§‚āϤ āĻŦāĻžāχāύāĻžāϰāĻŋ āϜāĻžāĻŦāϰāĻ•āĻžāϟāĻž āĻ•ā§āϝāĻžāϰ⧇āĻ•ā§āϟāĻžāϰ: –Sourav!

āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽ āĻŦāϞāϞ⧇āύ, "āϏ⧌āϰāĻ­, āĻŦ⧜ āĻŦ⧜ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϗ⧁āϞ⧋ āĻŸā§āĻ°ā§āϝāĻžāĻĢāĻŋāĻ• āϏāĻžāχāϜ ⧝ā§Ļ% āĻ•āĻŽāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻŸā§‡āĻ•ā§āϏāϟ JSON āĻŦāĻžāĻĻ āĻĻāĻŋā§Ÿā§‡ āϗ⧁āĻ—āϞ⧇āϰ āϤ⧈āϰāĻŋ Protobuf (Protocol Buffers) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āύāĻžāĻŽ āĻĨāĻžāϕ⧇ āύāĻž, āĻļ⧁āϧ⧁ āĻĢāĻŋāĻ˛ā§āĻĄ āύāĻžāĻŽā§āĻŦāĻžāϰ āφāϰ āĻ•āĻŽāĻĒā§āϝāĻžāĻ•ā§āϟ āĻŦāĻžāχāϟ āĻĨāĻžāϕ⧇!"
đŸ”Ŧ āĻ—āĻ˛ā§āĻĒ ā§¨: Wire Types — āϤāĻžāϰ⧇āϰ āϭ⧇āϤāϰ⧇āϰ āĻ­āĻžāώāĻžāϰ āĻŦā§āϝāĻžāĻ•āϰāĻŖ
āĻĒā§āϰ⧋āĻŸā§‹āĻŦāĻžāĻĢ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄā§‡āϟāĻžāϰ āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻ— āĻĨāĻžāϕ⧇āĨ¤ āĻŸā§āϝāĻžāĻ— āĻĨ⧇āϕ⧇āχ āĻŦā§‹āĻāĻž āϝāĻžā§Ÿ āĻĄā§‡āϟāĻžāϟāĻŋ āϕ⧀ āϧāϰāύ⧇āϰ:

â€ĸ Wire Type 0 (Varint): āχāĻ¨ā§āϟāĻŋāϜāĻžāϰ, āĻŦ⧁āϞāĻŋāϝāĻŧāĻžāύ (variable length integer)
â€ĸ Wire Type 1 (64-bit): āĻĢāĻŋāĻ•ā§āϏāĻĄ ā§Ž āĻŦāĻžāχāϟ āϏāĻ‚āĻ–ā§āϝāĻž āĻŦāĻž āĻĄāĻžāĻŦāϞ
â€ĸ Wire Type 2 (Length-delimited): āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚, āĻŦāĻžāχāϟāϏ āĻŦāĻž āύ⧇āĻ¸ā§āĻŸā§‡āĻĄ āϏāĻžāĻŦ-āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ
â€ĸ Wire Type 5 (32-bit): āĻĢāĻŋāĻ•ā§āϏāĻĄ ā§Ē āĻŦāĻžāχāϟ āĻĢā§āϞ⧋āϟ

āĻāχ āϰ⧁āϞ āϜāĻžāύāϞ⧇ āĻ¸ā§āĻ•āĻŋāĻŽāĻž āĻĢāĻžāχāϞ (.proto) āĻ›āĻžā§œāĻžāĻ“ āϤ⧁āĻŽāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻĒā§āϝāĻžāϕ⧇āϟ āĻĄāĻŋāϕ⧋āĻĄ āĻ•āϰ⧇ āĻĢ⧇āϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇!
đŸ› ī¸ āĻ—āĻ˛ā§āĻĒ ā§Š: APK āĻĨ⧇āϕ⧇ āφāϏāϞ .proto āĻ¸ā§āĻ•āĻŋāĻŽāĻž āϚ⧁āϰāĻŋ āĻ•āϰāĻž
āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽ āϏ⧌āϰāĻ­āϕ⧇ āĻŦāϞāϞ⧇āύ, "āĻŦāĻžāχāύāĻžāϰāĻŋ āĻĻ⧇āϖ⧇ āφāĻ¨ā§āĻĻāĻžāϜ āĻ•āϰāĻžāϰ āĻšā§‡ā§Ÿā§‡ āϝāĻĻāĻŋ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āϭ⧇āϤāϰ⧇āϰ āφāϏāϞ āĻŦā§āϞ⧁āĻĒā§āϰāĻŋāĻ¨ā§āϟāϟāĻž āĻĒā§‡ā§Ÿā§‡ āϝāĻžāχ, āϕ⧇āĻŽāύ āĻšā§Ÿ?"

ā§§. JADX Search: āĻ•ā§āϞāĻžāϏ⧇āϰ āϭ⧇āϤāϰ GeneratedMessageV3 āĻŦāĻž MessageLite āϞāĻŋāϖ⧇ āϏāĻžāĻ°ā§āϚ āĻ•āϰ⧋āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āφāϏāϞ āύāĻžāĻŽ āĻ“ āϟāĻžāχāĻĒ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻŽā§‡āĻĨāĻĄā§‡ āĻĒā§āϞ⧇āχāύ āϜāĻžāĻ­āĻžāϤ⧇ āϞ⧇āĻ–āĻž āĻĨāĻžāϕ⧇!
⧍. Protoc-dump & Mitmproxy: Mitmproxy-āĻāϰ āϏāĻžāĻĨ⧇ mitmproxy-protobuf āĻĒā§āϞāĻžāĻ—āχāύ āϞāĻžāĻ—āĻžāϞ⧇ āϝ⧇ āϕ⧋āύ⧋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻŸā§āĻ°ā§āϝāĻžāĻĢāĻŋāĻ• āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āϰāĻŋāĻĄā§‡āĻŦāϞ JSON-āĻ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻšā§Ÿā§‡ āĻ¸ā§āĻ•ā§āϰāĻŋāύ⧇ āϭ⧇āϏ⧇ āĻ“āϠ⧇!
⚡ āĻ—āĻ˛ā§āĻĒ ā§Ē: gRPC āĻ“āĻ­āĻžāϰ HTTP/2 — āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇āϰ āĻšā§āϝāĻžāĻ•āĻŋāĻ‚
Uber, Meesho, Netflix āĻāĻ–āύ āĻŽāĻžāχāĻ•ā§āϰ⧋āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āĻŽāĻ§ā§āϝ⧇ gRPC āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϝāĻž HTTP/2 āĻŽāĻžāĻ˛ā§āϟāĻŋāĻĒā§āϞ⧇āĻ•ā§āϏāĻŋāĻ‚ āĻĻāĻŋā§Ÿā§‡ āϚāϞ⧇āĨ¤

āφāĻŽāϰāĻž Burp Suite āĻŦāĻž Reqable-āĻ āĻĒā§āϰ⧋āĻŸā§‹āĻŦāĻžāĻĢ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏāϰāĻžāϏāϰāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āϰ āϭ⧇āϤāϰ⧇āϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻāĻĄāĻŋāϟ āĻ•āϰ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϰāĻŋ-āĻĒā§āϞ⧇ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ!
🔌 Protobuf Wire Type Decoder Lab
āĻĒā§āϰ⧋āĻŸā§‹āĻŦāĻžāĻĢ āĻšā§‡āĻ•ā§āϏ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ¸ā§āĻŸā§āϰāĻŋāĻŽ āχāύāĻĒ⧁āϟ āĻĻāĻžāĻ“ — āĻ“ā§Ÿā§āϝāĻžāϰ āϟāĻžāχāĻĒ āĻ“ āĻĢāĻŋāĻ˛ā§āĻĄ āĻĒāĻžāĻ°ā§āϏ āĻ•āϰ⧇ āϰāĻŋāĻ•āĻ¨ā§āϏāĻŸā§āϰāĻžāĻ•ā§āĻŸā§‡āĻĄ āĻĄā§‡āϟāĻž āĻĻ⧇āĻ–ā§‹!
👆 āωāĻĒāϰ⧇ āχāύāĻĒ⧁āϟ āĻĻāĻŋā§Ÿā§‡ "āĻ˛ā§āϝāĻžāĻŦ āϚāĻžāϞ⧁ āĻ•āϰ⧋" āĻŦāĻžāϟāύ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧋...
đŸŽ¯ Chapter 14 āϕ⧁āχāϜ (ā§§ā§ĻāϟāĻž āĻĒā§āϰāĻļā§āύ)
āĻĒā§āϰāϤāĻŋāϟāĻž āωāĻ¤ā§āϤāϰ⧇ click āĻ•āϰ⧋ → āϏāĻŦ⧁āϜ/āϞāĻžāϞ + āĻŦā§āϝāĻžāĻ–ā§āϝāĻž!
❓ āĻĒā§āϰāĻļā§āύ 1: Protobuf āϕ⧀?
💡 Protobuf = Protocol BuffersāĨ¤ Binary format — JSON āĻāϰ āĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ, fasterāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 2: Protobuf vs JSON āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ?
💡 JSON = human-readable textāĨ¤ Protobuf = binary — smaller, faster, but not human-readableāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 3: gRPC āϕ⧀?
💡 gRPC = Google RPCāĨ¤ Protobuf encoding + HTTP/2 transportāĨ¤ Microservices-āĻ popularāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 4: blackboxprotobuf āϕ⧀ āĻ•āĻžāϜ āĻ•āϰ⧇?
💡 blackboxprotobuf = reverse Protobuf decoderāĨ¤ .proto schema āĻ›āĻžāĻĄāĻŧāĻžāχ binary data decode āĻ•āϰ⧇ field numbers āĻ“ valuesāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 5: Protobuf data HTTP Toolkit-āĻ āϕ⧇āĻŽāύ āĻĻ⧇āĻ–āĻžāϝāĻŧ?
💡 Protobuf binary — HTTP Toolkit-āĻ garbled text āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤ blackboxprotobuf āĻŦāĻž protoscope āĻĻāĻŋāϝāĻŧ⧇ decode āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 6: grpcurl āϕ⧀ āĻ•āĻžāϜ āĻ•āϰ⧇?
💡 grpcurl = gRPC-āĻāϰ curlāĨ¤ CLI āĻĨ⧇āϕ⧇ gRPC services list āĻ•āϰ⧋ āĻ“ request āĻĒāĻžāĻ āĻžāĻ“āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 7: JADX-āĻ Protobuf .proto schema āϕ⧋āĻĨāĻžāϝāĻŧ āϖ⧁āρāϜāĻŦā§‹?
💡 JADX-āĻ 'MessageLite' āĻŦāĻž 'GeneratedMessageV3' search āĻ•āϰāϞ⧇ Protobuf-generated classes āĻĒāĻžāĻŦ⧇āĨ¤ Field names extract āĻ•āϰ⧋āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 8: Protobuf field number āϕ⧀?
💡 Protobuf-āĻ field name āύ⧇āχ binary-āϤ⧇ — āĻļ⧁āϧ⧁ numberāĨ¤ Field 1 = āϕ⧀ āϤāĻž .proto schema āĻĻ⧇āϖ⧇ āϜāĻžāύāϤ⧇ āĻšāϝāĻŧāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 9: HTTP/2 āϕ⧇āύ gRPC-āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšāϝāĻŧ?
💡 HTTP/2 = multiplexed streams, binary framing, server pushāĨ¤ gRPC streaming RPCs-āĻāϰ āϜāĻ¨ā§āϝ idealāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 10: Protobuf intercept āĻ•āϰāĻžāϰ āĻĒāϰ āϕ⧀āĻ­āĻžāĻŦ⧇ modify āĻ•āϰāĻŦā§‹?
💡 blackboxprotobuf āĻĻāĻŋāϝāĻŧ⧇ decode → Python-āĻ field modify → encode_message() āĻĻāĻŋāϝāĻŧ⧇ re-encode → modified binary āĻĒāĻžāĻ āĻžāĻ“āĨ¤

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

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

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