隨著國(guó)內(nèi)互聯(lián)網(wǎng)的爆發(fā)式增長(zhǎng),流氓軟件也在不斷地發(fā)展。其推廣手段的不斷迭代升級(jí),反映出技術(shù)、商業(yè)與監(jiān)管各方之間的復(fù)雜博弈。多數(shù)流氓軟件都具備強(qiáng)制安裝,難以卸載,捆綁推廣,彈窗廣告等惡意行為,通過(guò)挾持用戶(hù)終端資源變現(xiàn)。從合作捆綁到群魔亂舞,網(wǎng)民的覺(jué)醒是否讓流氓軟件黔驢技窮了呢?并不見(jiàn)得,如今流氓軟件也具備了“柿子挑軟的捏”的特質(zhì)。會(huì)嘗試規(guī)避有殺軟的電腦,規(guī)避訪(fǎng)問(wèn)技術(shù)論壇的技術(shù)人士,甚至規(guī)避短時(shí)間內(nèi)成功卸載過(guò)流氓軟件的用戶(hù)。一方面我們希望源頭處做好監(jiān)管,一方面我們也希望每個(gè)人都能了解到流氓軟件的惡行并加以規(guī)避。
近期,火絨威脅情報(bào)中心監(jiān)測(cè)到名為“小藍(lán)鴿極速卸載”軟件頻繁推廣至用戶(hù),通過(guò)溯源發(fā)現(xiàn)其源頭有“多標(biāo)簽文件管理器”、“DX強(qiáng)力修復(fù)”、“EchoFind 文件搜索”等軟件,軟件中包含的插件極其相似,分析過(guò)程中選擇了其中的一個(gè)名為“DX 強(qiáng)力修復(fù)”的軟件進(jìn)行分析,分析初期發(fā)現(xiàn)該軟件有鎖屏廣告,隨后發(fā)現(xiàn)還會(huì)進(jìn)行桌面彈窗推廣、任務(wù)欄圖標(biāo)閃爍推廣、直接靜默安裝后展示一定時(shí)間彈窗、若錯(cuò)過(guò)則保持安裝等行為,甚至瀏覽器訪(fǎng)問(wèn)特定頁(yè)面時(shí)額外跳轉(zhuǎn)至推廣頁(yè)面。其推廣行為都是由下發(fā)的云控配置決定,且下發(fā)的配置中包含各種規(guī)避行為,例如規(guī)避安全軟件、讀取瀏覽器歷史記錄匹配特定 URL 進(jìn)行規(guī)避等?;鸾q安全產(chǎn)品可對(duì)上述流氓軟件進(jìn)行攔截查殺。
查殺圖
流程圖如下:
流程圖
市面上可以下載該軟件主要通過(guò)三個(gè)渠道,分別為聯(lián)想商店、3DM 以及百度競(jìng)價(jià)推廣。
多渠道推廣
樣本分析
啟動(dòng)插件:“DX 強(qiáng)力修復(fù)”軟件主進(jìn)程為 dxrepair.exe,啟動(dòng)初期不僅初始化自身相關(guān),創(chuàng)建軟件窗口,還會(huì)加載并初始化推廣插件或插件必要模塊,隨后分別執(zhí)行插件主函數(shù)。
多個(gè)推廣插件:插件是以獨(dú)立文件的形式存儲(chǔ)在安裝目錄下的 Bin 或 Plugins 文件夾下,其中推廣相關(guān)插件分別有彈窗推廣、鎖屏推廣、任務(wù)欄托盤(pán)推廣、靜默下載安裝推廣、瀏覽器廣告等模塊。其他插件例如 cache.dll 和 cachestub.dll 主要是用于云控配置的下載和分發(fā)至插件。
下圖為文件名稱(chēng)所對(duì)應(yīng)的插件功能介紹表:
推廣插件列表
下圖是 DLL 類(lèi)插件的加載并啟動(dòng)的邏輯:
插件初始化并啟動(dòng)
下圖是 PLN 類(lèi)插件的加載并啟動(dòng)的邏輯:
查找 pln 文件并循環(huán)調(diào)用插件主函數(shù)
1.1 tpihub.pln(桌面彈窗推廣模塊)
大致流程:該插件的主要功能為彈窗推廣,通過(guò)請(qǐng)求云控配置獲取到彈窗推廣模塊下載地址列表,隨后通過(guò)下載地址下載不同的軟件推廣模塊,例如 BlueDove(小藍(lán)鴿)軟件被推廣方式為獨(dú)立的模塊進(jìn)行彈窗,若想要推廣 A 軟件則可以將 A 軟件的彈窗推廣模塊的下載地址和配置信息加入到 tpihub.pln 會(huì)請(qǐng)求的云控配置中即可。
互斥體創(chuàng)建:插件初始化時(shí)會(huì)創(chuàng)建互斥體 TpiHubSingleInstance,從而防止沖突。
插件初始化
防止沖突
獲取云控配置:隨后該模塊開(kāi)始獲取云控配置,具體網(wǎng)頁(yè)鏈接為 http://base.heheshield.com/p/tpihub,參數(shù)為分別有 mid2(機(jī)器 ID)、winver(操作系統(tǒng)版本)、appver(主進(jìn)程版本)、modver(更新模塊版本)、pid(下載平臺(tái),例如 lx_store 聯(lián)想商店)、app(主進(jìn)程名,例如 dxrepair)。后續(xù)其他請(qǐng)求云控配置時(shí)都會(huì)帶有這些參數(shù),區(qū)別是攜帶數(shù)量的不同。
參數(shù)獲取方式:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\DXRepair 注冊(cè)表中獲取 mid 字段值和 pid 字段值。
利用 MsiGetFileVersionW 函數(shù)獲取文件版本 appver 與 modver。
利用 RtlGetNtVersionNumbers 函數(shù)獲取操作系統(tǒng)版本 winver。
主進(jìn)程名 app 則是通過(guò)主進(jìn)程文件路徑目錄名獲取。
拼接字符串:其中部分字符串通過(guò)單字符拼接的方式獲取,從而規(guī)避靜態(tài)字符串提取,加大逆向分析復(fù)雜度。
字符串拼接
解析彈窗推廣云控配置:獲取到的云控配置中含有多個(gè)推廣模塊,本文以 bdtpi.dll(小藍(lán)鴿彈窗推廣模塊)為示例進(jìn)行分析,可以看到其中含有模塊本地名、模塊下載地址、模塊哈希值、模塊等待秒數(shù),隨后該模塊對(duì)云控配置進(jìn)行解析并準(zhǔn)備下載。
彈窗推廣云控配置
下載并加載獲取其中初始化函數(shù)地址:隨后先獲取文件存放路徑,隨后檢查該路徑文件的 MD5 值是否與云控配置中的 MD5 值一致,如果不一致則會(huì)刪掉原文件并通過(guò) tpi_url 下載新的彈窗推廣模塊并加載該模塊,獲取其中 CreatePlugin 初始化函數(shù)地址。
下載并加載初始化函數(shù)地址
初始化并調(diào)用主函數(shù):調(diào)用到此步驟時(shí)將會(huì)轉(zhuǎn)移至 bdtpi.dll 模塊內(nèi)部。
初始化并調(diào)用主函數(shù)
1.1.1 bdtpi.dll(彈窗推廣模塊—小藍(lán)鴿)
創(chuàng)建互斥體:該模塊也與分發(fā)模塊類(lèi)似,初始化時(shí)創(chuàng)建互斥體 BlueDoveUnistSingleInstance,只是名稱(chēng)不同,且后續(xù)也會(huì)等待互斥體,防止出現(xiàn)沖突。
創(chuàng)建互斥體
獲取云控配置:隨后開(kāi)始獲取云控配置,請(qǐng)求鏈接 http://base.heheshield.com/k/bluedove/install 并傳入?yún)?shù) pid(下載平臺(tái),例如 lx_store 聯(lián)想商店)??梢钥吹狡渲邪螺d鏈接、執(zhí)行參數(shù)、安裝包哈希值、控制彈窗等數(shù)據(jù)。其中 command 為經(jīng)過(guò)密鑰 blowfish 加密(密鑰LAG9R1ZFWIS3J2LDHBAWZ50OGSAB99US)與 base64 編碼后形成的數(shù)據(jù),解密發(fā)現(xiàn)是 /S --pid=lite_n3 --optimize --run,其中測(cè)試得知 /S 參數(shù)為無(wú)彈窗靜默安裝參數(shù)。
云控配置
隨后通過(guò)云控配置對(duì)彈窗頻率和規(guī)避操作進(jìn)行控制,最終創(chuàng)建彈窗:
檢測(cè) BlueDove 是否被安裝,若被安裝則會(huì)等待一天后再檢測(cè)。
檢測(cè)開(kāi)機(jī)時(shí)間,若小于云控配置中 interval_time_ex 時(shí)間則過(guò)一個(gè)小時(shí)再檢測(cè)一次。
檢測(cè)進(jìn)程,若存在需要規(guī)避的進(jìn)程名則會(huì)過(guò) 5 分鐘再檢測(cè)一次。
檢測(cè)是否全屏,若是全屏則過(guò) 5 分鐘再檢測(cè)一次。
檢測(cè)是否處于不再打擾的時(shí)間范圍內(nèi),測(cè)試時(shí)云控配置中時(shí)間為 30 天,若處于不再打擾的時(shí)間范圍內(nèi)則等待至不再打擾時(shí)間結(jié)束。
檢測(cè)是否處于彈窗冷卻期,測(cè)試時(shí)云控配置中為 1 天,處理方式與上條一致。
遍歷出 x >= 3 天的時(shí)間,x = 當(dāng)前時(shí)間 - 最后一次彈窗時(shí)間。
最后會(huì)初始化并創(chuàng)建彈窗,隨后設(shè)置一天后再次循環(huán)這一流程。
創(chuàng)建彈窗
窗口按鈕:隨后窗口中會(huì)有 btn_close、btn_inst、dont_show 等按鈕,其中 btn_inst 按鈕即“立即卸載”按鈕,點(diǎn)擊該按鈕則會(huì)執(zhí)行下載操作。
按鈕點(diǎn)擊事件
安裝邏輯:隨后先檢查 Temp 目錄下是否存在 bluedove_setup.exe 文件,如果存在則直接刪除,隨后通過(guò)云控配置中 url 下載并計(jì)算 MD5 值是否與云控配置中 md5 相同,若不同則刪除,相同則返回 True 并執(zhí)行安裝程序。
下載安裝程序并安裝
1.2 lckscr.dll(桌面鎖屏推廣)
大致流程:鎖屏廣告由 lckscr.dll 負(fù)責(zé),該模塊通過(guò)獲取云控配置獲取到需要鎖屏推廣的網(wǎng)址,隨后通過(guò) cefwebview.exe 并傳入網(wǎng)址和全屏橫縱坐標(biāo),從而進(jìn)行鎖屏展示。
初始化:初期會(huì)先將軟件相關(guān) URL、類(lèi)名、軟件名等信息存儲(chǔ)至全局變量中,隨后通過(guò)讀取 AppData\Roaming\cdheheyoudun\config.ini 中讀取 lockscreen 項(xiàng)下 enable 字段,如果為 1,則會(huì)繼續(xù)執(zhí)行。隨后會(huì)請(qǐng)求至 base.heheshield.com/k/sp 獲取鎖屏相關(guān)云控配置。
鎖屏推廣云控配置例子
創(chuàng)建互斥體與云控配置寫(xiě)入共享內(nèi)存:隨后解析云控配置并從中提取 lockscreen_mutex 字段值作為名稱(chēng)創(chuàng)建互斥體,隨后利用全局變量獲取軟件名,并與 6CBA6EFE-0D50-46A5-B68A-114B848B1733_ 拼接為指定文件映射對(duì)象的名稱(chēng)并創(chuàng)建內(nèi)存映射將云控?cái)?shù)據(jù)寫(xiě)入到其中。
創(chuàng)建互斥體與寫(xiě)入共享內(nèi)存
讀取云控?cái)?shù)據(jù)并檢查必要字段:隨后再通過(guò)內(nèi)存映射對(duì)象獲取云控?cái)?shù)據(jù),解析并判斷是否 data->sp 字段下 ids、url(鎖屏推廣時(shí)所打開(kāi)的網(wǎng)頁(yè)鏈接) 等字段數(shù)據(jù)是否存在,若存在則執(zhí)行鎖屏監(jiān)聽(tīng)倒計(jì)時(shí)。這里并非只讀取上述字段,也會(huì)讀取其他頻率相關(guān)字段并設(shè)置鎖屏廣告頻率,只是不會(huì)影響鎖屏廣告的出現(xiàn)。例如,其中 lksecond 字段值為監(jiān)聽(tīng)倒計(jì)時(shí)的默認(rèn)秒數(shù)。
讀取云控?cái)?shù)據(jù)并檢查必要字段
倒計(jì)時(shí)監(jiān)聽(tīng)器設(shè)置:設(shè)置三個(gè) Timer 監(jiān)聽(tīng)器,其中 0x463 與 0x464 事件可以利用用戶(hù)輸入與鼠標(biāo)移動(dòng)幅度刷新監(jiān)聽(tīng)時(shí)間,0x465 事件可以在倒計(jì)時(shí)結(jié)束后調(diào)用鎖屏廣告。
調(diào)用鎖屏廣告
展示鎖屏廣告:隨后通過(guò) webstub.dll 間接創(chuàng)建 cefwebview.exe 程序,并傳入?yún)?shù) url(網(wǎng)頁(yè)地址)與 tab_rect(橫縱坐標(biāo))設(shè)置為全屏大小,從而實(shí)現(xiàn)全屏展示鎖屏廣告,其中進(jìn)程 cefwebview.exe 是 Chromium Embedded Framework (CEF) 的內(nèi)核,可在獨(dú)立窗口中渲染指定 URL 網(wǎng)頁(yè)內(nèi)容。
創(chuàng)建 cefwebview.exe 展示鎖屏廣告
下圖為鎖屏廣告:
鎖屏廣告
1.3 pwnd.dll(桌面彈窗以及托盤(pán)閃爍推廣模塊)
大致流程:獲取 cachestub.dll 分發(fā)的云控配置中 ppw_slow 字段值,其中 usual 字段值用于彈窗推廣,tray_icon 用于托盤(pán)推廣(主要為傳奇微端推廣),隨后pwnd.dll會(huì)下載并執(zhí)行兩個(gè)字段值中不同的腳本,例如控制頻率和規(guī)避腳本以及安裝腳本,從而實(shí)現(xiàn)彈窗與托盤(pán)閃爍,其中點(diǎn)擊托盤(pán)會(huì)打開(kāi)網(wǎng)頁(yè),并根據(jù)云控配置判斷是否下載傳奇微端并執(zhí)行。
云控配置的獲取路徑:包括該模塊,以及 runext.pln 和 wsadd.pln ,三者并不是獨(dú)立獲取云控配置,而是通過(guò) cache.dll 請(qǐng)求 intf-pc.heheshield.com/cfg/dxrepair_detail.php 下載云控配置,隨后利用 COPYDATA 消息將云控?cái)?shù)據(jù)傳輸至 cachestub.dll 中,隨后 cachestub.dll 再分發(fā)至這三個(gè)模塊中。
彈窗和任務(wù)欄圖標(biāo)推廣云控配置
Lua 腳本執(zhí)行:隨后開(kāi)始執(zhí)行 Lua 腳本,其中 Lua 腳本執(zhí)行是通過(guò)調(diào)用 bapi.dll 導(dǎo)出函數(shù) GetBasicObj,隨即獲取到 Lua 解釋器對(duì)象,并利用對(duì)象中解釋器函數(shù)進(jìn)行解釋執(zhí)行。
獲取解釋器對(duì)象
1.3.1 夸克彈窗推廣
推廣夸克彈窗時(shí)首先會(huì)控制頻率和規(guī)避殺毒軟件并展示彈窗:
檢測(cè)是否為 32 位系統(tǒng)(64 位則繼續(xù))
24 小時(shí)內(nèi)是否彈過(guò)(沒(méi)彈過(guò)則繼續(xù))
30 天內(nèi)是否選擇不再?gòu)棾觯ǔ^(guò) 30 天則繼續(xù))
60 天內(nèi)安裝過(guò)夸克(超過(guò) 60 天則繼續(xù))
2 小時(shí)內(nèi)彈過(guò)游戲相關(guān)彈窗或圖標(biāo)(沒(méi)彈過(guò)則繼續(xù))
請(qǐng)求云控確定是否展示該軟件(等待云控返回值)
檢測(cè)是否存在夸克軟件(不存在則繼續(xù))
檢測(cè)殺毒軟件(如果不存在指定殺毒軟件則繼續(xù))
控制頻率與規(guī)避腳本
隨后如果用戶(hù)點(diǎn)擊相應(yīng)按鈕則會(huì)執(zhí)行相應(yīng)腳本,包括不再提示、安裝、關(guān)閉等腳本,其中關(guān)閉腳本為空,即不執(zhí)行任何操作。
不再提示腳本:設(shè)置 %APPDATA%\tjch\config.ini 中 quark_popup 項(xiàng)中 last_dontshow 字段值為當(dāng)前時(shí)間。
安裝腳本:點(diǎn)擊安裝按鈕后開(kāi)始下載,隨后靜默安裝并檢查是否安裝完成,安裝完成后打開(kāi)夸克。
不再提示腳本
安裝腳本
夸克推廣彈窗
1.3.2 傳奇微端推廣
推廣傳奇微端時(shí)首先會(huì)控制頻率和規(guī)避殺毒軟件并展示彈窗:
檢測(cè)是否為 XP(不是 XP 則繼續(xù))
檢測(cè)安全衛(wèi)士是否設(shè)置禁止彈窗(沒(méi)設(shè)置則繼續(xù))
檢測(cè)安全衛(wèi)士彈窗攔截是否為強(qiáng)力模式(非強(qiáng)力模式則繼續(xù))
檢測(cè)殺毒軟件(無(wú)指定殺毒軟件則繼續(xù))
檢測(cè)用戶(hù)是否設(shè)置為不再提示(沒(méi)設(shè)置則繼續(xù))
檢測(cè)當(dāng)前產(chǎn)品是否在 4 小時(shí)內(nèi)展示托盤(pán)彈窗(未展示則繼續(xù))
檢測(cè)所有產(chǎn)品是否在 3 小時(shí)內(nèi)展示托盤(pán)彈窗(未展示則繼續(xù))
控制頻率與規(guī)避腳本
選擇需推廣的游戲,創(chuàng)建托盤(pán)并閃爍:隨后通過(guò)概率選擇推廣的游戲,下圖代碼示例為 100%概率推廣“wjcq”游戲,這是因?yàn)樵摫碇械钠渌螒?percent 值都為 0,所以 10 概率則為 100%推廣,隨后創(chuàng)建托盤(pán)并閃爍。
選擇推廣的游戲
托盤(pán)閃爍
點(diǎn)擊托盤(pán)回調(diào):此時(shí)如果用戶(hù)點(diǎn)擊該托盤(pán)圖標(biāo)則會(huì)先打開(kāi) URL,以及若沒(méi)有 360 則下載 wd_url 字段值中的 URL 指向的文件并執(zhí)行。
點(diǎn)擊托盤(pán)圖標(biāo)
1.4 runext.pln(腳本執(zhí)行模塊)
大致流程:該 runext.pln 模塊主要功能為接收云控配置后下載 Lua 腳本并執(zhí)行,腳本主要目的為靜默下載安裝需要推廣的軟件,其中不乏控制頻率和規(guī)避等操作,比較有趣的是靜默下載安裝完成后將會(huì)彈出應(yīng)用推薦窗口,此時(shí)如果不選擇“我不需要”(btn_dontshow)按鈕的話(huà)則會(huì)保持安裝狀態(tài),即使點(diǎn)擊右上角的“關(guān)閉”按鈕也會(huì)保持安裝,還存在其他腳本會(huì)通過(guò)獲取瀏覽器歷史記錄和收藏進(jìn)行對(duì)特定人群的規(guī)避。
云控配置來(lái)源:與 pwnd.dll 模塊一樣,也是通過(guò) cache.dll 獲取云控配置并通過(guò)cachestub.dll 傳輸,不同的是 pwnd.dll 會(huì)利用 ppw_slow 字段值,runext.pln 會(huì)利用 run_extention_slow 字段值執(zhí)行腳本,下圖中 script_url 與 script_url_zip 分別為非壓縮和壓縮包形式的被加密 Lua 腳本。
靜默安裝云控配置
執(zhí)行腳本前期準(zhǔn)備以及創(chuàng)建 runext.exe 執(zhí)行腳本進(jìn)程:獲取到 cachestub.dll 模塊發(fā)送過(guò)來(lái)的數(shù)據(jù)后,通過(guò) event 數(shù)值進(jìn)行不同的操作,若 event 值為 1 或 3 時(shí)則會(huì)準(zhǔn)備執(zhí)行腳本,而值為 2 的時(shí)候?qū)?huì)執(zhí)行刪除緩存操作。如下圖所示,其中 1 或 3 時(shí)會(huì)先解析傳過(guò)來(lái)的 JSON 數(shù)據(jù)后構(gòu)造出新的 JSON 數(shù)據(jù)(該數(shù)據(jù)中包含 event 值與 url 值),隨后將 0x1401 消息傳遞出去,該消息的含義是該模塊中為執(zhí)行腳本。
隨后將 JSON 數(shù)據(jù)寫(xiě)入至共享內(nèi)存中,以便之后跨進(jìn)程獲取數(shù)據(jù),隨后將開(kāi)始構(gòu)造參數(shù)并將參數(shù)利用 blowfish 加密和 base64 編碼,并將結(jié)果存儲(chǔ)于 %APPDATA%\DXRepairData\config.ini 文件中的 mechanism 項(xiàng) cdl 字段中,也便于跨進(jìn)程獲取數(shù)據(jù),隨后創(chuàng)建 runext.exe 程序進(jìn)行執(zhí)行腳本操作。
獲取 JSON 數(shù)據(jù)并準(zhǔn)備數(shù)據(jù)
runext.exe 進(jìn)程通過(guò)ini 文件與共享內(nèi)存,加載和調(diào)用執(zhí)行腳本的函數(shù):在 runext.exe 進(jìn)程中,將會(huì)通過(guò)解密上述 config.ini 文件中 cdl 字段值獲取到共享內(nèi)存名稱(chēng),隨后讀取共享內(nèi)存中的 JSON 數(shù)據(jù)并獲取 event 與 url 值。隨后通過(guò)參數(shù)中的 --dll 與 --entry 獲取到插件名稱(chēng) runext.pln(即本模塊) 與導(dǎo)出函數(shù)名稱(chēng)(runext,用于執(zhí)行腳本的函數(shù)),分別加載和調(diào)用。
獲取參數(shù)并加載與調(diào)用導(dǎo)出函數(shù)
不同 event 值的操作——下載或使用緩存:隨后利用 event 值進(jìn)行不同操作,值為 3 的時(shí)候通過(guò) url 值下載腳本(被加密),并先后通過(guò) base64 算法與 blowfish 算法解密出原始腳本并執(zhí)行,然后將 url 字符串的 md5 值作為文件名并寫(xiě)入被加密腳本。值為 1 的時(shí)候?qū)?huì)通過(guò) url 字符串的 md5 值為文件名讀取緩存并解密后執(zhí)行。
下載或讀取緩存并解密執(zhí)行
Lua 腳本彈窗:隨后開(kāi)始執(zhí)行 Lua 腳本,該系列腳本都是靜默安裝后通過(guò)彈窗 30 秒(或任意秒)讓用戶(hù)交互一下,其中只有當(dāng)用戶(hù)在 30 秒或任意時(shí)間內(nèi)點(diǎn)擊“我不需要”(btn_dontshow) 時(shí)才會(huì)刪除靜默安裝的內(nèi)容。
靜默安裝軟件列表:測(cè)試時(shí)獲取到的腳本中靜默安裝的軟件有以下內(nèi)容,可能還會(huì)有其他軟件(與云控配置下發(fā)的腳本相關(guān))。
DustAway
colorx
迅讀PDF
迅讀CAD
FastZip
其中靜默安裝 DsutAway 清理軟件的 Lua 腳本具體邏輯如下:
刪除舊安裝包、檢測(cè)當(dāng)天是否執(zhí)行過(guò)、若執(zhí)行過(guò)則進(jìn)行標(biāo)記。
檢測(cè)是否安裝過(guò)、若被刪除則兩個(gè)月內(nèi)不會(huì)安裝。
規(guī)避安裝的部分推廣軟件、規(guī)避卡巴、火絨、2345 衛(wèi)士安全軟件,但是注釋掉了騰訊管家和金山毒霸(部分腳本會(huì)注釋?zhuān)?/span>
下載 DustAway 安裝包,隨后靜默安裝。
彈窗 30 秒(或任意秒)、只有彈窗時(shí)間內(nèi)點(diǎn)擊“我不需要”(btn_dontshow)時(shí)才會(huì)進(jìn)行刪除,點(diǎn)擊右上角關(guān)閉也會(huì)保持安裝結(jié)果。
彈出窗口
DustAway 靜默安裝 Lua 腳本具體邏輯
規(guī)避特定瀏覽器歷史記錄與收藏中 URL:其中某個(gè) Lua 腳本還會(huì)獲取瀏覽器歷史記錄與收藏的網(wǎng)址進(jìn)行規(guī)避,猜測(cè)是不想干擾特定人群,從而避免麻煩。
利用瀏覽器歷史記錄或收藏進(jìn)行規(guī)避
自帶注釋與文檔鏈接:其中有些 Lua 腳本自帶整體注釋或插件推廣需求文檔鏈接:
腳本整體注釋
推廣需求文檔鏈接
1.5 wsadd.pln(瀏覽器廣告模塊)
大致流程:獲取到云控配置后會(huì)下載不同的配置文件,隨后通過(guò)配置進(jìn)行規(guī)避操作,若無(wú)需要規(guī)避的選項(xiàng)時(shí)將會(huì)匹配特定網(wǎng)頁(yè)并彈出推廣網(wǎng)頁(yè),例如匹配京東商品頁(yè)面并彈出。
云控配置來(lái)源和作用:與 pwnd.dll 模塊一樣,不同的是 wsadd.pln 會(huì)利用 alice_assist_v3_slow 字段值。其中 avoid_bro、avoid_web_cdn、sensitive_soft_path_cdn 分別規(guī)避特定瀏覽器、訪(fǎng)問(wèn)特定網(wǎng)址、特定軟件;global_script_cdn 為動(dòng)態(tài)開(kāi)關(guān)(一般為 Lua 腳本 return "1");resource_url 為匹配特定網(wǎng)頁(yè)并彈出推廣網(wǎng)頁(yè)所用。
云控配置
每次用戶(hù)訪(fǎng)問(wèn)符合推廣條件的網(wǎng)頁(yè)時(shí)將會(huì)觸發(fā)規(guī)避函數(shù),具體規(guī)避行為如下:
規(guī)避特定瀏覽器(avoid_bro):若用戶(hù)使用 slbrowser(聯(lián)想瀏覽器)、iexplore(IE 瀏覽器)、sogouexplorer(搜狗瀏覽器)等瀏覽器則不會(huì)推送廣告。
規(guī)避訪(fǎng)問(wèn)特定網(wǎng)址(avoid_web_cdn):若用戶(hù)訪(fǎng)問(wèn)以下帶有技術(shù)性或投訴相關(guān)網(wǎng)址時(shí)會(huì)將 ini 文件中的推廣開(kāi)關(guān)字段(WebADSwitch 字段)設(shè)置為 0,從而禁止推廣(下文中稱(chēng)為“設(shè)置禁止推廣”)。
規(guī)避特定網(wǎng)址
檢測(cè)安裝的軟件(sensitive_soft_path_cdn):遍歷注冊(cè)表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 獲取安裝列表并獲取其中 DisplayName,與需要規(guī)避的軟件列表比較,若符合規(guī)避條件,則終止推廣操作。
遍歷安裝列表并進(jìn)行規(guī)避
檢測(cè)控制面板窗口:檢測(cè)標(biāo)題名為“所有控制面板項(xiàng)”或“控制面板”以及類(lèi)名為 CabinetWClass 的窗口,經(jīng)過(guò)確認(rèn)發(fā)現(xiàn)該類(lèi)名為控制面板特有的類(lèi)名。
檢測(cè)控制面版窗口
檢測(cè)進(jìn)程:將會(huì)進(jìn)行檢測(cè)的進(jìn)程有三種,分別為必須規(guī)避、系統(tǒng)管理進(jìn)程、遠(yuǎn)程控制進(jìn)程,對(duì)應(yīng)的處理方式也會(huì)不同。
如若碰到必須規(guī)避的進(jìn)程,例如 windbg.exe、procmon.exe 等逆向分析的進(jìn)程則會(huì)設(shè)置禁止推廣。
若碰到系統(tǒng)管理進(jìn)程,例如 regedit.exe(注冊(cè)表管理)或 taskmgr.exe(任務(wù)管理器)則會(huì)關(guān)閉一天推廣(通過(guò) today_valid 字段)。
若碰到遠(yuǎn)程控制進(jìn)程,例如 mstsc.exe(微軟自帶遠(yuǎn)程桌面程序),則與第二條一致,也會(huì)關(guān)閉一天推廣,只是往服務(wù)器報(bào)告的內(nèi)容為 rmt_quit。
MD5 值所對(duì)應(yīng)名稱(chēng)
匹配網(wǎng)頁(yè)并請(qǐng)求云控配置(resource_url):隨后通過(guò)云控配置 resource_url 中 url_reg對(duì)用戶(hù)訪(fǎng)問(wèn)的網(wǎng)頁(yè)進(jìn)行匹配,隨后通過(guò)請(qǐng)求 link_req_url 鏈接獲取到被加密的推廣網(wǎng)頁(yè)。
resource_url 云控配置
通過(guò)各類(lèi)工具解密被加密的推廣網(wǎng)頁(yè),獲取原始數(shù)據(jù)。
解密
隨后將會(huì)彈出推廣網(wǎng)頁(yè)。
彈出推廣頁(yè)面
溯源分析
初期關(guān)注到該事件是因?yàn)榛鸾q威脅情報(bào)系統(tǒng)中小藍(lán)鴿數(shù)據(jù)異常,從而判斷可能是有其他軟件正在推廣該軟件,其中通過(guò)數(shù)據(jù)發(fā)現(xiàn)主要是來(lái)源于“多標(biāo)簽文件管理器”、“DX強(qiáng)力修復(fù)”、“Echofind”等多種軟件,通過(guò)數(shù)字簽名和隱私聲明中發(fā)現(xiàn)這些軟件是由“成都有望科技有限公司”和“重慶赫赫有盾科技有限公司”等制作。
簽名和公司
因?yàn)榉治鰰r(shí)發(fā)現(xiàn) DX 強(qiáng)力修復(fù)軟件會(huì)推廣自家其他軟件或其他公司的軟件(例如 BlueDove 小藍(lán)鴿簽名為“天津簡(jiǎn)誠(chéng)科技有限公司”),所以通過(guò)“天眼查”等查詢(xún)軟件發(fā)現(xiàn)這些公司之間有一些細(xì)微的聯(lián)系,例如電話(huà)號(hào)碼、姓名、郵箱后綴等地方出現(xiàn)意外關(guān)聯(lián)。
天眼查
隨后分析過(guò)程中搜索其中進(jìn)程名時(shí)意外搜索到編譯這些軟件包的CCNet服務(wù)器日志,其中包含多個(gè)軟件包,例如 BlueDove、DustAway 等,還有多個(gè)編譯選項(xiàng),其中不乏 cqhhyd、tjch、tjxinyuan 等,火絨工程師通過(guò)分析多個(gè)公司之間的聯(lián)系時(shí)獲取到了一些信息,通過(guò)這些信息推測(cè)出了多個(gè)名稱(chēng)的含義。
編譯選項(xiàng)中公司名稱(chēng)
編譯選項(xiàng)
附錄
HASH: