android恶意代码检测报告,用机器学习检测Android恶意代码
參考資料
原理
原理就不詳細講了,我參考資料中給的鏈接已經說得很清楚了,我就說一說原文中說得不是很清楚,我自己進行了一些揣摩理解的地方。
我以method作為單位進行提取,每個method看成互不相關的“句子”。以3-gram為例,如果method中的指令數目小于3的話則忽略該method。
原文按照一定的標準將指令分為MRGITPV七類,我按照Android4.1.2源碼下的dalvik-bytecode.html對其進行了整理,所有的字節碼到其分類的映射規則都位于/infrastructure/map.py文件中。
看原文的意思似乎最后的特征是通過匯總每種n-gram在app中出現的次數得到的,但是我思考了一下,如果app規模的大小相差很大的,這么做似乎不是很妥,因為規模大的app的指令出現數量自然應該傾向于比較多,比如我手頭里的樣本,惡意樣本的規模大多都比較小,而良性樣本的規模大多都很大,所以這里最終提取的特征是按照每種n-gram是否出現,如果出現過就為1,不出現就為0。我認為這樣會更加合理的原因是,惡意軟件往往都不是從頭開始寫的,大多數應該都是通過重用以前的代碼而實現的,通過判斷一種惡意n-gram是否出現應該能有一定的惡意軟件鑒別效果。
如何運行
本軟件是基于python3.6開發的,反匯編使用的工具是apktool,我已經將其放在了本倉庫的根目錄下,唯一的依賴是pandas,如果還沒有安裝的話,請使用pip install pandas安裝。
首先在clone下來的目錄下新建/smalis/malware和/smalis/kind兩個文件夾(這兩個是存放反匯編結果的目錄)。
然后打開batch_disasseble.py,將27行的virus_root變量的值改成自己電腦上存放惡意軟件apk樣本根目錄,32行的kind_root變量的值改成自己電腦上存放正常apk樣本的目錄,然后按照以下順序執行命令即可(或者直接執行run.bat,里面寫的就是這些命令):
python batch_disasseble.py
python bytecode_extract.py
python n_gram.py 6
python n_gram.py 5
python n_gram.py 4
python n_gram.py 3
python n_gram.py 2
? 其中batch_disasseble.py是用于反匯編apk的;
? python bytecode_extract.py執行結束后會在當前目錄生成一個data.csv,這個是在n-gram處理之前的特征,data.csv由SoftwareName,Feature,isMalware三個字段組成,分別代表軟件名稱,特征和是否惡意軟件(是為1,不是為0),其中Feature字段是該app的所有操作碼(被分為了MRGITPV七類表示),其中用"|"分隔不同的method。
python n_gram.py后面接的參數的含義就是n-gram中的n,命令運行結束之后會在當前目錄生成一個n-gram.csv文件,比如python n_gram.py 2,命令執行結束后就會在當前目錄生成一個2-gram.csv文件。
這些腳本我已經用自己手頭上的樣本運行過一遍了,本倉庫根目錄下的data.csv(因為超過了github限制的最大文件限制,所以沒有上傳),6_gram.csv(同樣的原因沒有上傳),5_gram.csv,4_gram.csv,3_gram.csv,2_gram.csv就是我在那些樣本上提取的特征。
倉庫中的數據說明
5_gram.csv,4_gram.csv,3_gram.csv,2_gram.csv前600個樣本是惡意樣本,后面583個樣本是良性樣本
軟件模塊
概述:batch_disasseble.py,bytecode_extract.py,n_gram.py是三個可以直接執行的腳本,/infrastructure下的模塊全部是給這些腳本提供一些封裝好的基礎設施,比如smali解析等等。
batch_disasseble.py:將惡意apk從指定目錄反匯編到/smalis/malware/目錄下,將良性apk從指定目錄反匯編到/smalis/kind/目錄下的腳本
bytecode_extract.py:將字節碼從smali文件中提取出來并映射成其分類,最終存儲到當前目錄下的data.csv的腳本
n_gram.py:將data.csv提取n_gram特征轉換成n_gram.csv的腳本
infrastructure.map:我在這里配置了所有字節碼到MRGITPV分類的映射關系
infrastructure.smali:Smali類的每個實例代表一個smali文件,用于封裝解析smali文件的邏輯
infrastructure.ware:Ware類的實例代表一個安卓app,該類的實例會包含多個Smali實例,這些Smali實例都是從該app反匯編得到的smali文件得到的
總結
以上是生活随笔為你收集整理的android恶意代码检测报告,用机器学习检测Android恶意代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android手机存储大小设置在哪里看,
- 下一篇: android listview 中的c