溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2021-10-27 15:56:02 來源:億速云 閱讀:148 作者:柒染 欄目:網(wǎng)絡(luò)管理

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

近期,我對(duì)這款名為Gacrux的惡意軟件樣本進(jìn)行了分析??紤]到這兩個(gè)樣本文件的來源,我無法直接跟大家共享文件的哈?;蛑苯庸_樣本文件,不過根據(jù)本文所提供的信息,大家可以輕松識(shí)別出這款惡意軟件。這款惡意軟件加載器采用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無法對(duì)代碼指令進(jìn)行正確解析。

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

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

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

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

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

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

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

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

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

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

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

字符串加密

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

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

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

整體執(zhí)行流

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

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

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

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

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

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

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

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

Syscall

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

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

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

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

持久化

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

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

代碼注入

針對(duì)代碼注入,Gacrux在32位環(huán)境中使用NtCreateSection/NtMapViewOfSection作為寫原語,在64位環(huán)境中使用NtAllocateVirtualMemory/NtWriteVirtualMemory,這兩種方法都是通過直接的系統(tǒng)調(diào)用完成的。對(duì)于執(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加載器。

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

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

接下來,它會(huì)解析三個(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)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI