Jump to content

我們可以通過使用CyberChef和Regex來克服大量基於文本的混淆,在混淆後,系統將識別一些“畸形”的shellcode,我們將在使用SpeakEasy模擬器進行模擬之前手動修復。

哈希:e8710133491bdf0b0d1a2e3d9a2dbbf0d58e0dbb0e0f7c65acef4f788128e1e4,示例鏈接請點此。

TLDR1.識別功能和混淆類型;

2.清除基本混淆與正則表達式和文本編輯器;

3.使用Regex, CyberChef和Subsections去除高級混淆;

4.識別shellcode並修復負字節值(Python或CyberChef);

5.使用Speakeasy驗證和仿真。

初步分析可以使用受感染的密碼保存和解壓縮腳本,這樣我們可以使用文本編輯器(如notepad++)直接打開文件。

打開後,我們可以看到腳本引用了一些Excel對像以及Wscript.Shell,通常用於執行.vbs腳本。

在這個階段,我們將跳轉到使用Wscript來利用Excel執行代碼的假設,避免分析Excel/Wscript組件,直接跳轉到解碼混亂的命令/代碼。

1.png

我們可以假設代碼的初始部分是利用Excel和Wscript來運行一個被混淆的vbs腳本。

混淆技術概述從第30行開始,可以看到兩種主要的混淆形式。

1.腳本被分解成許多小字符串,例如“hello world”將是“hello”&“world”

2.該腳本使用Chr解碼的十進制編碼值。例如,“Hello World”可以是“Hell”& chr(111)&“World”。其中的“0”已轉換為十進制111。

3.每行以下劃線_結尾。雖然這不是混淆,但仍然需要刪除以清理腳本。

2.1.png

2.2.png

現在已經確定3種初始形式的“混淆”,接下來可以繼續使用正則表達式來清除它們。

可以在不使用正則表達式的情況下手動刪除和替換每個值,但這是一個非常繁瑣的過程。在這個腳本中,regex是最好的方法。

在清除第一種形式的混淆後。我們可以使用搜索/替換來做到這一點,使用“&”和空替換值。

3.png

按下確認鍵後,290個字符串分割混淆被刪除了。

4.png

現在,將繼續使用CyberChef來識別和刪除Chr(10)樣式混淆。

這個過程將包括使用一個正則表達式來識別Chr(10),然後使用一個子段來研究這些值並對它們進行解碼,保持剩餘的腳本不變。為此,需要把當前編碼的內容移動到CyberChef中。

用Cyberchef的初步分析現在將腳本移到CyberChef中,可以直接跳到正則表達式(regex)的原型中,以深入研究十進制編碼的值。

對於原型,本文將使用“正則表達式”和“突出匹配”,這是為了確認腳本匹配預期的混淆內容。

這裡使用的正則表達式是Chr \(\d+\):

Chr-需要以Chr開頭的十進制值;

\( and \) -我們希望十進制值包含在括號中,需要轉義括號,因為它們在正則表達式中具有特殊含義;

\d + -指定一個或多個數值;

希望“數值”+“包含在括號中”+“前面加上Chr”。

5.png

由於regex看起來正在運行並正確識別值,因此可以繼續並將其更改為分段。

分段允許僅對匹配正則表達式的數據執行所有將來的操作。這允許我們保持腳本的大部分完整,而只解碼那些混淆並匹配我們的正則表達式的值。

接下來繼續將regex複製到分段,確保禁用原始正則表達式。

6.png

應用了這個小節之後,現在可以應用一個額外的正則表達式來提取十進制值(但只能是包含在Chr中的值)。

從這裡開始,我們現在可以應用“From decimal”來解碼內容。

至此,我們現在有了一個比以前好看得多的腳本,儘管它仍然到處都有&。

7.png

回到文本編輯器

解決了主要的混淆後,可以將CyberChef輸出複制回文本編輯器中。

8.png

& chr(110)&值周圍的&符號仍然存在,可以繼續刪除它們。

9.png

保留了下劃線(visual basic換行符),繼續使用\s +_ \s +刪除它們,這將刪除所有換行符和周圍的空白。

10.1.png

10.2.png

腳本現在看起來乾淨很多,儘管周圍有很多“”,但不會對分析有什麼影響。

我們可以繼續使用“+”的正則表達式刪除這些引號,這將從腳本中刪除所有引號。

11.png

分析清理後的腳本

現在刪除了大部分垃圾代碼,可以繼續查看已解碼的腳本。

可以注意到的第一件事是,在進程注入中有很多api引用(VirtualAllocEx, WriteProcessMemory, CreateProcessA等)。

12.png

稍微向下滾動,我們還可以看到一團十六進製字節和進程名,可能用作進程注入的目標。例如,這個blob字節將被注入rundll32.exe。

13.png

此時,我們可以假設字節是shellcode。這主要是由於長度短,不能作為標準的pe/exe/dll文件。

在繼續之前,可以先刪除最後剩下的下劃線。

14.png

一旦刪除,十六進製字節的blob應該看起來像這樣。 blob太短,不能成為一個完整的PE文件,但是有足夠的空間包含shellcode。

15.png

修復用於表示Shellcode的負十進制值shellcode中存在需要修復的負值。雖然不確定負的值如何在visual basic/.vbs運行,但在這種情況下,似乎-4的值對應於256 -4,即252,這是0xfc,這是在Shellcode開頭看到的一個常見字節(cld標誌)。

在分析可能的shellcode之前,我們需要取所有的負值並從256中減去它們。

這可以在CyberChef或Python中完成,示例如下所示。

CyberChef :這可以通過使用一個分段來提取負值,從值256中減去它們來完成。現在,所有值都可以進行十進制解碼。

16.png

Python:類似於cyberchef,可以迭代十進制值數組,從數字256中減去負值。

在輸出中,我們可以看到明文字符串以及0xfc的初始Shellcode字節。

17.png

兩個輸出也引用了一個可能的C2地址47.98.51[.]47。

18.png

此外,兩個輸出都引用EICAR字符串。這是一個字符串,將自動觸發所有殺毒軟件。

19.png

據分析,這是一個故意的字符串,旨在防止Cobalt Strike的試用版被濫用。

20.1.png

20.2.png

SpeakEasy的Shellcode仿真

0xfc字節的短長度和存在可以讓我們確信結果是shellcode。為了進一步確認,可以繼續在SpeakEasy模擬器中模擬輸出。

21.png

這證實了字節是shellcode,它從ip 47.98.41[.]47充當基於http的下載程序

如上所述,通過分析一個包含shellcode加載器的visual basic腳本,我們成功地識別了一個C2地址,並使用SpeakEasy模擬器確認了shellcode功能。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...