內核級木馬與病毒攻防:windows惡意代碼分析入門

本節幫助讀者入門windows上如何對惡意軟件或病毒作初步分析。分析分兩種,一種叫靜態分析,也就是經過直接讀取病毒或惡意程序的可執行文件來分析它的運行原理,一種是動態分析,也就是在病毒或惡意程序正在運行的狀況下,監視其一舉一動,經過觀察它在系統中的運行狀況來分析它的目的和原理。ios

本節介紹基本的靜態分析方法,該方法簡單易行,但做用有限,要想跟病毒或惡意程序鬥智鬥勇最終還得依賴於動態分析。靜態分析的第一種方法就是直線讀取病毒或惡意程序的可執行文件,從中抽取關鍵信息。不少病毒或惡意程序的做者爲了快速實現其非法目的,在代碼設計時每每粗製濫造,不會關心軟件工程方面的問題,例如他們會將服務器ip,URL等重要信息以字符串的方式寫在代碼裏,所以直接讀取其可執行文件就能獲取這些信息,咱們看一個例子,使用VS編譯以下一段很是簡單的代碼,而後生成exe可執行文件:git

#incolude<iostram>
const char* p = "This is a String";
int main() {
std::cout<<"Hello World!";
}

注意到程序裏有兩個字符串,它們會直接存儲在編譯好的可執行文件裏,在惡意軟件或病毒程序中,這些字符串每每對應服務器ip或某些關鍵信息,直接從可執行文件中抽取出這些信息後就能獲得破解病毒和惡意代碼的關鍵線索。使用windows系統提供的strings.exe程序能夠直接讀取給定文件中的ASCII字符串,假設上面代碼編譯後生成的可執行文件爲StringExample.exe,那麼能夠執行以下命令:github

strings stringExample.exe

而後能夠看到以下信息被輸出:

注意看上圖中選中部分對應的就是代碼中的兩個字符串。在win10上可能不附帶strings.exe程序,讀者能夠搜索後在微軟官網上直接下載。一般狀況下病毒或惡意代碼的做者不會蠢到這個程度,他們確定會想辦法儘量隱藏本身,一般作法是對編譯好的可執行文件進行打包或代碼模糊處理,這樣你就很難經過信息抽取或反編譯的方式直接掌握其運行邏輯。windows

一種最經常使用的反查殺手段就是對可執行文件進行打包壓縮,而後在打包後的文件上添加解包代碼,在病毒或惡意軟件運行時,它會先執行解包代碼將被打包的病毒程序釋放出來而後再運行,基本流程以下所示:api

一般用於打包可執行文件或代碼的程序叫upx,能夠經過搜索將upx.exe下載到windows系統上,而後執行以下命令:服務器

upx StringExample.exe

執行後會看到以下畫面:

因爲有矛就有盾,因而就有專門的工具能夠用於查看文件是否被打包,最經常使用的就是PEid.exe,它也是windows上可執行程序,將其下載到系統上,而後運行並選中要查看的文件就能夠判斷其是否被打包過,使用過程以下:

從選中處能夠看到,它顯示出程序被upx打包過。靜態分析技術還着重於查看可執行文件連接了哪些程序庫,而且從中調用了那些函數。windows程序連接方式有靜態和動態兩種,靜態方式就是經過直接將lib文件內的函數代碼與可執行文件代碼一塊兒編譯成可執行文件。動態方式就是代碼在執行時,將DLL加載到內存中,而後調用其中的某些函數,若是咱們能讀取代碼調用了哪些函數就能夠很好的判斷其目的。微信

查看連接函數庫最好的工具是Dependency walker,目前在win10上原來的walker已經沒法運行,可使用以下連接下載可用的walker:https://github.com/lucasg/Dependencies
使用它打開一個可執行exe程序後就能夠看到它運行時所依賴的連接庫:網絡

它的具體運用在後面進行動態分析時再進一步詳解。這裏先看個大概,從程序使用的連接庫能夠頗有效的把握病毒或惡意程序的目的。若是它加載了kernel32.dll,那麼它有可能建立子進程或讀取硬盤文件信息,由於該連接庫提供了OpenProcess,CreateFile等接口。若是使用到User32.dll,那麼它有可能建立了用戶界面而且隱藏起來,同時要注意它是否從中加載SetWindowsEx這類函數,若是有那麼它就會監聽其餘程序窗口對應的消息,例如監聽鍵盤按鍵事件從而盜取用戶的帳號密碼。socket

若是加載了Advapi32.dll,那麼它有可能操縱註冊表,例如實現開機自動運行,若是它加載了WSock32.dll和Ws_32.dll,那麼它就要調用socket功能實現網絡數據發送,極有可能它會將用戶電腦上收集的信息發送給遠程服務器。大多數狀況下,病毒或惡意代碼的創做者會「加殼」,也就是經過前面的upx相似程序將代碼打包壓縮,這樣就能防止別人經過walker這類軟件抓取它的加載庫從而防止病毒或惡意代碼被查殺。函數

下一節咱們看看可執行exe文件的基本結構。


本文分享自微信公衆號 - Coding迪斯尼(gh_c9f933e7765d)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索