์ˆ˜๋™ ๋‚œ๋…ํ™” ํ•ด์ œ ๊ธฐ๋ฒ•

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 ์ง€์›ํ•˜๊ธฐ

์ˆ˜๋™ ๋‚œ๋…ํ™” ํ•ด์ œ ๊ธฐ๋ฒ•

์†Œํ”„ํŠธ์›จ์–ด ๋ณด์•ˆ์˜ ์˜์—ญ์—์„œ, ๋‚œ๋…ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ดํ•ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ธ **๋‚œ๋…ํ™” ํ•ด์ œ(de-obfuscation)**๋Š” ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” ์ •์  ๋ถ„์„ ๊ธฐ๋ฒ•๊ณผ ๋‚œ๋…ํ™” ํŒจํ„ด ์ธ์‹์— ์ค‘์ ์„ ๋‘” ๋‹ค์–‘ํ•œ ๋‚œ๋…ํ™” ํ•ด์ œ ์ „๋žต์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹ค์Šต์šฉ ์—ฐ์Šต ๋ฌธ์ œ๋ฅผ ์†Œ๊ฐœํ•˜๊ณ , ๋” ๊ณ ๊ธ‰ ์ฃผ์ œ๋ฅผ ํƒ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์ถ”๊ฐ€ ์ž๋ฃŒ๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ •์  ๋‚œ๋…ํ™” ํ•ด์ œ ์ „๋žต

๋‚œ๋…ํ™”์˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์ „๋žต์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • DEX bytecode (Java): ํšจ๊ณผ์ ์ธ ์ ‘๊ทผ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‚œ๋…ํ™” ํ•ด์ œ ๋ฉ”์„œ๋“œ๋ฅผ ์‹๋ณ„ํ•œ ๋‹ค์Œ, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ Java ํŒŒ์ผ๋กœ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜์—ฌ ๋Œ€์ƒ ์š”์†Œ์˜ ๋‚œ๋…ํ™”๋ฅผ ์—ญ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Java and Native Code: ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ๋‚œ๋…ํ™” ํ•ด์ œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ Python ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ „๋žต์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๊ฐ€ ์•„๋‹ˆ๋ผ ํšจ๊ณผ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž„์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

๋‚œ๋…ํ™” ์‹๋ณ„ํ•˜๊ธฐ

๋‚œ๋…ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ธ์‹ํ•˜๋Š” ๊ฒƒ์ด ๋‚œ๋…ํ™” ํ•ด์ œ์˜ ์ฒซ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ์ง•ํ›„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • Java ๋ฐ Android์—์„œ ๋ฌธ์ž์—ด์ด ์—†๊ฑฐ๋‚˜ ์„ž์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ โ€” ๋ฌธ์ž์—ด ๋‚œ๋…ํ™”๋ฅผ ์˜์‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • assets ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์กด์žฌ ๋˜๋Š” DexClassLoader ํ˜ธ์ถœ โ€” ์ฝ”๋“œ ์–ธํŒจํ‚น๊ณผ ๋™์  ๋กœ๋”ฉ์„ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์‹๋ณ„ ๋ถˆ๊ฐ€ํ•œ JNI ํ•จ์ˆ˜์˜ ๋™์‹œ ์‚ฌ์šฉ โ€” ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ๋‚œ๋…ํ™”๋ฅผ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚œ๋…ํ™” ํ•ด์ œ์—์„œ์˜ ๋™์  ๋ถ„์„

์ œ์–ด๋œ ํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ๋™์  ๋ถ„์„์€ ๋‚œ๋…ํ™”๋œ ์ฝ”๋“œ๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ์˜ ์ง„์งœ ์˜๋„๋ฅผ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋ณต์žกํ•œ ๋‚œ๋…ํ™” ํŒจํ„ด์˜ ๋‚ด๋ถ€ ์ž‘๋™์„ ๋ฐํ˜€๋‚ด๋Š” ๋ฐ ํŠนํžˆ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

๋™์  ๋ถ„์„์˜ ์ ์šฉ ์‚ฌ๋ก€

  • ๋Ÿฐํƒ€์ž„ ๋ณตํ˜ธํ™”: ๋งŽ์€ ๋‚œ๋…ํ™” ๊ธฐ๋ฒ•์€ ๋ฌธ์ž์—ด์ด๋‚˜ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์•”ํ˜ธํ™”ํ•ด ๋‘๊ณ  ๋Ÿฐํƒ€์ž„์—๋งŒ ๋ณตํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋™์  ๋ถ„์„์„ ํ†ตํ•ด ๋ณตํ˜ธํ™” ์‹œ์ ์˜ ์š”์†Œ๋“ค์„ ์บก์ฒ˜ํ•˜์—ฌ ๊ทธ ์ง„์งœ ํ˜•ํƒœ๋ฅผ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‚œ๋…ํ™” ๊ธฐ๋ฒ• ์‹๋ณ„: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด code virtualization, packers, dynamic code generation๊ณผ ๊ฐ™์€ ํŠน์ • ๋‚œ๋…ํ™” ๊ธฐ๋ฒ•์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์ˆจ๊ฒจ์ง„ ๊ธฐ๋Šฅ ๋ฐœ๊ฒฌ: ๋‚œ๋…ํ™”๋œ ์ฝ”๋“œ๋Š” ์ •์  ๋ถ„์„๋งŒ์œผ๋กœ๋Š” ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š” ์ˆจ๊ฒจ์ง„ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์  ๋ถ„์„์€ ์กฐ๊ฑด๋ถ€๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ์ฝ”๋“œ ๊ฒฝ๋กœ๋ฅผ ๊ด€์ฐฐํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ˆจ๊ฒจ์ง„ ๊ธฐ๋Šฅ์„ ๋ฐํ˜€๋ƒ…๋‹ˆ๋‹ค.

Automated De-obfuscation with LLMs (Androidmeda)

์ด์ „ ์„น์…˜๋“ค์ด ์™„์ „ ์ˆ˜๋™ ์ „๋žต์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ๋Š” ๋ฐ˜๋ฉด, 2025๋…„์— ๋“ฑ์žฅํ•œ ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ(LLM) ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฒˆ๊ฑฐ๋กœ์šด ์ด๋ฆ„ ์žฌ์ •์˜ ๋ฐ ์ œ์–ด ํ๋ฆ„ ๋ณต์› ์ž‘์—…์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜๋Š” Androidmeda โ€“ jadx๋กœ ์ƒ์„ฑ๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋””์ปดํŒŒ์ผ๋œ Java ์†Œ์Šค๋ฅผ ๋ฐ›์•„ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์ฃผ์„๊ณผ ๋ณด์•ˆ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•œ ๋ฒ„์ „์„ ๋ฐ˜ํ™˜ํ•˜๋Š” Python ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ProGuard / DexGuard / DashO / Allatori / โ€ฆ๊ฐ€ ์ƒ์„ฑํ•œ ์˜๋ฏธ ์—†๋Š” ์‹๋ณ„์ž๋ฅผ semantic ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • control-flow flattening์„ ๊ฐ์ง€ํ•˜๊ณ  ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ๋ถˆํˆฌ๋ช…ํ•œ switch-case ์ƒํƒœ ๋จธ์‹ ์„ ์ •์ƒ์ ์ธ loops / if-else ๊ตฌ์กฐ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์ธ string encryption ํŒจํ„ด์„ ๋ณตํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ๋ธ”๋ก์˜ ๋ชฉ์ ์„ ์„ค๋ช…ํ•˜๋Š” inline comments๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ๋Ÿ‰ ์ •์  ๋ณด์•ˆ ์Šค์บ”์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ vuln_report.json์— ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€(informational โ†’ critical)์œผ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜

git clone https://github.com/In3tinct/Androidmeda
cd Androidmeda
pip3 install -r requirements.txt

์ž…๋ ฅ ์ค€๋น„

  1. jadx (๋˜๋Š” ๋‹ค๋ฅธ ๋””์ปดํŒŒ์ผ๋Ÿฌ)๋ฅผ ์‚ฌ์šฉํ•ด ๋Œ€์ƒ APK๋ฅผ ๋””์ปดํŒŒ์ผํ•˜๊ณ  .java ํŒŒ์ผ์ด ๋“ค์–ด์žˆ๋Š” source ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ์œ ์ง€ํ•˜์„ธ์š”:
jadx -d input_dir/ target.apk
  1. (์„ ํƒ) input_dir/๋ฅผ ๋ถ„์„ํ•˜๋ ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒจํ‚ค์ง€๋“ค๋งŒ ํฌํ•จํ•˜๋„๋ก ์ •๋ฆฌํ•˜์„ธ์š” โ€“ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ํฌ๊ฒŒ ๋นจ๋ผ์ง€๊ณ  LLM ๋น„์šฉ์ด ์ ˆ๊ฐ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์‹œ

์›๊ฒฉ ์ œ๊ณต์ž (Gemini-1.5-flash):

export OPENAI_API_KEY=<your_key>
python3 androidmeda.py \
--llm_provider google \
--llm_model gemini-1.5-flash \
--source_dir input_dir/ \
--output_dir out/ \
--save_code true

์˜คํ”„๋ผ์ธ (๋กœ์ปฌ ollama ๋ฐฑ์—”๋“œ, llama3.2 ์‚ฌ์šฉ):

python3 androidmeda.py \
--llm_provider ollama \
--llm_model llama3.2 \
--source_dir input_dir/ \
--output_dir out/ \
--save_code true

Output

  • out/vuln_report.json โ€“ file, line, issue, severity๋ฅผ ํฌํ•จํ•œ JSON ๋ฐฐ์—ด.
  • ๋ฏธ๋Ÿฌ๋œ ํŒจํ‚ค์ง€ ํŠธ๋ฆฌ์™€ ๋‚œ๋…ํ™” ํ•ด์ œ๋œ .java ํŒŒ์ผ๋“ค (๋‹จ, --save_code true์ผ ๊ฒฝ์šฐ์—๋งŒ).

Tips & troubleshooting

  • Skipped class โ‡’ ๋ณดํ†ต ํŒŒ์‹ฑํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์„œ๋“œ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค; ํŒจํ‚ค์ง€๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ํŒŒ์„œ ์ •๊ทœ์‹(parser regex)์„ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.
  • Slow run-time / high token usage โ‡’ ์ „์ฒด ๋””์ปดํŒŒ์ผ ๋Œ€์‹  --source_dir๋ฅผ ํŠน์ • ์•ฑ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ •ํ•˜์„ธ์š”.
  • ์ทจ์•ฝ์  ๋ณด๊ณ ์„œ๋Š” ํ•ญ์ƒ ์ˆ˜๋™์œผ๋กœ ๊ฒ€ํ† ํ•˜์„ธ์š” โ€“ LLM hallucinations๋Š” false positives / negatives๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Practical value โ€“ Crocodilus malware ์‚ฌ๋ก€ ์—ฐ๊ตฌ

2025๋…„ Crocodilus banking trojan์˜ ์‹ฌํ•˜๊ฒŒ ๋‚œ๋…ํ™”๋œ ์ƒ˜ํ”Œ์„ Androidmeda์— ํ†ต๊ณผ์‹œํ‚จ ๊ฒฐ๊ณผ ๋ถ„์„ ์‹œ๊ฐ„์ด ์‹œ๊ฐ„์—์„œ ๋ถ„์œผ๋กœ ๋‹จ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค: ๋„๊ตฌ๋Š” ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„ ์˜๋ฏธ๋ก ์„ ๋ณต๊ตฌํ•˜๊ณ , accessibility APIs์— ๋Œ€ํ•œ ํ˜ธ์ถœ๊ณผ ํ•˜๋“œ์ฝ”๋”ฉ๋œ C2 URLs์„ ๋“œ๋Ÿฌ๋ƒˆ์œผ๋ฉฐ, ๋ถ„์„๊ฐ€ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ„๊ฒฐํ•œ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.


DaliVM์„ ์‚ฌ์šฉํ•œ Dalvik ๋ฌธ์ž์—ด ๋ณตํ˜ธํ™” ํƒ€๊นƒํŒ…

DaliVM์€ Android๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ •์ ์œผ๋กœ ๋Ÿฐํƒ€์ž„ ์ „์šฉ ๊ฐ’(ํŠนํžˆ ๋ณตํ˜ธํ™”๋œ ๋ฌธ์ž์—ด)์„ ๋ณต๊ตฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” Python Dalvik ๋ฐ”์ดํŠธ์ฝ”๋“œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. Dalvik opcodes๋ฅผ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ณ  Android/Java APIs๋ฅผ ๋ชจํ‚นํ•˜์—ฌ APK ๋‚ด๋ถ€์˜ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ์šฐ

  1. ๋Œ€์ƒ ๋ฉ”์„œ๋“œ ์„ ํƒ โ€” Dalvik ์‹œ๊ทธ๋‹ˆ์ฒ˜๋กœ ์ง€์ • (Lpkg/Class;->method(Args)Ret). ์˜ˆ: Lutil/Crypto;->decrypt(Ljava/lang/String;)Ljava/lang/String;, LMyClass;->compute(II)I.
  2. ํ˜ธ์ถœ ์ง€์  ์—ด๊ฑฐ โ€” multi-DEX (classes*.dex) ์ „๋ฐ˜์—์„œ ํ˜ธ์ถœ ์ง€์ ์„ ์ฐพ๊ณ , ํ•„์š” ์‹œ ์—ญ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ถ”์ , ์ „๋ฐฉ ์กฐํšŒ, ๋ถ€๋ถ„ ์‹คํ–‰์„ ํ†ตํ•ด ์ธ์ž ๋ณต์›.
  3. Dalvik VM ๋‚ด๋ถ€์—์„œ ๋ฉ”์„œ๋“œ ์—๋ฎฌ๋ ˆ์ด์…˜ ์‹คํ–‰(120+ opcodes ์ง€์›, const/array/control/field/invoke ํฌํ•จ, <clinit>๋กœ ํด๋ž˜์Šค ์ดˆ๊ธฐํ™” ์ฒ˜๋ฆฌ)ํ•˜๊ณ  ๋ฐ˜ํ™˜ ๊ฐ’ ์ˆ˜์ง‘(์˜ˆ: ๋ณตํ˜ธํ™”๋œ ๋ฌธ์ž์—ด).
  4. ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ ์šฐํšŒ โ€” ๊ณตํ†ต Android APIs(Context, PackageManager, Signature, reflection, system services)์— ๋Œ€ํ•œ ๋‚ด์žฅ mocks์™€ Java stdlib(String/StringBuilder/Integer/Math/Arrays/List/Iterator)์šฉ ํ›…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  5. ์‹คํ–‰์ด ์ค‘๋‹จ๋˜๋ฉด, PC/๋ ˆ์ง€์Šคํ„ฐ ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•˜๊ณ  opcode ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด opcode-level tracing์„ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”.

CLI ์‚ฌ์šฉ๋ฒ•

# Emulate a decryptor and dump all returns
python emulate.py app.apk "Lcom/example/Decryptor;->decrypt"

# Verbose, debug trace, and limit outputs
python emulate.py app.apk "Lcom/example/Decryptor;->decrypt" -v --debug --limit 10

Outputs๋Š” ํ˜ธ์ถœ๋‹น ์ˆ˜์ง‘๋œ return values์ž…๋‹ˆ๋‹ค. ์ด๋Š” malware triage๋‚˜ ๊ณ ๋„๋กœ obfuscated๋œ ์•ฑ์—์„œ bulk string/config extraction์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ ๋ฐ ์ถ”๊ฐ€ ์ฝ์„๊ฑฐ๋ฆฌ

  • DaliVM: Python Dalvik emulator for static string decryption
  • https://maddiestone.github.io/AndroidAppRE/obfuscation.html
  • BlackHat USA 2018: โ€œUnpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Libraryโ€ [video]
  • ์ด ํ† ํฌ๋Š” Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š”, ๋‚ด๊ฐ€ ๋ณธ ๊ฒƒ ์ค‘ ๊ฐ€์žฅ ๋ณต์žกํ•œ anti-analysis native libraries ์ค‘ ํ•˜๋‚˜๋ฅผ reverse engineeringํ•˜๋Š” ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ฃผ๋กœ native code์—์„œ์˜ obfuscation techniques๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
  • REcon 2019: โ€œThe Path to the Payload: Android Editionโ€ [video]
  • ์ด ํ† ํฌ๋Š” Android botnet์ด ์ž์‹ ์˜ ๋™์ž‘์„ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด Java code์—์„œ๋งŒ ์‚ฌ์šฉํ•œ ์ผ๋ จ์˜ obfuscation techniques๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • Deobfuscating Android Apps with Androidmeda (๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ) โ€“ mobile-hacker.com
  • Androidmeda source code โ€“ https://github.com/In3tinct/Androidmeda

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 ์ง€์›ํ•˜๊ธฐ