Android ํŠธ๋กœ์ด ๋ชฉ๋งˆ Gustuff๊ฐ€ ๊ท€ํ•˜์˜ ๊ณ„์ •์—์„œ ํฌ๋ฆผ(ํ”ผ์•„ํŠธ ๋ฐ ์•”ํ˜ธํ™”ํ)์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•

Android ํŠธ๋กœ์ด ๋ชฉ๋งˆ Gustuff๊ฐ€ ๊ท€ํ•˜์˜ ๊ณ„์ •์—์„œ ํฌ๋ฆผ(ํ”ผ์•„ํŠธ ๋ฐ ์•”ํ˜ธํ™”ํ)์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•

์–ผ๋งˆ ์ „ Group-IB ๋ณด๊ณ  ๋ชจ๋ฐ”์ผ Android Trojan Gustuff์˜ ํ™œ๋™์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์„ธ์š”. ์ด ๊ณต๊ฒฉ์€ ๊ตญ์ œ ์‹œ์žฅ์—์„œ๋งŒ ํ™œ๋™ํ•˜๋ฉฐ 100๋Œ€ ์™ธ๊ตญ ์€ํ–‰์˜ ๊ณ ๊ฐ, ๋ชจ๋ฐ”์ผ 32 ์•”ํ˜ธํ™”ํ ์ง€๊ฐ‘ ์‚ฌ์šฉ์ž ๋ฐ ๋Œ€๊ทœ๋ชจ ์ „์ž์ƒ๊ฑฐ๋ž˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต๊ฒฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Gustuff์˜ ๊ฐœ๋ฐœ์ž๋Š” Bestoffer๋ผ๋Š” ๋ณ„๋ช…์„ ์‚ฌ์šฉํ•˜๋Š” ๋Ÿฌ์‹œ์•„์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์ด๋ฒ„ ๋ฒ”์ฃ„์ž์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ๊นŒ์ง€ ๊ทธ๋Š” ์ž์‹ ์˜ ํŠธ๋กœ์ด ๋ชฉ๋งˆ๋ฅผ "์ง€์‹๊ณผ ๊ฒฝํ—˜์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์ง„์ง€ํ•œ ์ œํ’ˆ"์ด๋ผ๊ณ  ์นญ์ฐฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Group-IB ์•…์„ฑ์ฝ”๋“œ ๋ถ„์„ ์ „๋ฌธ๊ฐ€ ์ด๋ฐ˜ ํ”ผ์‚ฌ๋ ˆํ”„ ๊ทธ์˜ ์—ฐ๊ตฌ์—์„œ ๊ทธ๋Š” Gustuff์˜ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ๊ทธ ์œ„ํ—˜์ด ๋ฌด์—‡์ธ์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์Šคํ„ฐํ”„๋Š” ๋ˆ„๊ตฌ๋ฅผ ์ฐพ๊ณ  ์žˆ๋‚˜์š”?

Gustuff๋Š” ์™„์ „ํžˆ ์ž๋™ํ™”๋œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์ฐจ์„ธ๋Œ€ ์•…์„ฑ ์ฝ”๋“œ์— ์†ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž์— ๋”ฐ๋ฅด๋ฉด ์ด ํŠธ๋กœ์ด ๋ชฉ๋งˆ๋Š” AndyBot ์•…์„ฑ ์ฝ”๋“œ์˜ ์ƒˆ๋กญ๊ณ  ํ–ฅ์ƒ๋œ ๋ฒ„์ „์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์•…์„ฑ ์ฝ”๋“œ๋Š” 2017๋…„ 800์›”๋ถ€ํ„ฐ ์œ ๋ช… ๊ตญ์ œ ์€ํ–‰ ๋ฐ ๊ฒฐ์ œ ์‹œ์Šคํ…œ์˜ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๊ฐ€์žฅํ•œ ํ”ผ์‹ฑ ์›น ์–‘์‹์„ ํ†ตํ•ด ์•ˆ๋“œ๋กœ์ด๋“œ ํœด๋Œ€ํฐ์„ ๊ณต๊ฒฉํ•˜๊ณ  ๋ˆ์„ ํ›”์ณ ์™”์Šต๋‹ˆ๋‹ค. Bestoffer๋Š” Gustuff Bot ์ž„๋Œ€ ๊ฐ€๊ฒฉ์ด ์›” XNUMX๋‹ฌ๋Ÿฌ๋ผ๊ณ  ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Gustuff ์ƒ˜ํ”Œ ๋ถ„์„์— ๋”ฐ๋ฅด๋ฉด ํŠธ๋กœ์ด ๋ชฉ๋งˆ๋Š” Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank ๋ฐ ์•”ํ˜ธํ™”ํ ์ง€๊ฐ‘๊ณผ ๊ฐ™์€ ๋Œ€ํ˜• ์€ํ–‰์˜ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ๊ฐ์„ ์ž ์žฌ์ ์œผ๋กœ ํ‘œ์ ์œผ๋กœ ์‚ผ๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋น„ํŠธ์ฝ”์ธ ์ง€๊ฐ‘, BitPay, Cryptopay, Coinbase ๋“ฑ

์›๋ž˜๋Š” ๊ณ ์ „์ ์ธ ๋ฑ…ํ‚น ํŠธ๋กœ์ด ๋ชฉ๋งˆ๋กœ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ ํ˜„์žฌ ๋ฒ„์ „์—์„œ๋Š” Gustuff๊ฐ€ ์ž ์žฌ์ ์ธ ๊ณต๊ฒฉ ๋Œ€์ƒ ๋ชฉ๋ก์„ ํฌ๊ฒŒ ํ™•์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. Gustuff๋Š” ์€ํ–‰, ํ•€ํ…Œํฌ ํšŒ์‚ฌ ๋ฐ ์•”ํ˜ธํ™”ํ ์„œ๋น„์Šค์šฉ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์™ธ์—๋„ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์˜จ๋ผ์ธ ์ƒ์ , ๊ฒฐ์ œ ์‹œ์Šคํ…œ ๋ฐ ์ธ์Šคํ„ดํŠธ ๋ฉ”์‹ ์ € ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ง„์ž…์  : ๋Œ€๋Ÿ‰๊ฐ์—ผ ๊ณ„์‚ฐ

Gustuff๋Š” APK ๋งํฌ๊ฐ€ ํฌํ•จ๋œ SMS ๋ฉ”์ผ์„ ํ†ตํ•ด Android ์Šค๋งˆํŠธํฐ์— ์นจํˆฌํ•˜๋Š” "๊ณ ์ „์ ์ธ" ๋ฒกํ„ฐ๊ฐ€ ํŠน์ง•์ž…๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๊ธฐ๊ธฐ๊ฐ€ ์„œ๋ฒ„์˜ ๋ช…๋ น์œผ๋กœ ํŠธ๋กœ์ด ๋ชฉ๋งˆ์— ๊ฐ์—ผ๋˜๋ฉด Gustuff๋Š” ๊ฐ์—ผ๋œ ํœด๋Œ€ํฐ์˜ ์—ฐ๋ฝ์ฒ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€๋กœ ํ™•์‚ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Gustuff์˜ ๊ธฐ๋Šฅ์€ ๋Œ€๋Ÿ‰ ๊ฐ์—ผ๊ณผ ์šด์˜์ž ๋น„์ฆˆ๋‹ˆ์Šค์˜ ์ตœ๋Œ€ ์ž๋ณธํ™”๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํ•ฉ๋ฒ•์ ์ธ ๋ชจ๋ฐ”์ผ ๋ฑ…ํ‚น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์•”ํ˜ธํ™”ํ ์ง€๊ฐ‘์— ๋Œ€ํ•œ ๊ณ ์œ ํ•œ "์ž๋™ ์ฑ„์šฐ๊ธฐ" ๊ธฐ๋Šฅ์ด ์žˆ์–ด ์ž๊ธˆ ๋„๋‚œ ์†๋„๋ฅผ ๋†’์ด๊ณ  ๊ทœ๋ชจ๋ฅผ ํ™•๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋กœ์ด๋ชฉ๋งˆ์— ๋Œ€ํ•œ ์—ฐ๊ตฌ ๊ฒฐ๊ณผ, ์žฅ์• ์ธ์„ ์œ„ํ•œ ์„œ๋น„์Šค์ธ ์ ‘๊ทผ์„ฑ ์„œ๋น„์Šค(Accessibility Service)๋ฅผ ์ด์šฉํ•ด ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค. Gustuff๋Š” ์ด Android ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฐฝ ์š”์†Œ์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์šฐํšŒํ•œ ์ตœ์ดˆ์˜ ํŠธ๋กœ์ด ๋ชฉ๋งˆ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง๊นŒ์ง€ ์ž๋™์ฐจ ํ•„๋Ÿฌ์™€ ์ ‘๊ทผ์„ฑ ์„œ๋น„์Šค๋ฅผ ํ•จ๊ป˜ ํ™œ์šฉํ•˜๋Š” ์‚ฌ๋ก€๋Š” ๋งค์šฐ ๋“œ๋ญ…๋‹ˆ๋‹ค.

Gustuff๋Š” ํ”ผํ•ด์ž์˜ ํœด๋Œ€ํฐ์— ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ ์ ‘๊ทผ์„ฑ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(๋ฑ…ํ‚น, ์•”ํ˜ธํ™”ํ, ์˜จ๋ผ์ธ ์‡ผํ•‘, ๋ฉ”์‹œ์ง• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ)์˜ ์ฐฝ ์š”์†Œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์—ฌ ๊ณต๊ฒฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„ ๋ช…๋ น์— ๋”ฐ๋ผ ํŠธ๋กœ์ด ๋ชฉ๋งˆ๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ์€ํ–‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ…์ŠคํŠธ ํ•„๋“œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๊ทผ์„ฑ ์„œ๋น„์Šค ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠธ๋กœ์ด ๋ชฉ๋งˆ๋Š” ์ด์ „ ์„ธ๋Œ€์˜ ๋ชจ๋ฐ”์ผ ํŠธ๋กœ์ด ๋ชฉ๋งˆ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ์€ํ–‰์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณด์•ˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ Google์ด Android OS์˜ ์ƒˆ ๋ฒ„์ „์—์„œ ๊ตฌํ˜„ํ•œ ๋ณด์•ˆ ์ •์ฑ…์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Gustuff๋Š” Google Protect ๋ณดํ˜ธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์ž์— ๋”ฐ๋ฅด๋ฉด ์ด ๊ธฐ๋Šฅ์€ 70%์˜ ๊ฒฝ์šฐ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Android ํŠธ๋กœ์ด ๋ชฉ๋งˆ Gustuff๊ฐ€ ๊ท€ํ•˜์˜ ๊ณ„์ •์—์„œ ํฌ๋ฆผ(ํ”ผ์•„ํŠธ ๋ฐ ์•”ํ˜ธํ™”ํ)์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•

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

Gustuff์˜ ๊ธฐ๋Šฅ์—๋Š” ๊ฐ์—ผ๋œ ์žฅ์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ธฐ, SMS ๋ฉ”์‹œ์ง€ ์ฝ๊ธฐ/๋ณด๋‚ด๊ธฐ, USSD ์š”์ฒญ ๋ณด๋‚ด๊ธฐ, SOCKS5 ํ”„๋ก์‹œ ์‹คํ–‰, ๋งํฌ ๋”ฐ๋ผ ๊ฐ€๊ธฐ, ํŒŒ์ผ(๋ฌธ์„œ์˜ ์‚ฌ์ง„ ์Šค์บ”, ์Šคํฌ๋ฆฐ์ƒท, ์‚ฌ์ง„ ํฌํ•จ) ๋ณด๋‚ด๊ธฐ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„, ์žฅ์น˜๋ฅผ ๊ณต์žฅ ์„ค์ •์œผ๋กœ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์•…์„ฑ์ฝ”๋“œ ๋ถ„์„

์•…์„ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์น˜ํ•˜๊ธฐ ์ „์— Android OS๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ Gustuff๊ฐ€ ์š”์ฒญํ•œ ๊ถŒํ•œ ๋ชฉ๋ก์ด ํฌํ•จ๋œ ์ฐฝ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

Android ํŠธ๋กœ์ด ๋ชฉ๋งˆ Gustuff๊ฐ€ ๊ท€ํ•˜์˜ ๊ณ„์ •์—์„œ ํฌ๋ฆผ(ํ”ผ์•„ํŠธ ๋ฐ ์•”ํ˜ธํ™”ํ)์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‚ฌ์šฉ์ž์˜ ๋™์˜๋ฅผ ๋ฐ›์€ ํ›„์—๋งŒ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•œ ํ›„ ํŠธ๋กœ์ด ๋ชฉ๋งˆ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์Œ ์ฐฝ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

Android ํŠธ๋กœ์ด ๋ชฉ๋งˆ Gustuff๊ฐ€ ๊ท€ํ•˜์˜ ๊ณ„์ •์—์„œ ํฌ๋ฆผ(ํ”ผ์•„ํŠธ ๋ฐ ์•”ํ˜ธํ™”ํ)์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•
๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ด๋‹น ์•„์ด์ฝ˜์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์ €์ž์— ๋”ฐ๋ฅด๋ฉด Gustuff๋Š” FTT์˜ ํŒจ์ปค์— ์˜ํ•ด ํฌ์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ฃผ๊ธฐ์ ์œผ๋กœ CnC ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋ช…๋ น์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์กฐ์‚ฌํ•œ ์—ฌ๋Ÿฌ ํŒŒ์ผ์€ IP ์ฃผ์†Œ๋ฅผ ์ œ์–ด ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. 88.99.171[.]105 (์ดํ•˜ ๋กœ ํ‘œ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. <%CnC%>).

์‹คํ–‰ ํ›„ ํ”„๋กœ๊ทธ๋žจ์€ ์„œ๋ฒ„์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. http://<%CnC%>/api/v1/get.php.

์‘๋‹ต์€ ๋‹ค์Œ ํ˜•์‹์˜ JSON์ด ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

{
    "results" : "OK",
    "command":{
        "id": "<%id%>",
        "command":"<%command%>",
        "timestamp":"<%Server Timestamp%>",
        "params":{
		<%Command parameters as JSON%>
        },
    },
}

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•ก์„ธ์Šคํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ์—ผ๋œ ์žฅ์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ํ˜•์‹์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์€ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋“ ์ฐฌ, ์—ฌ๋ถ„์˜, ์•ฑ ะธ ํ—ˆ๊ฐ€ โ€“ ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ CnC์—์„œ ์š”์ฒญ ๋ช…๋ น์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

{
    "info":
    {
        "info":
        {
            "cell":<%Sim operator name%>,
            "country":<%Country ISO%>,
            "imei":<%IMEI%>,
            "number":<%Phone number%>,
            "line1Number":<%Phone number%>,
            "advertisementId":<%ID%>
        },
        "state":
        {
            "admin":<%Has admin rights%>,
            "source":<%String%>,
            "needPermissions":<%Application needs permissions%>,
            "accesByName":<%Boolean%>,
            "accesByService":<%Boolean%>,
            "safetyNet":<%String%>,
            "defaultSmsApp":<%Default Sms Application%>,
            "isDefaultSmsApp":<%Current application is Default Sms Application%>,
            "dateTime":<%Current date time%>,
            "batteryLevel":<%Battery level%>
        },
        "socks":
        {
            "id":<%Proxy module ID%>,
            "enabled":<%Is enabled%>,
            "active":<%Is active%>
        },
        "version":
        {
            "versionName":<%Package Version Name%>,
            "versionCode":<%Package Version Code%>,
            "lastUpdateTime":<%Package Last Update Time%>,
            "tag":<%Tag, default value: "TAG"%>,
            "targetSdkVersion":<%Target Sdk Version%>,
            "buildConfigTimestamp":1541309066721
        },
    },
    "full":
    {
        "model":<%Device Model%>,
        "localeCountry":<%Country%>,
        "localeLang":<%Locale language%>,
        "accounts":<%JSON array, contains from "name" and "type" of accounts%>,
        "lockType":<%Type of lockscreen password%>
    },
    "extra":
    {
        "serial":<%Build serial number%>,
        "board":<%Build Board%>,
        "brand":<%Build Brand%>,
        "user":<%Build User%>,
        "device":<%Build Device%>,
        "display":<%Build Display%>,
        "id":<%Build ID%>,
        "manufacturer":<%Build manufacturer%>,
        "model":<%Build model%>,
        "product":<%Build product%>,
        "tags":<%Build tags%>,
        "type":<%Build type%>,
        "imei":<%imei%>,
        "imsi":<%imsi%>,
        "line1number":<%phonenumber%>,
        "iccid":<%Sim serial number%>,
        "mcc":<%Mobile country code of operator%>,
        "mnc":<%Mobile network codeof operator%>,
        "cellid":<%GSM-data%>,
        "lac":<%GSM-data%>,
        "androidid":<%Android Id%>,
        "ssid":<%Wi-Fi SSID%>
    },
    "apps":{<%List of installed applications%>},
    "permission":<%List of granted permissions%>
} 

๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ ์ €์žฅ

Gustuff๋Š” ์šด์˜์ƒ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„๊ณผ ๊ทธ ์•ˆ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ๋ฌธ์ž์—ด์—์„œ MD5 ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. 15413090667214.6.1<%์ด๋ฆ„%>์–ด๋””์—์„œ <%์ด๋ฆ„%> โ€” ์ดˆ๊ธฐ ์ด๋ฆ„-๊ฐ’. ์ด๋ฆ„ ์ƒ์„ฑ ํ•จ์ˆ˜์˜ Python ํ•ด์„:

 nameGenerator(input):
    output = md5("15413090667214.6.1" + input) 

๋‹ค์Œ์—์„œ๋Š” ์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์ƒ์„ฑ๊ธฐ(์ž…๋ ฅ).
๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ํŒŒ์ผ ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. nameGenerator("API_SERVER_LIST"), ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ ์ด๋ฆ„์˜ ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์ด๋ฆ„ ๊ฐ€์น˜
nameGenerator("API_SERVER_LIST") ๋ฐฐ์—ด ํ˜•์‹์˜ CnC ์ฃผ์†Œ ๋ชฉ๋ก์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
nameGenerator("API_SERVER_URL") CnC ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
nameGenerator("SMS_UPLOAD") ํ”Œ๋ž˜๊ทธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ CnC์— SMS ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
nameGenerator("SMS_ROOT_NUMBER") ๊ฐ์—ผ๋œ ์žฅ์น˜์—์„œ ์ˆ˜์‹ ํ•œ SMS ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋  ์ „ํ™”๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ null์ž…๋‹ˆ๋‹ค.
nameGenerator("SMS_ROOT_NUMBER_RESEND") ํ”Œ๋ž˜๊ทธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ์„ค์น˜๋œ ๊ฒฝ์šฐ ๊ฐ์—ผ๋œ ์žฅ์น˜๊ฐ€ SMS๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ๋ฃจํŠธ ๋ฒˆํ˜ธ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
nameGenerator("DEFAULT_APP_SMS") ํ”Œ๋ž˜๊ทธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ˆ˜์‹ ๋˜๋Š” SMS ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฆ„์ƒ์„ฑ๊ธฐ("DEFAULT_ADMIN") ํ”Œ๋ž˜๊ทธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
nameGenerator("DEFAULT_ACCESSIBILITY") ํ”Œ๋ž˜๊ทธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ์ ‘๊ทผ์„ฑ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
nameGenerator("APPS_CONFIG") ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ด€๋ จ๋œ ์ ‘๊ทผ์„ฑ ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋  ๋•Œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—… ๋ชฉ๋ก์ด ํฌํ•จ๋œ JSON ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.
nameGenerator("APPS_INSTALLED") ์žฅ์น˜์— ์„ค์น˜๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชฉ๋ก์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
nameGenerator("IS_FIST_RUN") ํ”Œ๋ž˜๊ทธ๋Š” ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
nameGenerator("UNIQUE_ID") ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ด‡์ด ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„์˜ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“ˆ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ CnC ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ์ฝ”๋”ฉ๋œ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฒ ์ด์Šค ์œค๊ณฝ. CnC ์„œ๋ฒ„ ๋ชฉ๋ก์€ ํ•ด๋‹น ๋ช…๋ น์„ ์ˆ˜์‹ ํ•˜๋ฉด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ์ฃผ์†Œ๋Š” ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์„œ๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ช…๋ น์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ช…๋ น๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ JSON ํ˜•์‹์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค๋Š” ์ ์€ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ€ ๊ธฐ์ˆ 
์•ž์œผ๋กœ์‹œ์ž‘ ๊ฐ์—ผ๋œ ์žฅ์น˜์—์„œ ์ˆ˜์‹ ํ•œ SMS ๋ฉ”์‹œ์ง€๋ฅผ CnC ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
์•ž์œผ๋กœ์ค‘์ง€ ๊ฐ์—ผ๋œ ์žฅ์น˜์—์„œ ์ˆ˜์‹ ํ•œ SMS ๋ฉ”์‹œ์ง€๋ฅผ CnC ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
ussd์‹คํ–‰ USSD ์š”์ฒญ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. USSD๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š” ๋ฒˆํ˜ธ๋Š” JSON ํ•„๋“œ โ€œnumberโ€์— ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ž๋ฅผ ๋ณด๋‚ด๋‹ค ํ•˜๋‚˜์˜ SMS ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ "๋ถ„ํ• "๋ฉ๋‹ˆ๋‹ค). ์ด ๋ช…๋ น์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋Œ€์ƒ ๋ฒˆํ˜ธ์ธ "to" ํ•„๋“œ์™€ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์ธ "body" ํ•„๋“œ๊ฐ€ ํฌํ•จ๋œ JSON ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
sendSmsAb ๊ฐ์—ผ๋œ ์žฅ์น˜์˜ ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก์— ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ SMS ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ "๋ถ„ํ• "๋จ). ๋ฉ”์‹œ์ง€ ์ „์†ก ๊ฐ„๊ฒฉ์€ 10์ดˆ์ž…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์€ JSON ํ•„๋“œ "body"์— ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณด๋‚ด๊ธฐSmsMass ๋ช…๋ น ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ง€์ •๋œ ์—ฐ๋ฝ์ฒ˜๋กœ SMS ๋ฉ”์‹œ์ง€(ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ "๋ถ„ํ• "๋จ)๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ์ „์†ก ๊ฐ„๊ฒฉ์€ 10์ดˆ์ž…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ JSON ๋ฐฐ์—ด("sms" ํ•„๋“œ)์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ทธ ์š”์†Œ์—๋Š” ๋Œ€์ƒ ๋ฒˆํ˜ธ์ธ "to" ํ•„๋“œ์™€ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์ธ "body" ํ•„๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณ€๊ฒฝ ์„œ๋ฒ„ ์ด ๋ช…๋ น์€ "url" ํ‚ค๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ด‡์€ nameGenerator("SERVER_URL") ๋˜๋Š” "array"์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ด‡์€ nameGenerator("API_SERVER_LIST")์— ๋ฐฐ์—ด์„ ์”๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ CnC ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
๊ด€๋ฆฌ์ž๋ฒˆํ˜ธ ์ด ๋ช…๋ น์€ ๋ฃจํŠธ ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋‹ค์Œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” JSON ๊ฐœ์ฒด๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. "number" โ€” nameGenerator("ROOT_NUMBER")๋ฅผ ์ˆ˜์‹ ๋œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ, "resend" โ€” nameGenerator("SMS_ROOT_NUMBER_RESEND") ๋ณ€๊ฒฝ, "sendId" โ€” nameGenerator("ROOT_NUMBER"๋กœ ๋ณด๋‚ด๊ธฐ) ) ๊ณ ์œ  ID.
์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ ๊ฐ์—ผ๋œ ์žฅ์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ์ง€์šฐ๊ธฐ ์ด ๋ช…๋ น์€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋œ ์ด๋ฆ„์— ๋”ฐ๋ผ ์žฅ์น˜๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์™„์ „ํžˆ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜(๊ธฐ๋ณธ ์‚ฌ์šฉ์ž) ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋งŒ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค(๋ณด์กฐ ์‚ฌ์šฉ์ž).
์–‘๋ง์‹œ์ž‘ ํ”„๋ก์‹œ ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์˜ ์ž‘๋™์€ ๋ณ„๋„์˜ ์„น์…˜์—์„œ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.
์–‘๋ง๊ทธ๋งŒ ํ”„๋ก์‹œ ๋ชจ๋“ˆ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
์˜คํ”ˆ๋งํฌ ๋งํฌ๋ฅผ ๋”ฐ๋ผ๊ฐ€์„ธ์š”. ๋งํฌ๋Š” "url" ํ‚ค ์•„๋ž˜ JSON ๋งค๊ฐœ๋ณ€์ˆ˜์— ์žˆ์Šต๋‹ˆ๋‹ค. "android.intent.action.VIEW"๋Š” ๋งํฌ๋ฅผ ์—ฌ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
uploadAllSms ์žฅ์น˜์—์„œ ์ˆ˜์‹ ํ•œ ๋ชจ๋“  SMS ๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
๋ชจ๋“ ์‚ฌ์ง„์—…๋กœ๋“œ ๊ฐ์—ผ๋œ ์žฅ์น˜์˜ ์ด๋ฏธ์ง€๋ฅผ URL๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. URL์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
์—…๋กœ๋“œํŒŒ์ผ ๊ฐ์—ผ๋œ ์žฅ์น˜์—์„œ URL๋กœ ํŒŒ์ผ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. URL์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
์—…๋กœ๋“œ์ „ํ™”๋ฒˆํ˜ธ ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก์˜ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. "ab" ํ‚ค๊ฐ€ ํฌํ•จ๋œ JSON ๊ฐœ์ฒด ๊ฐ’์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ˆ˜์‹ ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์—์„œ ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. "sms" ํ‚ค๊ฐ€ ํฌํ•จ๋œ JSON ๊ฐœ์ฒด๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ˆ˜์‹ ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ SMS ๋ฉ”์‹œ์ง€ ๋ฐœ์‹ ์ž์˜ ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก์„ ์ฝ์Šต๋‹ˆ๋‹ค.
๋ณ€๊ฒฝ์•„์นด์ด๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ "url" ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œ๊ณต๋˜๋Š” ์ฃผ์†Œ์—์„œ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์€ โ€œarchive.zipโ€์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์„ ํƒ์ ์œผ๋กœ ์•„์นด์ด๋ธŒ ๋น„๋ฐ€๋ฒˆํ˜ธ "b5jXh37gxgHBrZhQ4j3D"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์˜ ์••์ถ•์„ ํ’‰๋‹ˆ๋‹ค. ์••์ถ•์ด ํ’€๋ฆฐ ํŒŒ์ผ์€ [์™ธ๋ถ€์ €์žฅ์†Œ]/hgps ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›น ๊ฐ€์งœ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค(์•„๋ž˜ ์„ค๋ช… ์ฐธ์กฐ).
ํ–‰์œ„ ์ด ๋ช…๋ น์€ ๋ณ„๋„์˜ ์„น์…˜์—์„œ ์„ค๋ช…ํ•˜๋Š” ์ž‘์—… ์„œ๋น„์Šค์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
test ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š๊ณ .
๋‹ค์šด๋กœ๋“œ ์ด ๋ช…๋ น์€ ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ "๋‹ค์šด๋กœ๋“œ" ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. URL๊ณผ ํŒŒ์ผ ์ด๋ฆ„์€ ๊ฐ๊ฐ JSON ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ์ฒด์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•„๋“œ์ธ "url" ๋ฐ "fileName"์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
์ œ๊ฑฐ "๋‹ค์šด๋กœ๋“œ" ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์€ "fileName" ํ‚ค๊ฐ€ ์žˆ๋Š” JSON ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ํŒŒ์ผ ์ด๋ฆ„์€ โ€œtmp.apkโ€์ž…๋‹ˆ๋‹ค.
๊ณต๊ณ  ๊ด€๋ฆฌ ์„œ๋ฒ„์—์„œ ์ •์˜ํ•œ ์„ค๋ช… ๋ฐ ์ œ๋ชฉ ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น ํ˜•์‹ ๊ณต๊ณ :

{
    "results" : "OK",
    "command":{
    "id": <%id%>,
    "command":"notification",
    "timestamp":<%Server Timestamp%>,
    "params":{
        "openApp":<%Open original app or not%>,
        "array":[
                      {"title":<%Title text%>,
                      "desc":<%Description text%>,
                      "app":<%Application name%>}
                   ]
                   },
        },
}

์กฐ์‚ฌ ์ค‘์ธ ํŒŒ์ผ์—์„œ ์ƒ์„ฑ๋œ ์•Œ๋ฆผ์€ ํ•„๋“œ์— ์ง€์ •๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ƒ์„ฑ๋œ ์•Œ๋ฆผ๊ณผ ๋™์ผํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์•ฑ. ํ•„๋“œ ๊ฐ’์ธ ๊ฒฝ์šฐ ์˜คํ”ˆ์•ฑ โ€” True, ์•Œ๋ฆผ์ด ์—ด๋ฆฌ๋ฉด ํ•„๋“œ์— ์ง€์ •๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์•ฑ. ํ•„๋“œ ๊ฐ’์ธ ๊ฒฝ์šฐ ์˜คํ”ˆ์•ฑ โ€” ๊ฑฐ์ง“์ด๋ฉด:

  • ํ”ผ์‹ฑ ์ฐฝ์ด ์—ด๋ฆฌ๊ณ  ๊ทธ ๋‚ด์šฉ์€ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. <%์™ธ๋ถ€ ์ €์žฅ์†Œ%>/hgps/<%ํŒŒ์ผ ์ด๋ฆ„%>
  • ํ”ผ์‹ฑ ์ฐฝ์ด ์—ด๋ฆฌ๊ณ  ๊ทธ ๋‚ด์šฉ์€ ์„œ๋ฒ„์—์„œ ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. <%url%>?id=<%Bot id%>&app=<%์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„%>
  • Google Play ์นด๋“œ๋กœ ์œ„์žฅํ•œ ํ”ผ์‹ฑ ์ฐฝ์ด ์—ด๋ฆฌ๊ณ  ์นด๋“œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์Œ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. <%CnC%>set_state.php ๋‹ค์Œ ํ˜•์‹์˜ JSON ๊ฐ์ฒด๋กœ:

{
    "command":
    {
        "command":<%command%>,
        "id":<%command_id%>,
        "state":<%command_state%>
    }
    "id":<%bot_id%>
}

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

1. PARAMS_ACTION โ€” ์ด๋Ÿฌํ•œ ๋ช…๋ น์„ ์ˆ˜์‹ ํ•  ๋•Œ ์„œ๋น„์Šค๋Š” ๋จผ์ € JSON ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ๋ถ€ํ„ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ Type ํ‚ค ๊ฐ’์„ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค์ •๋ณด โ€“ ํ•˜์œ„ ๋ช…๋ น์€ JSON ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ํ‚ค๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ค‘์š”ํ•˜์ง€ ์•Š์Œ. ํ”Œ๋ž˜๊ทธ๊ฐ€ True์ด๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. FLAG_ISOLATED_PROCESS ์ ‘๊ทผ์„ฑ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค์—. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
  • ๋ฟŒ๋ฆฌ โ€” ํ˜„์žฌ ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ๋Š” ์ฐฝ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›๊ณ  ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ AccessibilityNodeInfo ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ์ž โ€” ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์—ฐ โ€” "data" ํ‚ค์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ง€์ •๋œ ๋ฐ€๋ฆฌ์ดˆ ๋™์•ˆ ActionsService๋ฅผ ์ผ์‹œ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฐฝ โ€” ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ์ฐฝ ๋ชฉ๋ก์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ์„ค์น˜ โ€” ๊ฐ์—ผ๋œ ์žฅ์น˜์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์•„์นด์ด๋ธŒ ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„์€ "fileName" ํ‚ค์— ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์นด์ด๋ธŒ ์ž์ฒด๋Š” ๋‹ค์šด๋กœ๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธ€๋กœ๋ฒŒ โ€“ ํ•˜์œ„ ๋ช…๋ น์€ ํ˜„์žฌ ์ฐฝ์—์„œ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    • ๋น ๋ฅธ ์„ค์ • ๋ฉ”๋‰ด์—์„œ
    • ์ „
    • ์ง‘
    • ์•Œ๋ฆผ์—
    • ์ตœ๊ทผ์— ์—ด๋ฆฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ฐฝ์œผ๋กœ

  • ์‹œ์ž‘ - ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„์€ ํ‚ค๋ณ„๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ.
  • ์†Œ๋ฆฌ โ€” ์‚ฌ์šด๋“œ ๋ชจ๋“œ๋ฅผ ๋ฌด์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ์ž ๊ธˆ์„ ํ•ด์ œ โ€” ํ™”๋ฉด๊ณผ ํ‚ค๋ณด๋“œ์˜ ๋ฐฑ๋ผ์ดํŠธ๋ฅผ ์ตœ๋Œ€ ๋ฐ๊ธฐ๋กœ ์ผญ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ WakeLock์„ ์‚ฌ์šฉํ•˜์—ฌ [Application lable]:INFO ๋ฌธ์ž์—ด์„ ํƒœ๊ทธ๋กœ ์ง€์ •ํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํ—ˆ๊ฐ€์˜ค๋ฒ„๋ ˆ์ด โ€” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(๋ช…๋ น ์‹คํ–‰์— ๋Œ€ํ•œ ์‘๋‹ต์€ {"message":"Not support"} ๋˜๋Š” {"message":"low sdk"}์ž…๋‹ˆ๋‹ค).
  • ๋ชธ์ง“ โ€” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(๋ช…๋ น ์‹คํ–‰์— ๋Œ€ํ•œ ์‘๋‹ต์€ {"message":"Not support"}๋˜๋Š” {"message":"Low API"}์ž…๋‹ˆ๋‹ค).
  • ๊ถŒํ•œ โ€” ์ด ๋ช…๋ น์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์š”์ฒญํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฟผ๋ฆฌ ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š์•„ ๋ช…๋ น์–ด์˜ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์š”์ฒญ๋œ ๊ถŒํ•œ ๋ชฉ๋ก์€ "๊ถŒํ•œ" ํ‚ค๊ฐ€ ํฌํ•จ๋œ JSON ๋ฐฐ์—ด๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ๋ชฉ๋ก:
    • android.permission.READ_PHONE_STATE
    • android.permission.READ_CONTACTS
    • android.permission.CALL_PHONE
    • android.permission.RECEIVE_SMS
    • android.permission.SEND_SMS
    • android.permission.READ_SMS
    • android.permission.READ_EXTERNAL_STORAGE
    • android.permission.WRITE_EXTERNAL_STORAGE

  • ์—ด ์ˆ˜ โ€” ํ”ผ์‹ฑ ์ฐฝ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์ œ๊ณต๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”ผ์‹ฑ ์ฐฝ์ด ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ์— ๋‚ด์šฉ์ด ๊ธฐ๋ก๋œ ํ”ผ์‹ฑ ์ฐฝ ํ‘œ์‹œ <%์™ธ๋ถ€ ๋””๋ ‰ํ„ฐ๋ฆฌ%>/hgps/<%param_filename%>. ์ฐฝ๊ณผ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. <%CnC%>/records.php
    • ์ฃผ์†Œ์—์„œ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ฏธ๋ฆฌ ๋กœ๋“œ๋œ ํ”ผ์‹ฑ ์ฐฝ ํ‘œ์‹œ <%url_param%>?id=<%bot_id%>&app=<%packagename%>. ์ฐฝ๊ณผ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. <%CnC%>/records.php
    • Google Play ์นด๋“œ๋กœ ์œ„์žฅํ•œ ํ”ผ์‹ฑ ์ฐฝ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • ๋Œ€ํ™”ํ˜• โ€” ์ด ๋ช…๋ น์€ AcessibilityService๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฐฝ ์š”์†Œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋žจ์— ํŠน๋ณ„ ์„œ๋น„์Šค๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์กฐ์‚ฌ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ฐฝ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ˜„์žฌ ํ™œ๋™ ์ค‘์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฐœ์ฒด์˜ ID ๋˜๋Š” ํ…์ŠคํŠธ(์ด๋ฆ„)๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
    • ๋ช…๋ น์ด ์‹คํ–‰๋  ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ID๋ณ„๋กœ ์ฐฝ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ๋ฌผ๊ฑด์„ ๋ฐ›์€ ํ›„ ์ ‘๊ทผ์„ฑ๋…ธ๋“œ์ •๋ณด ๊ด€์‹ฌ ์žˆ๋Š” ์ฐฝ ์š”์†Œ์˜ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • focus โ€” ๊ฐ์ฒด์— ํฌ์ปค์Šค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ํด๋ฆญ - ๊ฐœ์ฒด๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • actionId โ€” ID๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • setText โ€” ๊ฐ์ฒด์˜ ํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ๋ณ€๊ฒฝ์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค: ์ž‘์—… ์ˆ˜ํ–‰ ACTION_SET_TEXT (๊ฐ์—ผ๋œ ์žฅ์น˜์˜ Android ๋ฒ„์ „์ด ๋‹ค์Œ ๋ฒ„์ „๋ณด๋‹ค ๋‚ฎ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ ์‚ฌํƒ• ๊ณผ์ž) ๋˜๋Š” ํด๋ฆฝ๋ณด๋“œ์— ๋ฌธ์ž์—ด์„ ๋ฐฐ์น˜ํ•˜๊ณ  ๊ฐ์ฒด์— ๋ถ™์—ฌ๋„ฃ๋Š” ๋ฐฉ๋ฒ•(์ด์ „ ๋ฒ„์ „์˜ ๊ฒฝ์šฐ)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋ฑ…ํ‚น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. PARAMS_ACTIONS - ๊ฐ™์€ PARAMS_ACTION, ๋ช…๋ น์˜ JSON ๋ฐฐ์—ด๋งŒ ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฐฝ ์š”์†Œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€์— ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Gustuff์—์„œ ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

boolean interactiveAction(List aiList, JSONObject action, JsonObject res) {
    int count = action.optInt("repeat", 1);
    Iterator aiListIterator = ((Iterable)aiList).iterator();
    int count = 0;
    while(aiListIterator.hasNext()) {
        Object ani = aiListIterator.next();
        if(1 <= count) {
            int index;
            for(index = 1; true; ++index) {
                if(action.has("focus")) {
                    if(((AccessibilityNodeInfo)ani).performAction(1)) {
                        ++count;
                    }
                }
                else if(action.has("click")) {
                    if(((AccessibilityNodeInfo)ani).performAction(16)) {
                        ++count;
                    }
                }
                else if(action.has("actionId")) {
                    if(((AccessibilityNodeInfo)ani).performAction(action.optInt("actionId"))) {
                        ++count;
                    }
                }
                else if(action.has("setText")) {
                    customHeader ch = CustomAccessibilityService.a;
                    Context context = this.getApplicationContext();
                    String text = action.optString("setText");
                    if(performSetTextAction(ch, context, ((AccessibilityNodeInfo)ani), text)) {
                        ++count;
                    }
                }
                if(index == count) {
                    break;
                }
            }
        }
        ((AccessibilityNodeInfo)ani).recycle();
    }
    res.addPropertyNumber("res", Integer.valueOf(count));
}

ํ…์ŠคํŠธ ๊ต์ฒด ๊ธฐ๋Šฅ:

boolean performSetTextAction(Context context, AccessibilityNodeInfo ani, String text) {
    boolean result;
    if(Build$VERSION.SDK_INT >= 21) {
        Bundle b = new Bundle();
        b.putCharSequence("ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE", ((CharSequence)text));
        result = ani.performAction(0x200000, b);  // ACTION_SET_TEXT
    }
    else {
        Object clipboard = context.getSystemService("clipboard");
        if(clipboard != null) {
        ((ClipboardManager)clipboard).setPrimaryClip(ClipData.newPlainText("autofill_pm", ((CharSequence)text)));
        result = ani.performAction(0x8000);  // ACTION_PASTE
        }
        else {
            result = false;
        }
    }
    return result;
}

๋”ฐ๋ผ์„œ ์ œ์–ด ์„œ๋ฒ„๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•˜๋ฉด Gustuff๋Š” ๋ฑ…ํ‚น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ…์ŠคํŠธ ํ•„๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ฑฐ๋ž˜๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠธ๋กœ์ด ๋ชฉ๋งˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋กœ๊ทธ์ธํ•  ํ•„์š”์กฐ์ฐจ ์—†์Šต๋‹ˆ๋‹ค. PUSH ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•˜๋Š” ๋ช…๋ น์„ ๋ณด๋‚ธ ๋‹ค์Œ ์ด์ „์— ์„ค์น˜๋œ ๋ฑ…ํ‚น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์„ ์ธ์ฆํ•œ ํ›„ Gustuff๊ฐ€ ์ฐจ๋Ÿ‰์„ ์ฑ„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SMS ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋ชจ๋“ˆ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐ์—ผ๋œ ์žฅ์น˜๊ฐ€ SMS ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ตฌ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์šด์˜์ž๋กœ๋ถ€ํ„ฐ SMS ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์— ํฌํ•จ๋œ ๋ช…๋ น์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์€ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

7!5=<%Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ช…๋ น%>

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ˆ˜์‹ ๋˜๋Š” ๋ชจ๋“  SMS ๋ฉ”์‹œ์ง€์—์„œ ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. 7!5=, ๋ฌธ์ž์—ด์ด ๊ฐ์ง€๋˜๋ฉด ์˜คํ”„์…‹ 64์—์„œ Base4์˜ ๋ฌธ์ž์—ด์„ ๋””์ฝ”๋”ฉํ•˜๊ณ  ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์€ CnC์˜ ๋ช…๋ น๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋ช…๋ น์ด ๋‚˜์˜จ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฒˆํ˜ธ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ํ˜•์‹:

7*5=<%โ€œresult_code ๋ช…๋ นโ€์˜ Base64 ์ธ์ฝ”๋”ฉ%>

์„ ํƒ์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ˆ˜์‹ ๋œ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ๋ฃจํŠธ ๋ฒˆํ˜ธ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์— ๋ฃจํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋ฉ”์‹œ์ง€ ๋ฆฌ๋””๋ ‰์…˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. SMS ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ๊ณต๊ฒฉ์ž์˜ ๋ฒˆํ˜ธ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

<%From number%> - <%Time, ํ˜•์‹: dd/MM/yyyy HH:mm:ss%> <%SMS body%>

๋˜ํ•œ ์„ ํƒ์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด CnC์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. SMS ๋ฉ”์‹œ์ง€๋Š” JSON ํ˜•์‹์œผ๋กœ ์„œ๋ฒ„์— ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

{
    "id":<%BotID%>,
    "sms":
    {
        "text":<%SMS body%>,
        "number":<%From number%>,
        "date":<%Timestamp%>
    }
}

ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ nameGenerator("DEFAULT_APP_SMS") โ€“ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด SMS ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ์ˆ˜์‹  ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก์„ ์ง€์›๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ๋ชจ๋“ˆ

์—ฐ๊ตฌ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ๊ตฌ์„ฑ์ด ํฌํ•จ๋œ ์ •์  ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ณ„๋„์˜ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” Backconnect ํ”„๋ก์‹œ ๋ชจ๋“ˆ(์ดํ•˜ ํ”„๋ก์‹œ ๋ชจ๋“ˆ์ด๋ผ๊ณ  ํ•จ)์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ๋Š” ์ƒ˜ํ”Œ์— ๋ช…ํ™•ํ•œ ํ˜•์‹์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

Android ํŠธ๋กœ์ด ๋ชฉ๋งˆ Gustuff๊ฐ€ ๊ท€ํ•˜์˜ ๊ณ„์ •์—์„œ ํฌ๋ฆผ(ํ”ผ์•„ํŠธ ๋ฐ ์•”ํ˜ธํ™”ํ)์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ”„๋ก์‹œ ๋ชจ๋“ˆ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๋ชจ๋“  ์ž‘์—…์€ ํŒŒ์ผ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์™ธ๋ถ€ ์ €์žฅ์†Œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋กœ๊ทธ ํŒŒ์ผ์ด ์ €์žฅ๋˜๋Š” "logs"(๊ตฌ์„ฑ ํด๋ž˜์Šค์˜ ProxyConfigClass.logsDir ํ•„๋“œ)๋ผ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊น…์€ ์ด๋ฆ„์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  1. main.txt โ€“ CommandServer๋ผ๋Š” ํด๋ž˜์Šค์˜ ์ž‘์—…์ด ์ด ํŒŒ์ผ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์—์„œ๋Š” str ๋ฌธ์ž์—ด์„ ์ด ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด mainLog(str)๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  2. ์„ธ์…˜-<%id%>.txt โ€” ์ด ํŒŒ์ผ์€ ํŠน์ • ํ”„๋ก์‹œ ์„ธ์…˜๊ณผ ๊ด€๋ จ๋œ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์—์„œ๋Š” ๋ฌธ์ž์—ด str์„ ์ด ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด sessionLog(str)๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋ฒ„.txt โ€“ ์ด ํŒŒ์ผ์€ ์œ„์—์„œ ์„ค๋ช…ํ•œ ํŒŒ์ผ์— ๊ธฐ๋ก๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ๋ฐ์ดํ„ฐ ํ˜•์‹:

<%Date%> [์Šค๋ ˆ๋“œ[<%thread id%>], id[]]: ๋กœ๊ทธ ๋ฌธ์ž์—ด

Proxy ๋ชจ๋“ˆ ๋™์ž‘ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์‚ฌํ•ญ๋„ ํŒŒ์ผ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ JSON ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

{
    "uncaughtException":<%short description of throwable%>
    "thread":<%thread%>
    "message":<%detail message of throwable%>
    "trace":        //Stack trace info
        [
            {
                "ClassName":
                "FileName":
                "LineNumber":
                "MethodName":
            },
            {
                "ClassName":
                "FileName":
                "LineNumber":
                "MethodName":
            }
        ]
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋ฅผ ๋ฌธ์ž์—ด ํ‘œํ˜„์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ช…๋ น์„ ๋ฐ›์€ ํ›„ ํ”„๋ก์‹œ ๋ชจ๋“ˆ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ๋ชจ๋“ˆ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์ด ์ˆ˜์‹ ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์ธ์„œ๋น„์Šค, ํ”„๋ก์‹œ ๋ชจ๋“ˆ์˜ ์ž‘๋™ ๊ด€๋ฆฌ(์‹œ์ž‘ ๋ฐ ์ค‘์ง€)๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์‹œ์ž‘ ๋‹จ๊ณ„:

1. XNUMX๋ถ„์— ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰๋˜๋Š” ํƒ€์ด๋จธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ํ”„๋ก์‹œ ๋ชจ๋“ˆ์˜ ํ™œ๋™์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“ˆ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด android.net.conn.CONNECTIVITY_CHANGE ํ”„๋ก์‹œ ๋ชจ๋“ˆ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ wake-lock์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. PARTIAL_WAKE_LOCK ๊ทธ๋ฅผ ๋ถ™์žก์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์žฅ์น˜ CPU๊ฐ€ ์ ˆ์ „ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋จผ์ € ๋ผ์ธ์„ ๋กœ๊น…ํ•˜์—ฌ ํ”„๋ก์‹œ ๋ชจ๋“ˆ์˜ ๋ช…๋ น ์ฒ˜๋ฆฌ ํด๋ž˜์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. mainLog("์„œ๋ฒ„ ์‹œ์ž‘") ะธ

์„œ๋ฒ„::start() ํ˜ธ์ŠคํŠธ[<%proxy_cnc%>], commandPort[<%command_port%>], ProxyPort[<%proxy_port%>]

์–ด๋””์—์„œ Proxy_cnc, command_port ๋ฐ Proxy_port โ€“ ํ”„๋ก์‹œ ์„œ๋ฒ„ ๊ตฌ์„ฑ์—์„œ ์–ป์€ ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

๋ช…๋ น ์ฒ˜๋ฆฌ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์—ฐ๊ฒฐ. ์‹œ์ž‘ ํ›„ ์ฆ‰์‹œ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

4. ์—ฐ๊ฒฐ ๋Œ€์ƒ ProxyConfigClass.host: ProxyConfigClass.commandPort ๊ฐ์—ผ๋œ ์žฅ์น˜์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•์‹์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

{
    "id":<%id%>,
    "imei":<%imei%>,
    "imsi":<%imsi%>,
    "model":<%model%>,
    "manufacturer":<%manufacturer%>,
    "androidVersion":<%androidVersion%>,
    "country":<%country%>,
    "partnerId":<%partnerId%>,
    "packageName":<%packageName%>,
    "networkType":<%networkType%>,
    "hasGsmSupport":<%hasGsmSupport%>,
    "simReady":<%simReady%>,
    "simCountry":<%simCountry%>,
    "networkOperator":<%networkOperator%>,
    "simOperator":<%simOperator%>,
    "version":<%version%>
}

์žฅ์†Œ :

  • id โ€“ ์‹๋ณ„์ž๋Š” "x"๋ผ๋Š” ๊ณต์œ  ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์—์„œ "id" ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์—†์œผ๋ฉด ์ƒˆ ๊ฐ’์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋ก์‹œ ๋ชจ๋“ˆ์—๋Š” Bot ID์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ƒ์„ฑ๋˜๋Š” ์ž์ฒด ์‹๋ณ„์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • imei โ€” ์žฅ์น˜์˜ IMEI์ž…๋‹ˆ๋‹ค. ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ด ํ•„๋“œ ๋Œ€์‹  ์˜ค๋ฅ˜ ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
  • imsi โ€” ์žฅ์น˜์˜ ๊ตญ์ œ ๋ชจ๋ฐ”์ผ ๊ฐ€์ž…์ž ID์ž…๋‹ˆ๋‹ค. ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ด ํ•„๋“œ ๋Œ€์‹  ์˜ค๋ฅ˜ ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
  • model โ€” ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ตœ์ข… ์ œํ’ˆ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • ์ œ์กฐ์—…์ฒด โ€” ์ œํ’ˆ/ํ•˜๋“œ์›จ์–ด ์ œ์กฐ์—…์ฒด(Build.MANUFACTURER).
  • androidVersion - "<%release_version%> (<%os_version%>),<%sdk_version%>" ํ˜•์‹์˜ ๋ฌธ์ž์—ด
  • ๊ตญ๊ฐ€ โ€” ์žฅ์น˜์˜ ํ˜„์žฌ ์œ„์น˜.
  • PartnerId๋Š” ๋นˆ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • packageName โ€“ ํŒจํ‚ค์ง€ ์ด๋ฆ„.
  • networkType โ€” ํ˜„์žฌ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์œ ํ˜•(์˜ˆ: "WIFI", "MOBILE"). ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • hasGsmSupport โ€“ true โ€“ ์ „ํ™”๊ธฐ๊ฐ€ GSM์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false์ž…๋‹ˆ๋‹ค.
  • simReady โ€“ SIM ์นด๋“œ ์ƒํƒœ.
  • simCountry - ISO ๊ตญ๊ฐ€ ์ฝ”๋“œ(SIM ์นด๋“œ ์ œ๊ณต์—…์ฒด ๊ธฐ์ค€).
  • networkOperator โ€” ์šด์˜์ž ์ด๋ฆ„. ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ด ํ•„๋“œ ๋Œ€์‹  ์˜ค๋ฅ˜ ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
  • simOperator - ์„œ๋น„์Šค ๊ณต๊ธ‰์ž ์ด๋ฆ„(SPN)์ž…๋‹ˆ๋‹ค. ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ด ํ•„๋“œ ๋Œ€์‹  ์˜ค๋ฅ˜ ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
  • ๋ฒ„์ „ - ์ด ํ•„๋“œ๋Š” ๊ตฌ์„ฑ ํด๋ž˜์Šค์— ์ €์žฅ๋˜๋ฉฐ ํ…Œ์ŠคํŠธ๋œ ๋ด‡ ๋ฒ„์ „์˜ ๊ฒฝ์šฐ "1.6"๊ณผ ๋™์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

5. ์„œ๋ฒ„์˜ ๋ช…๋ น์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ๋ช…๋ น์€ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

  • 0 ์˜คํ”„์…‹ - ๋ช…๋ น
  • 1 ์˜คํ”„์…‹ โ€“ sessionId
  • 2 ์˜คํ”„์…‹ - ๊ธธ์ด
  • 4 ์˜คํ”„์…‹ - ๋ฐ์ดํ„ฐ

๋ช…๋ น์ด ๋„์ฐฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹ค์Œ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
mainLog("ํ—ค๋” { sessionId<%id%>], ์œ ํ˜•[<%command%>], ๊ธธ์ด[<%length%>] }")

์„œ๋ฒ„์—์„œ๋Š” ๋‹ค์Œ ๋ช…๋ น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์„ฑํ•จ ๋ช…๋ น Data ์ƒํ’ˆ ์„ค๋ช…
์—ฐ๊ฒฐ ID 0 ์—ฐ๊ฒฐ ID ์ƒˆ ์—ฐ๊ฒฐ ๋งŒ๋“ค๊ธฐ
ํ‘น ์ž˜ 3 Time ํ”„๋ก์‹œ ๋ชจ๋“ˆ ์ผ์‹œ ์ค‘์ง€
ํƒ๊ตฌ 4 - PONG ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ

PONG ๋ฉ”์‹œ์ง€๋Š” 4๋ฐ”์ดํŠธ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 0 X 04000000.

ConnectionId ๋ช…๋ น์„ ์ˆ˜์‹ ํ•œ ๊ฒฝ์šฐ(์ƒˆ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๋ ค๋Š” ๊ฒฝ์šฐ) ๋ช…๋ น์—ฐ๊ฒฐ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค ํ”„๋ก์‹œ ์—ฐ๊ฒฐ.

  • ๋‘ ํด๋ž˜์Šค๊ฐ€ ํ”„๋ก์‹œ์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ์—ฐ๊ฒฐ ะธ end. ์ˆ˜์—…์„ ๋งŒ๋“ค ๋•Œ ํ”„๋ก์‹œ ์—ฐ๊ฒฐ ์ฃผ์†Œ์— ์—ฐ๊ฒฐ ์ค‘ ProxyConfigClass.host: ProxyConfigClass.proxyPort JSON ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

 {
    "id":<%connectionId%>
}

์ด์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ์›๊ฒฉ ์„œ๋ฒ„์˜ ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋œ SOCKS5 ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์€ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. end. ์—ฐ๊ฒฐ ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ๋žต์ ์œผ๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Android ํŠธ๋กœ์ด ๋ชฉ๋งˆ Gustuff๊ฐ€ ๊ท€ํ•˜์˜ ๊ณ„์ •์—์„œ ํฌ๋ฆผ(ํ”ผ์•„ํŠธ ๋ฐ ์•”ํ˜ธํ™”ํ)์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•

๋„คํŠธ์›Œํฌ ์ƒํ˜ธ์ž‘์šฉ

๋„คํŠธ์›Œํฌ ์Šค๋‹ˆํผ์— ์˜ํ•œ ํŠธ๋ž˜ํ”ฝ ๋ถ„์„์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด SSL ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ CnC ์„œ๋ฒ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์™€ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ชจ๋“  ์ „์†ก ๋ฐ์ดํ„ฐ๋Š” JSON ํ˜•์‹์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž‘์—… ์ค‘์— ๋‹ค์Œ ์š”์ฒญ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • http://<%CnC%>/api/v1/set_state.php โ€” ๋ช…๋ น ์‹คํ–‰์˜ ๊ฒฐ๊ณผ.
  • http://<%CnC%>/api/v1/get.php โ€” ๋ช…๋ น์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • http://<%CnC%>/api/v1/load_sms.php โ€” ๊ฐ์—ผ๋œ ์žฅ์น˜์—์„œ SMS ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • http://<%CnC%>/api/v1/load_ab.php โ€” ๊ฐ์—ผ๋œ ์žฅ์น˜์—์„œ ์—ฐ๋ฝ์ฒ˜ ๋ชฉ๋ก์„ ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • http://<%CnC%>/api/v1/aevents.php โ€“ ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ์— ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์š”์ฒญ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • http://<%CnC%>/api/v1/set_card.php โ€” Google Play ๋งˆ์ผ“์œผ๋กœ ๊ฐ€์žฅํ•œ ํ”ผ์‹ฑ ์ฐฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ป์€ ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ.
  • http://<%CnC%>/api/v1/logs.php โ€“ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.
  • http://<%CnC%>/api/v1/records.php โ€“ ํ”ผ์‹ฑ ์ฐฝ๊ตฌ๋ฅผ ํ†ตํ•ด ํš๋“ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ํ–‰์œ„.
  • http://<%CnC%>/api/v1/set_error.php โ€“ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์•Œ๋ฆผ.

์ถ”์ฒœ

๋ชจ๋ฐ”์ผ ํŠธ๋กœ์ด ๋ชฉ๋งˆ์˜ ์œ„ํ˜‘์œผ๋กœ๋ถ€ํ„ฐ ๊ณ ๊ฐ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์—…์€ ์‚ฌ์šฉ์ž ์žฅ์น˜์— ์ถ”๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ ์•…์„ฑ ํ™œ๋™์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๊ด„์ ์ธ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๊ทผ๋ณธ์ ์œผ๋กœ ์ค‘์š”ํ•œ ์ ์€ ๊ธฐ์—…์ด ์ธํ„ฐ๋„ท๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋ฐ”์ผ ์ฑ„๋„(์˜ˆ: ๋ชจ๋ฐ”์ผ ๋ฑ…ํ‚น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์•”ํ˜ธํ™”ํ ๊ฑฐ๋ž˜ ๋ฐ ๊ธฐํƒ€ ๋ชจ๋ฐ”์ผ ์ฑ„๋„)์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์œ„ํ—˜์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ต์ฐจ ์ฑ„๋„ ๋ถ„์„์˜ ๊ฐ€์šฉ์„ฑ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.๊ธˆ์œต ๊ฑฐ๋ž˜.

์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์•ˆ์ „ ๊ทœ์น™:

  • Google Play ์ด์™ธ์˜ ์†Œ์Šค์—์„œ Android OS๊ฐ€ ์„ค์น˜๋œ ๋ชจ๋ฐ”์ผ ์žฅ์น˜์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์น˜ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์š”์ฒญํ•˜๋Š” ๊ถŒ๋ฆฌ์— ํŠน๋ณ„ํ•œ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์‹ญ์‹œ์˜ค.
  • ์ •๊ธฐ์ ์œผ๋กœ Android OS ์—…๋ฐ์ดํŠธ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์˜ ํ™•์žฅ์ž์— ์ฃผ์˜ํ•˜์„ธ์š”.
  • ์˜์‹ฌ์Šค๋Ÿฌ์šด ์ž์›์„ ๋ฐฉ๋ฌธํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
  • SMS ๋ฉ”์‹œ์ง€๋กœ ๋ฐ›์€ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ฃผ์—ฐ ์„ธ๋ฌœ ๋กœ๊ฐ€์ฒด๋ฐ”, Group-IB ์ปดํ“จํ„ฐ ๋ฒ•์˜ํ•™ ์—ฐ๊ตฌ์†Œ์˜ ๋งฌ์›จ์–ด ์—ฐ๊ตฌ ์ฃผ๋‹ˆ์–ด ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€