如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護(hù)公司|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋橡塑保溫等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身制作品質(zhì)網(wǎng)站。

近期,我對這款名為Gacrux的惡意軟件樣本進(jìn)行了分析??紤]到這兩個(gè)樣本文件的來源,我無法直接跟大家共享文件的哈?;蛑苯庸_樣本文件,不過根據(jù)本文所提供的信息,大家可以輕松識別出這款惡意軟件。這款惡意軟件加載器采用C語言開發(fā),并且使用了Visual Studio 2017進(jìn)行編譯。這款惡意軟件從2020年8月開始在某些論壇上出售,似乎受到了Smoke Loader的極大啟發(fā)。

反分析技術(shù)

Gacrux應(yīng)用了很多反調(diào)試和反虛擬機(jī)技術(shù)。其中,第一種技術(shù)涉及到了下列代碼跳轉(zhuǎn),這將導(dǎo)致IDA無法對代碼指令進(jìn)行正確解析。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

這里,我們可以直接利用nop操作碼來修復(fù)這個(gè)問題。進(jìn)行模式掃描并修復(fù)問題之后,我們就可以使用IDA來對代碼進(jìn)行反編譯了。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

第二種技術(shù)涉及到偽造的返回值,并破壞IDA的函數(shù)分析過程。跟之前的一樣,我們同樣可以使用nop操作碼來解決這種問題。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

最后的代碼混淆涉及到兩個(gè)磁盤上的加密函數(shù),解密操作是在調(diào)用函數(shù)之前完成的,然后在不久之后又會對函數(shù)進(jìn)行重新加密。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

解密/加密的工作原理是在函數(shù)中找到兩個(gè)表示加密區(qū)域開始和結(jié)束的模式,然后用傳遞給函數(shù)的鍵來對代碼進(jìn)行異或操作。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

代碼會檢查目標(biāo)磁盤上的可用空間和RAM大小,這也是其反虛擬機(jī)檢測機(jī)制的一部分。在這里,我們可以設(shè)置斷點(diǎn)來修改返回值,或直接使用nop命令跳過檢測。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

字符串加密

字符串存儲在一個(gè)函數(shù)中,該函數(shù)根據(jù)傳入的ID對字符串進(jìn)行解密。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

點(diǎn)擊【這里】即可獲取外部模塊的字符串列表。

整體執(zhí)行流

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

反調(diào)試和反VM技術(shù)

這款惡意軟件的代碼中還添加了一些反調(diào)試技術(shù),這些技術(shù)嵌入在了很多重要函數(shù)中,并且會在檢測到調(diào)試器或虛擬機(jī)的時(shí)候來讓進(jìn)程崩潰。第一個(gè)技術(shù)位于malloc函數(shù)中,它會檢查PEB中的BeingDebugged成員,如果檢測到了相應(yīng)設(shè)置,那么函數(shù)將返回請求的緩沖區(qū)的大小,而不是分配它。除此之外,它還會檢查黑名單上的模塊,如果存在,則退出執(zhí)行。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

在第二項(xiàng)技術(shù)中,如果目標(biāo)系統(tǒng)的RAM或磁盤空間不足,則會增加Explorer資源瀏覽器的進(jìn)程PID,這通常是虛擬化的表現(xiàn)。此時(shí),代碼將會NtOpenProcess崩潰并阻止其進(jìn)一步運(yùn)行。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

在這里,注入的初始化ShellCode/自定義PE加載器還會檢查PEB的BeingDebugged和NtGlobalFlag成員。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

Syscall

這款惡意軟件的Syscall模塊幾乎完全是從開源的加密程序中拷貝過來的。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

這里的哈希算法被修改為了djb2,而輸出會使用一個(gè)常量值進(jìn)行異或計(jì)算。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

持久化

惡意軟件的持久化是通過一個(gè)Windows進(jìn)程實(shí)現(xiàn)的,惡意代碼會在explorer.exe上下文中不斷地調(diào)用這個(gè)進(jìn)程,這個(gè)進(jìn)程會檢測安裝文件,并在啟動項(xiàng)菜單中創(chuàng)建.lnk文件。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

代碼注入

針對代碼注入,Gacrux在32位環(huán)境中使用NtCreateSection/NtMapViewOfSection作為寫原語,在64位環(huán)境中使用NtAllocateVirtualMemory/NtWriteVirtualMemory,這兩種方法都是通過直接的系統(tǒng)調(diào)用完成的。對于執(zhí)行原語,它利用的是SetPropA,正如Adam在其文章“PROPagate–一種新的代碼注入技巧”中所詳述的那樣。這是從開源實(shí)現(xiàn)中復(fù)制的,函數(shù)指針的設(shè)置方式就證明了這一點(diǎn)。

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

這里的代碼注入技術(shù)主要用來調(diào)用一個(gè)小型的自定義PE加載器,請大家繼續(xù)往下看。

自定義PE加載器和數(shù)據(jù)格式

這是Gacrux最有意思的功能,注入到Explorer中的代碼并非一個(gè)普通的PE文件,而是一個(gè)帶有自定義PE Header和自定義加載器的PE加載器。

加載器首先會進(jìn)行一些反調(diào)試檢測:

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

接下來,它會解析三個(gè)API,并使用它們來處理導(dǎo)入的表并修復(fù)重定位:

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

PE加載器使用的是自定義的PE格式,根據(jù)Kaitai描述符,我們可以輕松恢復(fù)出原始的PE文件:

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

網(wǎng)絡(luò)通信

這款惡意軟件的網(wǎng)絡(luò)通信使用的是WinInet,并且在Explorer上下文場景中實(shí)現(xiàn):

如何理解基于C語言的可自定義PE加載惡意軟件Gacrux如何理解基于C語言的可自定義PE加載惡意軟件Gacrux

正如我們所看到的,Gacrux實(shí)際上也沒有非常多的特別之處。它借鑒了大量的公共代碼,并且在稍加修改之后便投入使用了。最重要的是,Gacrux的漏洞非常多!

關(guān)于如何理解基于C語言的可自定義PE加載惡意軟件Gacrux問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

當(dāng)前標(biāo)題:如何理解基于C語言的可自定義PE加載惡意軟件Gacrux
標(biāo)題URL:http://bm7419.com/article8/gocdip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)標(biāo)簽優(yōu)化、企業(yè)建站網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)