一個木馬病毒是如何誕生的?

相信大家都有這麼一個經歷,我們使用電腦,在某些來歷不明的網站上下載一些程序,然後打開這些程序的時候,可能會出現以下的情況。

一個木馬病毒是如何誕生的?

嗯沒錯,你電腦中的殺毒軟件會給你發出溫馨的提示,提醒你該程序可能含有木馬病毒,這些病毒可能損害你的計算機。那麼這些木馬病毒的本質是什麼呢?他們是怎麼攻擊我們的電腦的呢?我們今天就來探討下這個問題!

首先我們先來認識一下動態鏈接庫的概念,DLL是Dynamic Link Library的縮寫,意為動態鏈接庫。在Windows中,許多應用程序並不是一個完整的可執行文件,它們被分割成一些相對獨立的動態鏈接庫,即DLL文件,放置於系統中。

Windows系統就是由許多的動態鏈接庫(DLL文件)構成的。它們是Windows系統最基本的應用程序。

下面就是我們的Windows操作系統的一些動態鏈接庫。

一個木馬病毒是如何誕生的?

簡單來說,動態鏈接庫裡面其實就是一個一個的函數,Windows也是一個應用程序,它被分割成了許許多多的動態鏈接庫。

比較大的應用程序都由很多模塊(動態鏈接庫)組成,這些模塊分別完成相對獨立的功能,它們彼此協作來完成整個軟件系統的工作。下圖為微信應用程序中所調用的動態鏈接庫。

一個木馬病毒是如何誕生的?

Windows 系統平臺上提供了一種完全不同的較有效的編程和運行環境,你可以將獨立的程序模塊創建為較小的 DLL 文件,並可對它們單獨編譯和測試。在運行時,只有當 EXE 程序確實要調用這些 DLL 模塊的情況下,系統才會將它們裝載到內存空間中。不用的時候,系統將它們給從內存中卸載掉。

這種方式不僅減少了 EXE 文件的大小和對內存空間的需求,而且使這些 DLL 模塊可以同時被多個應用程序使用。Windows 自己就將一些主要的系統功能以 DLL 模塊的形式實現。

因此,讀到這裡,我相信大家應該明白了,為什麼殺毒軟件會給你提示某個程序含有木馬病毒,就是因為該病毒程序中可能會給你原本正常運行的其他程序注入DLL,讓你的正常程序調用病毒程序攜帶的DLL文件,以導致你的正常程序“中毒”。

一個木馬病毒是如何誕生的?

DLL的編寫與語言沒有任何關係,所以我們用VS2017創建一個動態鏈接庫,命名為MyDll,他就是我們要寫的病毒DLL文件。

一個木馬病毒是如何誕生的?

然後在dllmain.cpp中寫我們的代碼,我們的代碼很簡單,直接寫上一個alert函數,功能是:當我們的病毒DLL文件被應用程序加載時,直接彈出一個彈窗。

一個木馬病毒是如何誕生的?

OK,最後編譯生成我們的DLL文件。

一個木馬病毒是如何誕生的?

編寫完DLL文件之後,我們還要寫一個exe程序,該exe程序就是病毒程序的主體,它完成核心的功能:將我們的病毒DLL寫進某個正常運行的應用程序讓該正常的應用程序調用我們的DLL代碼,那麼這就是一件很危險的事情了,讓我們的正常運行的程序調用未知的DLL代碼,後果可想而知。這種技術就是

DLL遠線程注入技術

我們的病毒程序會強制給目標進程創建一個線程,線程的任務是:將我們的病毒木馬DLL加載進目標進程,讓目標進程執行DLL代碼。

那麼,代碼如何寫呢?

我們還是使用VS2017編寫,創建一個控制檯程序,命名為dll_inject。

一個木馬病毒是如何誕生的?

然後按照剛才提到的思路編寫代碼,這沒什麼難度,查看MSDN,調用Win32API即可實現。

一個木馬病毒是如何誕生的?

主函數中調用我們的dll注入攻擊函數dll_inject,我們用來攻擊一下PC版的微信,查看用戶管理器,得知微信的PID為17544,以第一個參數傳進去,第二個參數即我們要注入的DLL文件的路徑。

一個木馬病毒是如何誕生的?

編譯之後,得到我們的dll注入主程序。

一個木馬病毒是如何誕生的?

雙擊運行,看一下攻擊的結果:

可以看到,微信進程已經被成功注入了我們的病毒DLL文件了,也彈窗了,彈窗就證明我們的病毒DLL被微信加載成功。

一個木馬病毒是如何誕生的?

一個木馬病毒是如何誕生的?

所以,總結一下,總體思路是:

1)編寫一個病毒DLL,完成我們想要乾的壞事。

2)編寫一個應用程序exe,強制讓遠程的進程創建一個線程,執行加載DLL文件的操作。

3)遠程進程加載成功我們寫的病毒DLL之後,就表示我們的DLL已經成功注入遠程進程中了,也可以說是感染到了遠程進程了。

DLL的發明給我們帶來了諸多便利和優雅,但是也可能會給我們帶來災難性的後果,我們的世界就是黑和白的鬥爭,然後在鬥爭中不斷地發展。


分享到:


相關文章: