孫沖沖 徐亞峰 卜東泰 韓港成 胥勛鵬 高明



摘? 要:惡意彈窗廣告是一種強迫式的廣告,這些廣告給投放者帶來巨大的利益,但是嚴重影響了用戶體驗,侵犯了用戶權益,同時也帶來很多安全隱患。惡意彈窗廣告攻擊檢測系統采用C/S架構,服務端使用樸素貝葉斯算法根據訓練集生成和更新訓練結果,并利用訓練結果對客戶端發送的彈窗截圖文本進行分類預測。客戶端包括基礎攔截、截圖攔截以及主動攔截三個模塊,主動攔截模塊使用OCR技術將可疑彈窗截圖轉化為文本,然后把此文本傳給服務端,服務端加載之前訓練集產生的訓練結果,利用樸素貝葉斯算法得到此文本的預測結果,客戶端根據預測結果確定對此彈窗是否攔截。本系統實現了彈窗識別攔截的智能化,配置方便,交互界面易于使用。
關鍵詞:彈窗廣告;機器學習;樸素貝葉斯算法;攔截
中圖分類號:TP315? ? ?文獻標識碼: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)
受到利益的驅使,很多惡意軟件都捆綁了大量的廣告。但是,以這種方式獲利是不健康,不正當的,不利于互聯網產業的正常發展。雖然目前有一部分攔截軟件實現了惡意廣告攔截的功能,但很多彈窗廣告依賴用戶識別,智能化程度不高。本項目就是在研究相應的檢測技術的基礎上,設計與實現一款高效率的智能惡意彈窗檢測系統,扼制惡意廣告泛濫的情況,營造良好的上網環境。
2? ?系統功能介紹(Introduction of system function)
本系統采用C/S(Client/Server, 客戶端/服務端)架構。客戶端主要負責與用戶的交互,同時具有輕量的數據處理任務;服務端主要負責用戶數據處理。
2.1? ?客戶端設計
本系統的客戶端使用基于.NET Framework框架的C#語言,采用WinFrom窗體作為交互界面,既保證了客戶端的良好兼容性,也為用戶提供了友好的交互方式。
客戶端主要包含的功能有:基礎攔截功能、截圖攔截功能、主動攔截功能。基礎攔截功能是指開啟攔截后,攔截黑名單的程序;截圖攔截功能是指根據用戶選中的窗口,對相關應用加以攔截;主動攔截功能是指主動監控自動彈出的窗口,將此彈窗的文本信息給服務端后,根據服務端的返回預測結果決定對此彈窗是否攔截。
2.2? ?服務端設計
服務端部署在BCC(Baidu Cloud Compute,百度云服務器)上,提供了Socket(套接字)通訊服務和FTP(File Transfer Protocol,文件傳輸協議)服務,處理服務端和客戶端之間的數據通信。
服務端包含的主要功能有:使用樸素貝葉斯算法根據訓練集生成和更新訓練結果,并利用訓練結果對客戶端發送的彈窗截圖文本進行分類預測;收集客戶端上傳的彈窗圖片,用以豐富訓練集。
3? ?基礎攔截功能(Basic interception function)
3.1? ?SQLite數據庫的介紹
SQLite是世界上最廣泛部署的SQL數據庫引擎之一,它是一個進程內的庫,實現了自給自足的、無服務器的、零配置的、事務性的SQL數據庫引擎,具有輕量、速度快、穩定等特點[1]。SQLite的小巧穩定為本系統數據存儲提供可靠支持。
3.2? ?基礎攔截功能流程
當本系統的客戶端軟件運行并打開攔截功能后,將通過System.Diagnostics命名空間下的Process類獲取當前進程,實時與黑名單以及白名單的應用比對,并結束在黑名單且不在白名單中的應用。
4? ?截圖攔截功能(Screenshot interception function)
4.1? ?Win32 API
Win32 API是Microsoft Windows上預留的應用程序編程接口,得益于.NET Framework的靈活性,本系統可以通過c#語言很便利地獲取API接口,很好地實現了根據位置獲取窗口句柄、直接獲取目標窗口截圖等功能[2,3]。
4.2? ?截圖攔截流程
用戶點擊截圖攔截按鈕后,會立即生成一個與當前桌面相同的窗口,當用戶單擊后,通過調用Win32 API,獲取此位置的窗口句柄,在用戶點擊確認按鈕后,將應用加入黑名單。
5? ?主動攔截功能(Active interception function)
5.1? ?樸素貝葉斯算法
樸素貝葉斯算法(Naive Bayesian algorithm)基于概率論,是最廣泛的機器學習分類算法之一。它在原本貝葉斯算法的基礎之上,假定各特征相互獨立,極大簡化了算法的復雜性,提高了算法的使用效率。本系統將在文本分類階段使用此算法,對文本加以分類。
在本系統中,我們分別有惡意彈窗和正常窗口兩種可分類的類別。在特征固定的情形下,我們即可通過比較(惡意彈窗│特征)與(正常窗口│特征)的大小判斷特征所屬的類別。因為(惡意彈窗│特征)與(正常窗口│特征)屬于后驗概率,所以兩者并不便于直接比較。不過,我們可以將它們分別代入貝葉斯公式,將比較的目標變成比較與的大小。因為分母相同,所以我們只需比較(惡意彈窗)·(特征│惡意彈窗)與(正常窗口)·(特征│正常窗口)的大小即可[4,5]。
樸素貝葉斯算法假定了特征之間相互獨立,所以很容易比較(惡意彈窗)·(特征│惡意彈窗)與(正常窗口)·(特征│正常窗口)的大小,從而確定類別。
樸素貝葉斯算法分類效率穩定,在文本數量較少時,依然會有較好的表現,同時對確實數據不敏感,適用性良好。相對于貝葉斯算法,由于樸素貝葉斯算法假設了屬性之間相互獨立,犧牲了一定的準確率[6]。
由于本系統所收集的訓練樣本較少,而樸素貝葉斯算法對少量的文本依然有較好的支持;同時,識別后文本的屬性之間獨立性較高,有效減少了屬性之間相互獨立的假設多帶來的誤差。
5.2? ?訓練集
本系統將借助Sklearn庫輔助模型訓練,并實現訓練集的保存和加載。Sklearn(Scikit-learn)是基于Python語言的機器學習庫,它通過NumPy、SciPy和Matplotlib等Python庫融合,高效地實現了幾乎所有主流機器學習算法。
我們將收集到的惡意彈窗截圖和正常軟件截圖分開置于兩個文件夾里,其中兩種截圖各占50%;接著分別把兩類截圖使用OCR(Optical Character Recognition,光學字符識別)轉換為文本。處理后的兩類文本分開放置,共同作為訓練集。
5.3? ?數據處理
(1)jieba分詞
jieba是目前最好的Python中文分詞庫,它支持精確模式、全模式、搜索引擎模式這三種分詞模式[7]。本系統的中文文檔采用精確模式,配合stopword(停止詞)的使用,對中文文本處理有很好的效果。
(2)One-Hot編碼(獨熱碼)
One-Hot編碼使用二進制向量表示分類變量,在將分類值映射為整數值后,用二進制向量表示每個整數值。本系統中我們將文本中的詞與詞袋的詞一一比較,若該詞位于詞袋中,則編碼為1,否則編碼為0。
(3)數據處理流程
首先加載由OCR識別后的文本,接著利用正則表達式匹配,去除文本中的非中文字符,然后用jieba分詞,獲得分割后的中文文本。獲取分割后的文本后,我們將所有的文本及其類別的集合劃分訓練集和測試集,生成詞袋。最后生成One-Hot編碼,獲得特征值。
5.4? ?使用樸素貝葉斯算法生成文本預測
獲取數據集,在數據處理后,得到數據集的特征值集合;接著調用sklearn庫中的MultinomialNB()方法,結合特征集合實例化分類器;最后調用sklearn庫中的joblib,將訓練的結果持久保存。
在服務端的socket模塊獲得待分類數據后,會將文本傳入分類腳本。分類腳本在處理時,先通過joblib加載已經保存的訓練結果,生成分類器。最后調用分類器的predict()方法,獲得預測的分類結果,并回傳socket通訊模塊,文本預測流程如圖1所示。
5.5? ?主動攔截的實現
Hook(鉤子)是windows中提供的一種用以替換DOS下“中斷”的系統機制,它可以在系統調用某函數之前,提前捕獲消息。在鉤子捕獲消息,獲得控制權時后,便可以對該函數加以處理。在源碼未知的情況下,可以通過鉤掛相應的API函數,完成函數地址重寫實現功能擴展[8]。
在本系統中,利用Hook獲取了鼠標的單擊事件。在客戶端開啟主動攔截功能后,主動攔截模塊將不斷監控桌面窗口的創建,每當用戶未通過鼠標點擊而彈出窗口時,便將此窗口的應用標為可疑應用程序,等待進一步的鑒定。
首先監控桌面應用程序,發現可疑應用程序后,調用Win32API獲取可疑程序的截圖;接著使用OCR得到可疑程序截圖的文本內容,并將文本內容交給服務器進行文本預測;最后得到服務器返回的預測結果,并根據預測結果決定是否進行攔截,主動攔截流程如圖2所示。
如果客戶端出現惡意彈窗廣告,客戶端傳遞此惡意彈窗的內容文本到服務端,服務端對此內容文本加以預測,如果預測的結果為:“pop”,就代表此窗口是惡意彈窗,客戶端的預測如圖3所示;客戶端收到預測結果后,惡意彈窗廣告被攔截,攔截后的效果如圖4所示。
6? ?結論(Conclusion)
本惡意彈窗廣告攻擊檢測系統通過客戶端與服務端之間通信,實現了智能化攔截。客戶端為用戶提供了良好的交互支持,界面友好易用。基礎攔截功能、截圖攔截功能和主動攔截功能互相配合,實現了較好的攔截效果。相較于其他的攔截軟件,主動攔截功能的智能化大大提升了用戶的使用體驗。服務端為客戶端可以提供可靠的數據處理支持。得益于樸素貝葉斯算法的高性能,本系統對服務器的性能要求不高,有良好的經濟可行性。
參考文獻(References)
[1] 鄧杰海,全智龍,周紅娟.基于C#與SQLite的銀行財政非稅收入管理軟件的研發[J].電腦知識與技術,2017,13(10):74-75.
[2] Jefrey Richter.王建華,譯.Windows核心編程[M].北京:機械工業出版社,2000.
[3] W.Richard Stevens.楊繼張,譯.第2卷進程間通信(第2版)[M].北京:清華大學出版社,2002.
[4] 劉秋陽,林澤鋒,欒青青.基于樸素貝葉斯算法的垃圾短信智能識別系統[J].電腦知識與技術,2016,12(12):190-192.
[5] 鄒曉輝.樸素貝葉斯算法在文本分類中的應用[J].數字技術與應用,2017(12):132-133.
[6] 郭勛誠.樸素貝葉斯分類算法應用研究[J].通訊世界,2019,26(01):241-242.
[7] 嚴明,鄭昌興.Python環境下的文本分詞與詞云制作[J].現代計算機(專業版),2018(34):86-89.
[8] 蘇雪麗,袁丁.Windows下兩種API鉤掛技術的研究與實現[J].計算機工程與設計,2011,32(07):2548-2552.