孫沖沖 徐亞峰 卜東泰 韓港成 胥勛鵬 高明
摘? 要:惡意彈窗廣告是一種強(qiáng)迫式的廣告,這些廣告給投放者帶來(lái)巨大的利益,但是嚴(yán)重影響了用戶(hù)體驗(yàn),侵犯了用戶(hù)權(quán)益,同時(shí)也帶來(lái)很多安全隱患。惡意彈窗廣告攻擊檢測(cè)系統(tǒng)采用C/S架構(gòu),服務(wù)端使用樸素貝葉斯算法根據(jù)訓(xùn)練集生成和更新訓(xùn)練結(jié)果,并利用訓(xùn)練結(jié)果對(duì)客戶(hù)端發(fā)送的彈窗截圖文本進(jìn)行分類(lèi)預(yù)測(cè)??蛻?hù)端包括基礎(chǔ)攔截、截圖攔截以及主動(dòng)攔截三個(gè)模塊,主動(dòng)攔截模塊使用OCR技術(shù)將可疑彈窗截圖轉(zhuǎn)化為文本,然后把此文本傳給服務(wù)端,服務(wù)端加載之前訓(xùn)練集產(chǎn)生的訓(xùn)練結(jié)果,利用樸素貝葉斯算法得到此文本的預(yù)測(cè)結(jié)果,客戶(hù)端根據(jù)預(yù)測(cè)結(jié)果確定對(duì)此彈窗是否攔截。本系統(tǒng)實(shí)現(xiàn)了彈窗識(shí)別攔截的智能化,配置方便,交互界面易于使用。
關(guān)鍵詞:彈窗廣告;機(jī)器學(xué)習(xí);樸素貝葉斯算法;攔截
中圖分類(lèi)號(hào):TP315? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:Malicious pop-up advertisements are imposed on users. These advertisements bring huge benefits to the publishers, but seriously affect user experience, infringe on user rights and interests, and also bring many security risks. The malicious pop-up advertisements attack detection system uses C/S (Client/Server) architecture. The server uses Naive Bayes algorithm to generate and update training results based on the training set, and uses the training results to classify and predict the pop-up screenshot text sent by the client. The client includes three modules: basic interception, screenshot interception, and active interception. The active interception module uses OCR (Optical Character Recognition) technology to convert the suspicious pop-up screenshot into text, and then transmits this text to the server. The server loads the training results generated by the previous training set. The naive Bayesian algorithm is used to obtain the prediction result of this text, and the client determines whether to block the pop-up window according to the prediction result. The system implements the intelligent identification and interception of the pop-up window, with convenient configuration and user-friendly interface.
Keywords:pop-up advertisements; machine learning; naive Bayesian algorithm; interception
1? ?引言(Introduction)
受到利益的驅(qū)使,很多惡意軟件都捆綁了大量的廣告。但是,以這種方式獲利是不健康,不正當(dāng)?shù)?,不利于互?lián)網(wǎng)產(chǎn)業(yè)的正常發(fā)展。雖然目前有一部分?jǐn)r截軟件實(shí)現(xiàn)了惡意廣告攔截的功能,但很多彈窗廣告依賴(lài)用戶(hù)識(shí)別,智能化程度不高。本項(xiàng)目就是在研究相應(yīng)的檢測(cè)技術(shù)的基礎(chǔ)上,設(shè)計(jì)與實(shí)現(xiàn)一款高效率的智能惡意彈窗檢測(cè)系統(tǒng),扼制惡意廣告泛濫的情況,營(yíng)造良好的上網(wǎng)環(huán)境。
2? ?系統(tǒng)功能介紹(Introduction of system function)
本系統(tǒng)采用C/S(Client/Server, 客戶(hù)端/服務(wù)端)架構(gòu)??蛻?hù)端主要負(fù)責(zé)與用戶(hù)的交互,同時(shí)具有輕量的數(shù)據(jù)處理任務(wù);服務(wù)端主要負(fù)責(zé)用戶(hù)數(shù)據(jù)處理。
2.1? ?客戶(hù)端設(shè)計(jì)
本系統(tǒng)的客戶(hù)端使用基于.NET Framework框架的C#語(yǔ)言,采用WinFrom窗體作為交互界面,既保證了客戶(hù)端的良好兼容性,也為用戶(hù)提供了友好的交互方式。
客戶(hù)端主要包含的功能有:基礎(chǔ)攔截功能、截圖攔截功能、主動(dòng)攔截功能。基礎(chǔ)攔截功能是指開(kāi)啟攔截后,攔截黑名單的程序;截圖攔截功能是指根據(jù)用戶(hù)選中的窗口,對(duì)相關(guān)應(yīng)用加以攔截;主動(dòng)攔截功能是指主動(dòng)監(jiān)控自動(dòng)彈出的窗口,將此彈窗的文本信息給服務(wù)端后,根據(jù)服務(wù)端的返回預(yù)測(cè)結(jié)果決定對(duì)此彈窗是否攔截。
2.2? ?服務(wù)端設(shè)計(jì)
服務(wù)端部署在BCC(Baidu Cloud Compute,百度云服務(wù)器)上,提供了Socket(套接字)通訊服務(wù)和FTP(File Transfer Protocol,文件傳輸協(xié)議)服務(wù),處理服務(wù)端和客戶(hù)端之間的數(shù)據(jù)通信。
服務(wù)端包含的主要功能有:使用樸素貝葉斯算法根據(jù)訓(xùn)練集生成和更新訓(xùn)練結(jié)果,并利用訓(xùn)練結(jié)果對(duì)客戶(hù)端發(fā)送的彈窗截圖文本進(jìn)行分類(lèi)預(yù)測(cè);收集客戶(hù)端上傳的彈窗圖片,用以豐富訓(xùn)練集。
3? ?基礎(chǔ)攔截功能(Basic interception function)
3.1? ?SQLite數(shù)據(jù)庫(kù)的介紹
SQLite是世界上最廣泛部署的SQL數(shù)據(jù)庫(kù)引擎之一,它是一個(gè)進(jìn)程內(nèi)的庫(kù),實(shí)現(xiàn)了自給自足的、無(wú)服務(wù)器的、零配置的、事務(wù)性的SQL數(shù)據(jù)庫(kù)引擎,具有輕量、速度快、穩(wěn)定等特點(diǎn)[1]。SQLite的小巧穩(wěn)定為本系統(tǒng)數(shù)據(jù)存儲(chǔ)提供可靠支持。
3.2? ?基礎(chǔ)攔截功能流程
當(dāng)本系統(tǒng)的客戶(hù)端軟件運(yùn)行并打開(kāi)攔截功能后,將通過(guò)System.Diagnostics命名空間下的Process類(lèi)獲取當(dāng)前進(jìn)程,實(shí)時(shí)與黑名單以及白名單的應(yīng)用比對(duì),并結(jié)束在黑名單且不在白名單中的應(yīng)用。
4? ?截圖攔截功能(Screenshot interception function)
4.1? ?Win32 API
Win32 API是Microsoft Windows上預(yù)留的應(yīng)用程序編程接口,得益于.NET Framework的靈活性,本系統(tǒng)可以通過(guò)c#語(yǔ)言很便利地獲取API接口,很好地實(shí)現(xiàn)了根據(jù)位置獲取窗口句柄、直接獲取目標(biāo)窗口截圖等功能[2,3]。
4.2? ?截圖攔截流程
用戶(hù)點(diǎn)擊截圖攔截按鈕后,會(huì)立即生成一個(gè)與當(dāng)前桌面相同的窗口,當(dāng)用戶(hù)單擊后,通過(guò)調(diào)用Win32 API,獲取此位置的窗口句柄,在用戶(hù)點(diǎn)擊確認(rèn)按鈕后,將應(yīng)用加入黑名單。
5? ?主動(dòng)攔截功能(Active interception function)
5.1? ?樸素貝葉斯算法
樸素貝葉斯算法(Naive Bayesian algorithm)基于概率論,是最廣泛的機(jī)器學(xué)習(xí)分類(lèi)算法之一。它在原本貝葉斯算法的基礎(chǔ)之上,假定各特征相互獨(dú)立,極大簡(jiǎn)化了算法的復(fù)雜性,提高了算法的使用效率。本系統(tǒng)將在文本分類(lèi)階段使用此算法,對(duì)文本加以分類(lèi)。
在本系統(tǒng)中,我們分別有惡意彈窗和正常窗口兩種可分類(lèi)的類(lèi)別。在特征固定的情形下,我們即可通過(guò)比較(惡意彈窗│特征)與(正常窗口│特征)的大小判斷特征所屬的類(lèi)別。因?yàn)椋◥阂鈴棿癌μ卣鳎┡c(正常窗口│特征)屬于后驗(yàn)概率,所以?xún)烧卟⒉槐阌谥苯颖容^。不過(guò),我們可以將它們分別代入貝葉斯公式,將比較的目標(biāo)變成比較與的大小。因?yàn)榉帜赶嗤?,所以我們只需比較(惡意彈窗)·(特征│惡意彈窗)與(正常窗口)·(特征│正常窗口)的大小即可[4,5]。
樸素貝葉斯算法假定了特征之間相互獨(dú)立,所以很容易比較(惡意彈窗)·(特征│惡意彈窗)與(正常窗口)·(特征│正常窗口)的大小,從而確定類(lèi)別。
樸素貝葉斯算法分類(lèi)效率穩(wěn)定,在文本數(shù)量較少時(shí),依然會(huì)有較好的表現(xiàn),同時(shí)對(duì)確實(shí)數(shù)據(jù)不敏感,適用性良好。相對(duì)于貝葉斯算法,由于樸素貝葉斯算法假設(shè)了屬性之間相互獨(dú)立,犧牲了一定的準(zhǔn)確率[6]。
由于本系統(tǒng)所收集的訓(xùn)練樣本較少,而樸素貝葉斯算法對(duì)少量的文本依然有較好的支持;同時(shí),識(shí)別后文本的屬性之間獨(dú)立性較高,有效減少了屬性之間相互獨(dú)立的假設(shè)多帶來(lái)的誤差。
5.2? ?訓(xùn)練集
本系統(tǒng)將借助Sklearn庫(kù)輔助模型訓(xùn)練,并實(shí)現(xiàn)訓(xùn)練集的保存和加載。Sklearn(Scikit-learn)是基于Python語(yǔ)言的機(jī)器學(xué)習(xí)庫(kù),它通過(guò)NumPy、SciPy和Matplotlib等Python庫(kù)融合,高效地實(shí)現(xiàn)了幾乎所有主流機(jī)器學(xué)習(xí)算法。
我們將收集到的惡意彈窗截圖和正常軟件截圖分開(kāi)置于兩個(gè)文件夾里,其中兩種截圖各占50%;接著分別把兩類(lèi)截圖使用OCR(Optical Character Recognition,光學(xué)字符識(shí)別)轉(zhuǎn)換為文本。處理后的兩類(lèi)文本分開(kāi)放置,共同作為訓(xùn)練集。
5.3? ?數(shù)據(jù)處理
(1)jieba分詞
jieba是目前最好的Python中文分詞庫(kù),它支持精確模式、全模式、搜索引擎模式這三種分詞模式[7]。本系統(tǒng)的中文文檔采用精確模式,配合stopword(停止詞)的使用,對(duì)中文文本處理有很好的效果。
(2)One-Hot編碼(獨(dú)熱碼)
One-Hot編碼使用二進(jìn)制向量表示分類(lèi)變量,在將分類(lèi)值映射為整數(shù)值后,用二進(jìn)制向量表示每個(gè)整數(shù)值。本系統(tǒng)中我們將文本中的詞與詞袋的詞一一比較,若該詞位于詞袋中,則編碼為1,否則編碼為0。
(3)數(shù)據(jù)處理流程
首先加載由OCR識(shí)別后的文本,接著利用正則表達(dá)式匹配,去除文本中的非中文字符,然后用jieba分詞,獲得分割后的中文文本。獲取分割后的文本后,我們將所有的文本及其類(lèi)別的集合劃分訓(xùn)練集和測(cè)試集,生成詞袋。最后生成One-Hot編碼,獲得特征值。
5.4? ?使用樸素貝葉斯算法生成文本預(yù)測(cè)
獲取數(shù)據(jù)集,在數(shù)據(jù)處理后,得到數(shù)據(jù)集的特征值集合;接著調(diào)用sklearn庫(kù)中的MultinomialNB()方法,結(jié)合特征集合實(shí)例化分類(lèi)器;最后調(diào)用sklearn庫(kù)中的joblib,將訓(xùn)練的結(jié)果持久保存。
在服務(wù)端的socket模塊獲得待分類(lèi)數(shù)據(jù)后,會(huì)將文本傳入分類(lèi)腳本。分類(lèi)腳本在處理時(shí),先通過(guò)joblib加載已經(jīng)保存的訓(xùn)練結(jié)果,生成分類(lèi)器。最后調(diào)用分類(lèi)器的predict()方法,獲得預(yù)測(cè)的分類(lèi)結(jié)果,并回傳socket通訊模塊,文本預(yù)測(cè)流程如圖1所示。
5.5? ?主動(dòng)攔截的實(shí)現(xiàn)
Hook(鉤子)是windows中提供的一種用以替換DOS下“中斷”的系統(tǒng)機(jī)制,它可以在系統(tǒng)調(diào)用某函數(shù)之前,提前捕獲消息。在鉤子捕獲消息,獲得控制權(quán)時(shí)后,便可以對(duì)該函數(shù)加以處理。在源碼未知的情況下,可以通過(guò)鉤掛相應(yīng)的API函數(shù),完成函數(shù)地址重寫(xiě)實(shí)現(xiàn)功能擴(kuò)展[8]。
在本系統(tǒng)中,利用Hook獲取了鼠標(biāo)的單擊事件。在客戶(hù)端開(kāi)啟主動(dòng)攔截功能后,主動(dòng)攔截模塊將不斷監(jiān)控桌面窗口的創(chuàng)建,每當(dāng)用戶(hù)未通過(guò)鼠標(biāo)點(diǎn)擊而彈出窗口時(shí),便將此窗口的應(yīng)用標(biāo)為可疑應(yīng)用程序,等待進(jìn)一步的鑒定。
首先監(jiān)控桌面應(yīng)用程序,發(fā)現(xiàn)可疑應(yīng)用程序后,調(diào)用Win32API獲取可疑程序的截圖;接著使用OCR得到可疑程序截圖的文本內(nèi)容,并將文本內(nèi)容交給服務(wù)器進(jìn)行文本預(yù)測(cè);最后得到服務(wù)器返回的預(yù)測(cè)結(jié)果,并根據(jù)預(yù)測(cè)結(jié)果決定是否進(jìn)行攔截,主動(dòng)攔截流程如圖2所示。
如果客戶(hù)端出現(xiàn)惡意彈窗廣告,客戶(hù)端傳遞此惡意彈窗的內(nèi)容文本到服務(wù)端,服務(wù)端對(duì)此內(nèi)容文本加以預(yù)測(cè),如果預(yù)測(cè)的結(jié)果為:“pop”,就代表此窗口是惡意彈窗,客戶(hù)端的預(yù)測(cè)如圖3所示;客戶(hù)端收到預(yù)測(cè)結(jié)果后,惡意彈窗廣告被攔截,攔截后的效果如圖4所示。
6? ?結(jié)論(Conclusion)
本惡意彈窗廣告攻擊檢測(cè)系統(tǒng)通過(guò)客戶(hù)端與服務(wù)端之間通信,實(shí)現(xiàn)了智能化攔截??蛻?hù)端為用戶(hù)提供了良好的交互支持,界面友好易用?;A(chǔ)攔截功能、截圖攔截功能和主動(dòng)攔截功能互相配合,實(shí)現(xiàn)了較好的攔截效果。相較于其他的攔截軟件,主動(dòng)攔截功能的智能化大大提升了用戶(hù)的使用體驗(yàn)。服務(wù)端為客戶(hù)端可以提供可靠的數(shù)據(jù)處理支持。得益于樸素貝葉斯算法的高性能,本系統(tǒng)對(duì)服務(wù)器的性能要求不高,有良好的經(jīng)濟(jì)可行性。
參考文獻(xiàn)(References)
[1] 鄧杰海,全智龍,周紅娟.基于C#與SQLite的銀行財(cái)政非稅收入管理軟件的研發(fā)[J].電腦知識(shí)與技術(shù),2017,13(10):74-75.
[2] Jefrey Richter.王建華,譯.Windows核心編程[M].北京:機(jī)械工業(yè)出版社,2000.
[3] W.Richard Stevens.楊繼張,譯.第2卷進(jìn)程間通信(第2版)[M].北京:清華大學(xué)出版社,2002.
[4] 劉秋陽(yáng),林澤鋒,欒青青.基于樸素貝葉斯算法的垃圾短信智能識(shí)別系統(tǒng)[J].電腦知識(shí)與技術(shù),2016,12(12):190-192.
[5] 鄒曉輝.樸素貝葉斯算法在文本分類(lèi)中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2017(12):132-133.
[6] 郭勛誠(chéng).樸素貝葉斯分類(lèi)算法應(yīng)用研究[J].通訊世界,2019,26(01):241-242.
[7] 嚴(yán)明,鄭昌興.Python環(huán)境下的文本分詞與詞云制作[J].現(xiàn)代計(jì)算機(jī)(專(zhuān)業(yè)版),2018(34):86-89.
[8] 蘇雪麗,袁丁.Windows下兩種API鉤掛技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(07):2548-2552.