c语言反编译_Gacrux:基于C语言的可自定义PE加载恶意软件
生活随笔
收集整理的這篇文章主要介紹了
c语言反编译_Gacrux:基于C语言的可自定义PE加载恶意软件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
寫在前面的話
近期,我對這款名為Gacrux的惡意軟件樣本進行了分析。考慮到這兩個樣本文件的來源,我無法直接跟大家共享文件的哈希或直接公開樣本文件,不過根據本文所提供的信息,大家可以輕松識別出這款惡意軟件。這款惡意軟件加載器采用C語言開發,并且使用了Visual Studio 2017進行編譯。這款惡意軟件從2020年8月開始在某些論壇上出售,似乎受到了Smoke Loader的極大啟發。反分析技術
Gacrux應用了很多反調試和反虛擬機技術。其中,第一種技術涉及到了下列代碼跳轉,這將導致IDA無法對代碼指令進行正確解析。這里,我們可以直接利用nop操作碼來修復這個問題。進行模式掃描并修復問題之后,我們就可以使用IDA來對代碼進行反編譯了。第二種技術涉及到偽造的返回值,并破壞IDA的函數分析過程。跟之前的一樣,我們同樣可以使用nop操作碼來解決這種問題。最后的代碼混淆涉及到兩個磁盤上的加密函數,解密操作是在調用函數之前完成的,然后在不久之后又會對函數進行重新加密。解密/加密的工作原理是在函數中找到兩個表示加密區域開始和結束的模式,然后用傳遞給函數的鍵來對代碼進行異或操作。代碼會檢查目標磁盤上的可用空間和RAM大小,這也是其反虛擬機檢測機制的一部分。在這里,我們可以設置斷點來修改返回值,或直接使用nop命令跳過檢測。字符串加密
字符串存儲在一個函數中,該函數根據傳入的ID對字符串進行解密。整體執行流
反調試和反VM技術
這款惡意軟件的代碼中還添加了一些反調試技術,這些技術嵌入在了很多重要函數中,并且會在檢測到調試器或虛擬機的時候來讓進程崩潰。第一個技術位于malloc函數中,它會檢查PEB中的BeingDebugged成員,如果檢測到了相應設置,那么函數將返回請求的緩沖區的大小,而不是分配它。除此之外,它還會檢查黑名單上的模塊,如果存在,則退出執行。在第二項技術中,如果目標系統的RAM或磁盤空間不足,則會增加Explorer資源瀏覽器的進程PID,這通常是虛擬化的表現。此時,代碼將會NtOpenProcess崩潰并阻止其進一步運行。在這里,注入的初始化ShellCode/自定義PE加載器還會檢查PEB的BeingDebugged和NtGlobalFlag成員。Syscall
這款惡意軟件的Syscall模塊幾乎完全是從開源的加密程序中拷貝過來的。這里的哈希算法被修改為了djb2,而輸出會使用一個常量值進行異或計算。持久化
惡意軟件的持久化是通過一個Windows進程實現的,惡意代碼會在explorer.exe上下文中不斷地調用這個進程,這個進程會檢測安裝文件,并在啟動項菜單中創建.lnk文件。代碼注入
針對代碼注入,Gacrux在32位環境中使用NtCreateSection/NtMapViewOfSection作為寫原語,在64位環境中使用NtAllocateVirtualMemory/NtWriteVirtualMemory,這兩種方法都是通過直接的系統調用完成的。對于執行原語,它利用的是SetPropA,正如Adam在其文章“PROPagate–一種新的代碼注入技巧”中所詳述的那樣。這是從開源實現中復制的,函數指針的設置方式就證明了這一點。這里的代碼注入技術主要用來調用一個小型的自定義PE加載器,請大家繼續往下看。自定義PE加載器和數據格式
這是Gacrux最有意思的功能,注入到Explorer中的代碼并非一個普通的PE文件,而是一個帶有自定義PE Header和自定義加載器的PE加載器。加載器首先會進行一些反調試檢測:接下來,它會解析三個API,并使用它們來處理導入的表并修復重定位:PE加載器使用的是自定義的PE格式,根據Kaitai描述符,我們可以輕松恢復出原始的PE文件:網絡通信
這款惡意軟件的網絡通信使用的是WinInet,并且在Explorer上下文場景中實現:總結
正如我們所看到的,Gacrux實際上也沒有非常多的特別之處。它借鑒了大量的公共代碼,并且在稍加修改之后便投入使用了。最重要的是,Gacrux的漏洞非常多!原文來源:FreeBuf總結
以上是生活随笔為你收集整理的c语言反编译_Gacrux:基于C语言的可自定义PE加载恶意软件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js observer 添加_简单了解4
- 下一篇: 显示纯服务器_不止于手机!华为台式机真的