Skip to content
KitploitKITPLOIT
๋„๊ตฌ๋ธ”๋กœ๊ทธ
์ œ์ถœ
๋„๊ตฌ๋ธ”๋กœ๊ทธ
์ œ์ถœ

ํ•ดํ‚น, ์นจํˆฌ ํ…Œ์ŠคํŠธ ๋ฐ ์‚ฌ์ด๋ฒ„ ๋ณด์•ˆ ๋„๊ตฌ๋ฅผ ๋‹น์‹ ์˜ ๋ณด์•ˆ ๋ฌด๊ธฐ๊ณ ์—!

Kitploit์€ ํ•ดํ‚น, ์‚ฌ์ด๋ฒ„ ๋ณด์•ˆ ๋ฐ ์นจํˆฌ ํ…Œ์ŠคํŠธ ๋„๊ตฌ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ํ”„๋กœ์ ํŠธ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐœ๊ฒฌํ•˜์—ฌ ์ทจ์•ฝ์ ์„ ์ฐพ๊ณ , ์‹œ์Šคํ…œ์„ ๋ถ„์„ํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ , ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜์„ธ์š”.

ยทยทํ”ผ๋“œยท๋ฌธ์˜ยท๊ฐœ์ธ์ •๋ณดยทยฉ 2026 Kitploit

๋„๊ตฌ ๋””๋ ‰ํ† ๋ฆฌ

์นดํ…Œ๊ณ ๋ฆฌ

๋ชจ๋“  ์นดํ…Œ๊ณ ๋ฆฌ ๋ณด๊ธฐ
Loading categories
๋„๊ตฌ/GitHubGitHub/nighthawkk/audioserver-voip-recorder
Android SecurityReverse EngineeringMobile Security
GitHubnighthawkk/audioserver-voip-recorder

AudioServer-Voip-Recorder

๐Ÿ”ฌ libaudioflinger.so๋ฅผ ๋™์ ์œผ๋กœ ํ›„ํ‚น(hooking)ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ VoIP ์˜ค๋””์˜ค ์บก์ฒ˜(Uplink/Downlink)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณ ๊ธ‰ Android ์—ฐ๊ตฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Android 14์˜ WhatsApp, Signal, Telegram์—์„œ ํ…Œ์ŠคํŠธ ๋ฐ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ €์žฅ์†Œ ๋ณด๊ธฐ

์ธ๊ธฐ

๋ชจ๋‘ ๋ณด๊ธฐ โ†’

์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”.

๋ชจ๋“  ๋„๊ตฌ ํƒ์ƒ‰

๋„๊ตฌ ์ปฌ๋ ‰์…˜์„ ๋‘˜๋Ÿฌ๋ณด์„ธ์š”

๋ชจ๋“  ๋„๊ตฌ ๋ณด๊ธฐ โ†’
๊ณต์œ 
316020์ผ ์ „์•„์ง ๊ฒ€ํ† ๋˜์ง€ ์•Š์Œ

๋ชฉํ‘œ: Android์˜ audioserver(ํŠนํžˆ libaudioflinger.so)๋ฅผ ํ›„ํ‚นํ•˜๊ณ  ์‹œ์Šคํ…œ์ด ํ†ตํ™”(communication) ๋ชจ๋“œ์— ์žˆ์„ ๋•Œ ์—…๋งํฌ(๋งˆ์ดํฌ) ๋ฐ ๋‹ค์šด๋งํฌ(์Šคํ”ผ์ปค) PCM ๋ฒ„ํผ๋ฅผ ๊ธฐ๋กํ•˜์—ฌ VoIP ์ŠคํŠธ๋ฆผ ์บก์ฒ˜๋ฅผ ์‹œ์—ฐํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์„ค๊ณ„ ๋ฐ ๋ฐฉ๋ฒ•๋ก 

์•„ํ‚คํ…์ฒ˜:

  • ์ปจํŠธ๋กค๋Ÿฌ ์•ฑ (Android)
    SELINUX ์ •์ฑ… ์„ค์ •, ํŽ˜์ด๋กœ๋“œ ์ฃผ์ž…, ๋ฐ์ดํ„ฐ ์ด๋™, ์žฌ์ƒ์„ ๊ด€๋ฆฌํ•˜๋Š” 9๊ฐœ์˜ ๋ฒ„ํŠผ์ด ์žˆ๋Š” UI์ž…๋‹ˆ๋‹ค.

  • ํŽ˜์ด๋กœ๋“œ (libaudiohook.so)
    ์•ฑ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ ๋นŒ๋“œ๋˜๋Š” C++ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, Dobby๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ AudioFlinger ๋ฉ”์„œ๋“œ๋ฅผ ํ›„ํ‚นํ•˜๊ณ  ์›์‹œ PCM ๋ฒ„ํผ๋ฅผ ์„ธ์…˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

  • ํ›„์ฒ˜๋ฆฌ
    ์ถ”๊ฐ€ ๋„๊ตฌ์ธ tools/audioparser.py๋Š” ์›์‹œ .ac(๋‹ค์šด๋งํฌ)/.bc(์—…๋งํฌ) ํŒŒ์ผ์„ WAV๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์˜ ํŒŒ์ผ ๊ด€๋ฆฌ์ž๋„ ์•ฑ ๋‚ด์—์„œ ๋ณ€ํ™˜ ๋ฐ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฐ๊ตฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ
    ์ดˆ๊ธฐ ํ•จ์ˆ˜ ์ถ”์  ๋ฐ ์˜คํ”„์…‹ ๋ฐœ๊ฒฌ์„ ์œ„ํ•œ Frida ์Šคํฌ๋ฆฝํŠธ; ์‹ฌ๋ณผ/์˜คํ”„์…‹ ๋ฐ ๊ธฐํƒ€ ์Šค๋‹ˆํŽซ์„ ์œ„ํ•œ ๋ถ„์„ ํŒŒ์ผ.

์ปจํŠธ๋กค๋Ÿฌ ์•ฑ

์ด Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ audioserver๋ฅผ ํ†ตํ•œ VoIP ๋…น์Œ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Android ์˜ค๋””์˜ค ์Šคํƒ์„ ํ›„ํ‚นํ•˜์—ฌ VoIP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋งˆ์ดํฌ ๋ฐ ์Šคํ”ผ์ปค ์˜ค๋””์˜ค๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ํŽ˜์ด๋กœ๋“œ์™€ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค.

์ด ์•ฑ์€ ํ•„์š”ํ•œ SELinux ์ •์ฑ… ์ฃผ์ž…, ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์ž‘/์ค‘์ง€, ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ, ์บก์ฒ˜๋œ VoIP ์˜ค๋””์˜ค ํŒŒ์ผ ์žฌ์ƒ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์–ด ์„ผํ„ฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ

๋ฉ”์ธ ์•กํ‹ฐ๋น„ํ‹ฐ์—๋Š” 9๊ฐœ์˜ ์ œ์–ด ๋ฒ„ํŠผ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ์ •์ฑ… ์ฃผ์ž…
    audioserver์™€ ์ด ์•ฑ์ด ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ SELinux ์ •์ฑ…์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์ž‘
    ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŽ˜์ด๋กœ๋“œ๋ฅผ audioserver์— ์ฃผ์ž…ํ•˜์—ฌ RecordTrack ๋ฐ PlaybackTrack์„ ํ›„ํ‚นํ•จ์œผ๋กœ์จ VoIP ์˜ค๋””์˜ค ์บก์ฒ˜๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค ์ฃผ์ž…์—๋Š” **AndKittyInjector**๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ชจ๋‹ˆํ„ฐ๋ง ์ค‘์ง€
    audioserver ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ค‘์ง€ํ•˜๊ณ  ์ฃผ์ž…๋œ ํ›„ํฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ
    ์บก์ฒ˜๋œ ์›์‹œ PCM ์˜ค๋””์˜ค๋ฅผ ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ /data/local/tmp/voip์—์„œ /sdcard/voip๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    • ๊ทธ ํ›„ ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  5. ๋กœ๊ทธ ๋ณด๊ธฐ
    ์ฃผ์ž…, ํ›„ํ‚น, ๋…น์Œ ์ƒํƒœ์™€ ๊ด€๋ จ๋œ ๋กœ๊ทธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  6. SELinux ํ™œ์„ฑํ™”
    SELinux ๊ฐ•์ œ(enforcing) ๋ชจ๋“œ๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

  7. SELinux ๋น„ํ™œ์„ฑํ™”
    SELinux๋ฅผ ํ—ˆ์šฉ(permissive) ๋ชจ๋“œ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์ž…๋œ ์ •์ฑ…์ด ์‹คํŒจํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  8. ์˜ค๋””์˜ค ์žฌ์ƒ
    ์‚ฌ์šฉ์ž ์ง€์ • VoIP ํŒŒ์ผ ๊ด€๋ฆฌ์ž(/sdcard/voip/)๋ฅผ ์—ฝ๋‹ˆ๋‹ค:

    • ์›์‹œ PCM ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ WAV ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณ€ํ™˜๋œ ์˜ค๋””์˜ค๋ฅผ ์•ฑ ๋‚ด์—์„œ ์ง์ ‘ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.
  9. ๋ฐ์ดํ„ฐ ์‚ญ์ œ
    /data/local/tmp/voip ๋ฐ ์˜ ๋ชจ๋“  ์˜ค๋””์˜ค ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. : ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ›„์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ์„ ์œ„ํ•ด ์— ๋‹ค์‹œ ์ฃผ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

root@kitploit:~
+----------------------+    
|                      |    
|   App MainActivity   |    
|                      |    
|                      |    
|(9 Control Buttons UI)|    
|                      |    
|                      |    
+----------+-----------+    
           |                
           |                
           |                
+----------v-----------+    
|                      |    
|       JNI Layer      |    
|                      |    
| Selinux, Process Inje|    
| ction,               |    
|                      |    
|                      |    
+----------------------+    

ํ›„ํ‚น ํŽ˜์ด๋กœ๋“œ

์ด ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” **audioserver**์— ์ฃผ์ž…๋˜์–ด AUDIO_MODE_IN_COMMUNICATION์„ ๊ฐ์ง€ํ•˜๊ณ  ๋ฏธ๋ฆฌ ์ •์˜๋œ ํŒจํ‚ค์ง€ ์ด๋ฆ„ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด Android ์˜ค๋””์˜ค ์Šคํƒ์—์„œ ์ง์ ‘ VoIP ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ์„ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.

libaudioflinger.so ๋‚ด๋ถ€์˜ ์ค‘์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€๋กœ์ฑ„๊ธฐ ์œ„ํ•ด Dobby ์ธ๋ผ์ธ ํ›„ํ‚น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์—…๋งํฌ(๋งˆ์ดํฌ) ๋ฐ ๋‹ค์šด๋งํฌ(์Šคํ”ผ์ปค) ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ์ด ๋ชจ๋‘ ์บก์ฒ˜๋˜์–ด ์ดํ›„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜ ํŒŒ์ผ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

ํ›„ํ‚น ์ง€์ 

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” AudioFlinger ๋ฐ ๊ด€๋ จ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋‹ค์Œ ํ•จ์ˆ˜์— ํ›„ํฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

๋Œ€์ƒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” UID โ†’ ํŒจํ‚ค์ง€ ๋งคํ•‘์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ŠคํŠธ๋ฆผ์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ชจ๋‹ˆํ„ฐ๋ง๋˜๋Š” ์•ฑ:

  • com.whatsapp
  • com.whatsapp.w4b (WhatsApp Business)
  • org.thoughtcrime.securesms (Signal)
  • org.telegram.messenger
  • org.telegram.messenger.web

audioserver_hook.cpp ์•ˆ์— ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

root@kitploit:~
static const char* kTargetPackages[] = {  
    "com.whatsapp",  
    "com.whatsapp.w4b",  
    "org.thoughtcrime.securesms",  
    "org.telegram.messenger",  
    "org.telegram.messenger.web"  
};

ํŒŒ์ผ ์ถœ๋ ฅ

  • ์„ธ์…˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” audioserver์— ์ฃผ์ž…ํ•  ๋•Œ ๋‹ค์Œ ๊ฒฝ๋กœ ์•„๋ž˜์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค: /data/local/tmp/voip/audioserver_session_<timestamp>/

  • ํŒŒ์ผ์€ ์ฒ˜์Œ์— .tmp ํ™•์žฅ์ž๋กœ ์ƒ์„ฑ๋œ ํ›„ ํŠธ๋ž™ ์ค‘์ง€ ์‹œ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค:

    • ์—…๋งํฌ (๋งˆ์ดํฌ) โ†’ <packageName>_<sampleRate>_<timestamp>.bc
    • ๋‹ค์šด๋งํฌ (์Šคํ”ผ์ปค) โ†’ <packageName>_<sampleRate>_<timestamp>.ac
  • ์˜ˆ์‹œ ์„ธ์…˜:

root@kitploit:~
	/data/local/tmp/voip/audioserver_session_1725389200/
	โ”œโ”€โ”€ com.whatsapp_48000_1725389201_123456.ac
	โ”œโ”€โ”€ com.whatsapp_48000_1725389201_123789.bc
	

์˜คํ”„์…‹

๋Œ€์ƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ŠคํŠธ๋ฆฌํ•‘(stripped)๋˜์–ด libaudioflinger.so์— ๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด๋ณด๋‚ด์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ, ์„ฑ๊ณต์ ์ธ ํ›„ํ‚น์„ ์œ„ํ•ด ๋ฉ”์„œ๋“œ ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ •ํ™•ํ•œ ์˜คํ”„์…‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์˜คํ”„์…‹์€ IDA-PRO๋ฅผ ์‚ฌ์šฉํ•œ ์ •์  ๋ถ„์„ ๋˜๋Š” Frida๋ฅผ ์‚ฌ์šฉํ•œ ๋™์  ๋ถ„์„์œผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”„์…‹์„ ์•Œ๊ฒŒ ๋˜๋ฉด offsets.h ํ—ค๋” ํŒŒ์ผ ์•ˆ์—์„œ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ์˜คํ”„์…‹:
๋ฉ”์„œ๋“œ:
  1. AUDIOFLINGER_SETMODE_OFFSET
    • ๋ฉ”์„œ๋“œ: android::AudioFlinger::setMode(audio_mode_t)
    • ๋งน๊ธ€๋“œ ์ด๋ฆ„: _ZN7android12AudioFlinger7setModeE11audio_mode_t
  2. RECORDTRACK_GETNEXTBUFFER_OFFSET
    • ๋ฉ”์„œ๋“œ: android::AudioFlinger::RecordThread::RecordTrack::getNextBuffer(android::AudioBufferProvider::Buffer *)
    • ๋งน๊ธ€๋“œ ์ด๋ฆ„: _ZN7android12AudioFlinger12RecordThread11RecordTrack13getNextBufferEPNS_19AudioBufferProvider6BufferE
  3. TRACK_GETNEXTBUFFER_OFFSET
    • ๋ฉ”์„œ๋“œ: android::AudioFlinger::PlaybackThread::Track::getNextBuffer(android::AudioBufferProvider::Buffer *)
    • ๋งน๊ธ€๋“œ ์ด๋ฆ„: _ZN7android12AudioFlinger14PlaybackThread5Track13getNextBufferEPNS_19AudioBufferProvider6BufferE
  4. TRACK_STOP_OFFSET
    • ๋ฉ”์„œ๋“œ: android::AudioFlinger::PlaybackThread::Track::stop(void)
    • ๋งน๊ธ€๋“œ ์ด๋ฆ„: _ZN7android12AudioFlinger14PlaybackThread5Track4stopEv
๊ธฐํƒ€ ์˜คํ”„์…‹:
  1. SAMPLERATE_OFFSET
  2. UID_OFFSET
  3. ISOUT_OFFSET
  4. FORMAT_OFFSET
  5. CHANNELMASK_OFFSET
  6. ATTR_OFFSET

์ด๋“ค์€ ์ •์  ๋ถ„์„์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - libaudioflinger.so
  • ๋ฉ”์„œ๋“œ - android::AudioFlinger::ThreadBase::TrackBase::TrackBase
root@kitploit:~
TrackBase::TrackBase(
ย  ย  ย  ย  IAfThreadBase *thread,
ย  ย  ย  ย  ย  ย  const sp<Client>& client,
ย  ย  ย  ย  ย  ย  const audio_attributes_t& attr,
ย  ย  ย  ย  ย  ย  uint32_t sampleRate,
ย  ย  ย  ย  ย  ย  audio_format_t format,
ย  ย  ย  ย  ย  ย  audio_channel_mask_t channelMask,
ย  ย  ย  ย  ย  ย  size_t frameCount,
ย  ย  ย  ย  ย  ย  void *buffer,
ย  ย  ย  ย  ย  ย  size_t bufferSize,
ย  ย  ย  ย  ย  ย  audio_session_t sessionId,
ย  ย  ย  ย  ย  ย  pid_t creatorPid,
ย  ย  ย  ย  ย  ย  uid_t clientUid,
ย  ย  ย  ย  ย  ย  bool isOut,
ย  ย  ย  ย  ย  ย  const alloc_type alloc,
ย  ย  ย  ย  ย  ย  track_type type,
ย  ย  ย  ย  ย  ย  audio_port_handle_t portId,
ย  ย  ย  ย  ย  ย  std::string metricsId)

์ฐธ๊ณ  ์‚ฌํ•ญ

  • IN_COMMUNICATION ๋ชจ๋“œ๋งŒ ์บก์ฒ˜๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์˜ค๋””์˜ค(์Œ์•…, ๋ฒจ์†Œ๋ฆฌ ๋“ฑ)๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
  • Telegram ๋ฐ Signal์— ๋Œ€ํ•œ ํŠน๋ณ„ ์ฒ˜๋ฆฌ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ƒ˜ํ”Œ ๋ ˆ์ดํŠธ(Telegram: 48000 Hz, Signal: 8000 Hz)๋ฅผ ์ ์šฉํ•˜์—ฌ ์ „ํ™” ๋ฒจ์†Œ๋ฆฌ๋‚˜ ํ†ตํ™” ์ข…๋ฃŒ์Œ๊ณผ ๊ฐ™์€ ๋ถˆํ•„์š”ํ•œ ์˜ค๋””์˜ค๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
  • PCM์€ ์›์‹œ ์ƒํƒœ๋กœ ์ €์žฅ๋˜๋ฉฐ, ์ปจํŠธ๋กค๋Ÿฌ ์•ฑ์€ ์žฌ์ƒ์„ ์œ„ํ•ด ๋‚˜์ค‘์— PCM โ†’ WAV๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
root@kitploit:~
 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
 โ”‚        VoIP Apps            โ”‚
 โ”‚  (WhatsApp / Signal / TG)   โ”‚
 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ”‚ Audio in/out
                 โ–ผ
 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
 โ”‚       audioserver           โ”‚
 โ”‚  (libaudioflinger.so)       โ”‚
 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚         โ”‚
   uplinkโ”‚         โ”‚downlink
 (mic)   โ”‚         โ”‚(speaker)
         โ–ผ         โ–ผ
 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€-โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€-โ”€โ”
 โ”‚ RecordTrack  โ”‚   โ”‚  Track       โ”‚
 โ”‚ getNextBufferโ”‚   โ”‚ getNextBufferโ”‚
 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€-โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€-โ”€โ”˜
         โ”‚                 โ”‚
   โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”
   โ”‚ hook_...  โ”‚     โ”‚ hook_...  โ”‚
   โ”‚ (uplink)  โ”‚     โ”‚ (downlink)โ”‚
   โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚                 โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                โ”‚   โ”‚
                โ–ผ   โ–ผ
     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
     โ”‚  /data/local/tmp/voip/    โ”‚
     โ”‚  audioserver_session_*    โ”‚
     โ”‚   - *.bc  (uplink)        โ”‚
     โ”‚   - *.ac  (downlink)      โ”‚
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๋Œ€์ƒ ํ•จ์ˆ˜ ์‹๋ณ„

์‚ฌ์šฉ๋œ ํ”„๋กœ์„ธ์Šค:

  1. ๋™์  ์ถ”์  - Frida:
    • Frida๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VoIP ํ†ตํ™” ์ค‘ ๋ชจ๋“  ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ถ”์ ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ค๋””์˜ค ๋ฒ„ํผ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ํ•„ํ„ฐ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ทธ๋Ÿฐ ๋‹ค์Œ ์˜ค๋””์˜ค ๋ฒ„ํผ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” Frida ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  2. AOSP ๊ฒ€ํ†  ๋ฐ ํด๋ž˜์Šค ๋งคํ•‘
    • AudioFlinger๋Š” PlaybackThread ๋ฐ RecordThread๋ฅผ ํ†ตํ•ด ์žฌ์ƒ/์บก์ฒ˜๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๋ณ„ ์˜ค๋””์˜ค๋Š” PlaybackThread::Track(๋‹ค์šด๋งํฌ) ๋ฐ RecordThread::RecordTrack(์—…๋งํฌ)๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.
  3. ์•ฑ ํŠน์ • ์ŠคํŠธ๋ฆผ์œผ๋กœ ํ•„ํ„ฐ๋ง
    • UIDโ†’ํŒจํ‚ค์ง€ ๋งคํ•‘์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ ์•ฑ์œผ๋กœ ์ œํ•œํ–ˆ์Šต๋‹ˆ๋‹ค.
  4. ์•ˆ์ •์„ฑ ๋ฐ ์˜คํ”„์…‹
    • ์ตœ์ข… ๋„ค์ดํ‹ฐ๋ธŒ ํŽ˜์ด๋กœ๋“œ๋Š” ์ŠคํŠธ๋ฆฌํ•‘๋œ ์‹ฌ๋ณผ์„ ๊ฒฌ๋””๊ธฐ ์œ„ํ•ด base + ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์˜คํ”„์…‹(app/src/main/cpp/include/offsets.h์— ๋ณด๊ด€)์œผ๋กœ ์ฃผ์†Œ๋ฅผ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.

MODE_IN_COMMUNICATION ๊ฐ์ง€

AudioFlinger::setMode(int mode)๋ฅผ ํ›„ํ‚นํ•˜๊ณ  ์ „์—ญ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค:

  • ํ˜ธ์ถœ๋งˆ๋‹ค ๋ชจ๋“œ ๋ณ€๊ฒฝ์„ ๊ธฐ๋กํ•˜๊ณ  g_currentAudioMode๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • (๋งˆ์ดํฌ ๋ฐ ์Šคํ”ผ์ปค ํ›„ํฌ ๋ชจ๋‘์—์„œ) ํ›„ํฌ๋Š” g_currentAudioMode == AUDIO_MODE_IN_COMMUNICATION์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด VoIP ์„ธ์…˜์ด ํ™œ์„ฑํ™”๋œ ๋™์•ˆ์—๋งŒ ๋ฒ„ํผ๋ฅผ ๋คํ”„ํ•˜์—ฌ ์Œ์•…/๋ฒจ์†Œ๋ฆฌ/๊ธฐ๊ธฐ ์žฌ์ƒ/๋งˆ์ดํฌ ๋…น์Œ ๋“ฑ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PoC ๋นŒ๋“œ ๋ฐ ์‹คํ–‰

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

root@kitploit:~
.
โ”œโ”€โ”€ Android_App/ 
|   โ”œโ”€โ”€ app/                           # Android Studio project (App + Payload)
|	โ”‚   โ”œโ”€โ”€ src/
|	โ”‚   โ”‚   โ”œโ”€โ”€ main/
|	โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ java/              # Controller App Java/Kotlin sources
|	โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cpp/               # Payload source (built with the app)
|	โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ include/
|	โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ offsets.h  # Function offsets for tested builds
โ”œโ”€โ”€ tools/
โ”‚   โ”œโ”€โ”€ audioparser.py             # Converts .ac/.bc raw files โ†’ WAV
โ”‚   โ”œโ”€โ”€ frida/                     # Frida scripts for initial hook discovery
โ”‚   โ”‚   โ”œโ”€โ”€ host_audioserver.py
โ”‚   โ”‚   โ”œโ”€โ”€ agent_audioserver.js
โ”œโ”€โ”€ app-release.apk                 # Signed release apk
โ””โ”€โ”€ README.md                       # Root README (design, build, run instructions)

์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

  • Android Studio + NDK
  • ๋ฃจํŒ…๋œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ(์˜ˆ: rootAVD) ๋˜๋Š” ์†Œ์œ ํ•œ ํ…Œ์ŠคํŠธ ๊ธฐ๊ธฐ(์˜ˆ: Magisk)
  • ํ…Œ์ŠคํŠธํ•  VoIP ์•ฑ ์„ค์น˜(์†Œ์œ ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๋Š” ๋™์ผํ•œ ์•ฑ)
  • audioparser.py์šฉ Python

์•ฑ ๋นŒ๋“œ(ํŽ˜์ด๋กœ๋“œ๋„ ํ•จ๊ป˜ ๋นŒ๋“œ๋จ)

  1. Android Studio์—์„œ app/์„ ์—ฝ๋‹ˆ๋‹ค.
  2. NDK๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(SDK Manager โ†’ SDK Tools โ†’ NDK).
  3. Debug ๋ณ€ํ˜•์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. Gradle/CMake ๊ตฌ์„ฑ์€ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ ๋„ค์ดํ‹ฐ๋ธŒ ํŽ˜์ด๋กœ๋“œ(libaudiohook.so)๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์— ์„ค์น˜

adb install -r app/build/outputs/apk/debug/app-debug.apk ๋˜๋Š” ์ œ๊ณต๋œ app-release.apk๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค: adb install -r app-release.apk

์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ‘ธ์‹œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค: adb push app/src/main/jniLibs/arm64-v8a/libaudiohook.so /data/local/tmp/

PoC ์‹คํ–‰(์—๋ฎฌ๋ ˆ์ดํ„ฐ/์†Œ์œ  ๊ธฐ๊ธฐ)

  1. ์ปจํŠธ๋กค๋Ÿฌ ์•ฑ์„ ์‹คํ–‰ -> ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ๋ฃจํŠธ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
  2. **"์ •์ฑ… ์ฃผ์ž…(Inject Policies)"**์„ ํƒญํ•ฉ๋‹ˆ๋‹ค.
    ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์•ฑ๊ณผ audioserver ์ƒํ˜ธ ์ž‘์šฉ์— ํ•„์š”ํ•œ SELinux ๊ทœ์น™์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
  3. **"๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์ž‘(Start Monitoring)"**์„ ํƒญํ•ฉ๋‹ˆ๋‹ค.
    ์•ฑ์€ AndKittyInjector๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ audioserver์— ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  4. ํ…Œ์ŠคํŠธ VoIP ํ†ตํ™”๋ฅผ ๊ฒ๋‹ˆ๋‹ค(์˜ˆ: ๋ณธ์ธ์˜ WhatsApp/Signal/Telegram ๊ณ„์ •).
  5. **"๋ชจ๋‹ˆํ„ฐ๋ง ์ค‘์ง€(Stop Monitoring)"**์„ ํƒญํ•ฉ๋‹ˆ๋‹ค.
    audioserver๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  6. **"๋ฐ์ดํ„ฐ ๋ณต์‚ฌ(Copy Data)"**์„ ํƒญํ•ฉ๋‹ˆ๋‹ค.
    ์„ธ์…˜ ํŒŒ์ผ์„ /data/local/tmp/voip/โ€ฆ์—์„œ /sdcard/voip/๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค(์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค).
  7. ์žฌ์ƒ
    • ์•ฑ ๋‚ด์—์„œ: **"์˜ค๋””์˜ค ์žฌ์ƒ(Play Audios)"**์ด PCM โ†’ WAV๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • ๋˜๋Š” ์˜คํ”„๋ผ์ธ:
      root@kitploit:~
       adb pull /sdcard/voip/
      python3 tools/audioparser.py voip/
      

์ถ”๊ฐ€ ๋ฒ„ํŠผ:

  • "๋กœ๊ทธ ๋ณด๊ธฐ(View Logs)": ์ธ์ ํ„ฐ/ํ›„ํฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • "SELinux ํ™œ์„ฑํ™”" / "SELinux ๋น„ํ™œ์„ฑํ™”": ์ •์ฑ…์ด ๋„ˆ๋ฌด ์—„๊ฒฉํ•œ ๊ฒฝ์šฐ ๋žฉ์—์„œ ๊ฐ•์ œ/ํ—ˆ์šฉ ๋ชจ๋“œ๋ฅผ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • "๋ฐ์ดํ„ฐ ์‚ญ์ œ(Delete Data)": /data/local/tmp/voip/์™€ /sdcard/voip/๋ฅผ ๋ชจ๋‘ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋œ ๋ฒ„์ „ ๋ฐ ๊ธฐ๊ธฐ

  • ์—๋ฎฌ๋ ˆ์ดํ„ฐ: AVD API 34 (x86_64) - Android 14 - rootAVD๋กœ ๋ฃจํŒ…๋จ
  • ๊ธฐ๊ธฐ: ์‚ผ์„ฑ ๊ฐค๋Ÿญ์‹œ S22 (ARM64) - Android 14 - ๋นŒ๋“œ S901EXXSCEYB1 - Magisk๋กœ ๋ฃจํŒ…๋จ

ํ…Œ์ŠคํŠธ๋œ ์•ฑ

  • Whatsapp
  • Whatsapp Business
  • Signal
  • Telegram

์ฃผ์š” ๊ณผ์ œ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. ์ŠคํŠธ๋ฆฌํ•‘๋œ ์‹ฌ๋ณผ
    • ๋ฌธ์ œ: dlsym์œผ๋กœ ์‹ฌ๋ณผ์„ ์ง์ ‘ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์ •์  ๋ถ„์„์—์„œ ์–ป์€ ์˜คํ”„์…‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. ๋นŒ๋“œ๋ณ„ ๋‹ค๋ฅธ ์‹ฌ๋ณผ/์˜คํ”„์…‹
    • ๋ฌธ์ œ: ์ŠคํŠธ๋ฆฌํ•‘๋œ ์‹ฌ๋ณผ์€ ๋นŒ๋“œ๋งˆ๋‹ค ๋‹ค๋ฅด๋ฉฐ, ์ง์ ‘ dlsym์€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ํ…Œ์ŠคํŠธ๋œ ๋นŒ๋“œ(offsets.h)์— ๋Œ€ํ•ด base + ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์˜คํ”„์…‹์„ ์‚ฌ์šฉํ•˜๊ณ , Frida ์‹ฌ๋ณผ ๋คํ”„์™€ IDA-PRO๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ชจ๋“œ ๊ฐ์ง€ ์ •ํ™•๋„
    • ๋ฌธ์ œ: VoIP ์„ธ์…˜ ์™ธ๋ถ€์—์„œ ๋…น์Œํ•˜๋ฉด ๋…ธ์ด์ฆˆ๊ฐ€ ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: AudioFlinger::setMode(IN_COMMUNICATION)์—์„œ ์บก์ฒ˜ ํ›„ํฌ๋ฅผ ๊ฑธ๊ณ , ์ „ํ™˜์„ ๊ธฐ๋กํ•˜๋ฉฐ, ์ „์—ญ ๋ชจ๋“œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. SELinux
    • ๋ฌธ์ œ: ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์“ฐ๊ธฐ ๋ฐ audioserver์™€์˜ IPC๊ฐ€ ์ฐจ๋‹จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ํ•„์š”ํ•œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ •์ฑ… ์ฃผ์ž…(Inject Policies) ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ•˜๊ณ , ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด SELinux ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ํ† ๊ธ€์„ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  5. ํŒŒ์ผ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋ฐ ์ด๋ฆ„ ๋ณ€๊ฒฝ
    • ๋ฌธ์ œ: ์Šค๋ ˆ๋“œ ์ค‘์ง€ ์‹œ ๋ถ€๋ถ„์ /์†์ƒ๋œ ์ถœ๋ ฅ์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๋จผ์ € .tmp๋กœ ์ž‘์„ฑํ•˜๊ณ , stop()์—์„œ .ac(๋‹ค์šด๋งํฌ) ๋˜๋Š” .bc(์—…๋งํฌ)๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ(์˜คํ”ˆ์†Œ์Šค ๋ฐ ๋ฌธ์„œ)

  • Dobby (์ธ๋ผ์ธ ํ›„ํ‚น ํ”„๋ ˆ์ž„์›Œํฌ) - https://www.github.com/jmpews/Dobby
  • AndKittyInjector (Android ํ”„๋กœ์„ธ์Šค ์ธ์ ํ„ฐ) - https://github.com/MJx0/AndKittyInjector
  • AOSP
    • frameworks/av/services/audioflinger (AudioFlinger, PlaybackThread, RecordThread)
    • system/media/audio (์˜ค๋””์˜ค ํ˜•์‹, ์†์„ฑ, ์ฑ„๋„ ๋งˆ์Šคํฌ)
๋„๊ตฌ ๋‹ค์šด๋กœ๋“œ
/sdcard/voip
์ฐธ๊ณ 
audioserver
FunctionPurpose
AudioFlinger::setModeIN_COMMUNICATION ๋ชจ๋“œ(VoIP ํ™œ์„ฑ)๋กœ์˜ ์ „ํ™˜ ๋ฐ ์ดํƒˆ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
RecordTrack::getNextBuffer๋งˆ์ดํฌ(์—…๋งํฌ) ์˜ค๋””์˜ค ํ”„๋ ˆ์ž„์„ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.
PlaybackThread::Track::getNextBuffer์Šคํ”ผ์ปค(๋‹ค์šด๋งํฌ) ์˜ค๋””์˜ค ํ”„๋ ˆ์ž„์„ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.
Track::stop๋‹ค์šด๋งํฌ ํŒŒ์ผ์„ ๋‹ซ๊ณ  ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
RecordTrack::stop์—…๋งํฌ ํŒŒ์ผ์„ ๋‹ซ๊ณ  ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • RECORDTRACK_STOP_OFFSET
    • ๋ฉ”์„œ๋“œ: android::AudioFlinger::RecordThread::RecordTrack::stop(void)
    • ๋งน๊ธ€๋“œ ์ด๋ฆ„: _ZN7android12AudioFlinger12RecordThread11RecordTrack4stopEv
  • libaudioflinger.so์— PLT ํ›„ํฌ ์—†์Œ
    • ๋ฌธ์ œ: ๋Œ€์ƒ ํ•จ์ˆ˜(RecordTrack::getNextBuffer, Track::getNextBuffer ๋“ฑ)๋Š” ๋‚ด๋ณด๋‚ด์ง€์ง€ ์•Š์œผ๋ฉฐ libaudioflinger.so์—๋Š” ์ด์— ๋Œ€ํ•œ PLT/GOT ํ•ญ๋ชฉ์ด ์—†์Šต๋‹ˆ๋‹ค.
      • ํ‘œ์ค€ dlsym()์ด๋‚˜ PLT ๊ธฐ๋ฐ˜ ํ›„ํ‚น ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์ธ๋ผ์ธ ํ•จ์ˆ˜ ํ›„ํ‚น์„ ์œ„ํ•ด **Dobby**๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
      • ํ›„ํฌ๋Š” ๋‹ค์Œ ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Ÿฐํƒ€์ž„์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค:
        root@kitploit:~
        target_addr = base_addr(libaudioflinger) + offset
        DobbyHook(target_addr, hook_fn, &orig_fn)