當前位置:
首頁 > 新聞 > 你會信任你的AutoIT反編譯程序嗎?

你會信任你的AutoIT反編譯程序嗎?

AutoIt 目前最新是v3版本,這是一個使用類似BASIC腳本語言的免費軟體,它的設計用於Windows GUI(圖形用戶界面)中進行自動化操作,利用模擬鍵盤按鍵,滑鼠移動和窗口/控制項的組合來實現自動化任務。而這是其它語言不可能做到或無可靠方法實現的(例如VBScript和SendKeys)。

Autoit3 Decompiler是一款功能強大的AutoIt3反編譯工具,可以反編譯由AutoIt編譯的exe程序,直接反編譯出源代碼!還帶有右鍵關聯功能,非常方便。

在Autoit3 Decompiler中,按「反編譯選中」或「反編譯當前」按鈕,還可以提取exe中的資源(圖片、exe等等)到文件夾。

Autoit3 Decompiler 主要功能簡介如下:

1. 支持全系列autoit3,包括v3.0.100.0 - v3.3.7.18,後續版本沒驗證是否支持,理論上是都支持的

2. 支持EXE及A3X文件反編譯 ;

3. 支持X86及X64格式反編譯 ;

4. 支持ANSI及UNICODE反編譯 ;

5. 支持帶密碼編譯,對於3.2.6.0之前版本可以讀取原始密碼,後續版本無法顯示密碼但可正常反編譯 ;

6. 支持代碼混淆,混淆程序反編譯後可讀性欠佳,但不影響重編譯及執行;

7. 支持反編譯後文件項信息即時預覽 ;

8. 支持反編譯後文件內容即時預覽 ;

9. 支持批量反編譯 ;

10. 支持命令行及圖形界面操作 ;

11. 支持滑鼠右鍵菜單集成。

在分析AutoIT編譯的惡意軟體樣本期間,會彈出一個消息框,指示在使用Exe2Aut反編譯器時可能執行的樣本。這引起了我對反編譯程序如何工作以及如何首先編譯AutoIt腳本的興趣。在本文中,我將解釋兩個最常見的AutoIT反編譯程序(Exe2Aut和myAut2Exe)是如何工作的,以及它們是如何被騙去反編譯一個誘餌腳本而不是真正的腳本。

什麼是「已編譯」 AutoIT可執行文件?

編譯後的AutoIT可執行文件基本上由兩部分組成:一個獨立的AutoIT解釋程序和作為PE文件中資源顯示的編譯腳本位元組碼。AutoIT的創建者已經採取了一些措施來防止簡單的反編譯,並對位元組碼應用了一種壓縮和加密的形式。位元組碼的解壓縮由編譯的AutoIT二進位文件執行,然後再解釋和執行。

現在,讓我們分析一下Exe2Aut反編譯程序。

如果要在反編譯期間動態分析Exe2Aut,則會注意到以下內容:

1. 將.tmp文件寫入%TEMP%文件夾;

2. 目標二進位文件作為Exe2Aut的子進程載入;

3. .tmp文件被注入目標二進位文件中;

4. 目標二進位文件會將反編譯的autoIT腳本寫入當前工作目錄。

因此,我們可以得出結論,Exe2Aut利用嵌入式解釋程序對腳本位元組碼進行解密和解壓縮,然後通過將動態鏈接庫(DLL)注入目標二進位文件來提取該位元組碼。這樣就鉤住了將執行位元組碼的函數,並將位元組碼解碼回函數名稱,從而使其成為一種動態方法。因此,可以添加代碼來檢測注入並更改其行為。這樣,我們可以欺騙Exe2Aut來反編譯誘餌腳本,而不是在運行應用程序時執行的真實腳本。

Exe2Aut注入模塊

那MyAut2Exe呢?

與Exe2Aut不同,MyAut2Exe無需嵌入式解釋程序就可以提取位元組碼資源並解壓縮和解碼。使其成為完整的靜態反編譯程序,因此沒有意外執行任何內容的風險。

MyAut2Exe比Exe2Aut更高級,它支持AutoIT和AutoHotkey編譯腳本的多個版本。因此,它具有更多設置來調整已編譯腳本代碼的提取和解壓縮。為了減少正確配置的麻煩,它提供了一個稱為「自動化」的功能。該暴力破解將強制反編譯程序設置,直到腳本成功反編譯為止。當使用「自動」功能時,MyAut2Exe解析可執行文件中的AutoIT魔術位元組碼簽名。一旦找到,它將提取並反編譯代碼。由於解析和反編譯會在魔術位元組碼序列首次出現時就停止了,因此只要將MyAut2Exe放置在比真實編譯腳本資源低的偏移量處,就可以很容易地誘使MyAut2Exe進行反編譯。

演示過程

雖然理論知識層面我們已經講得更清楚了,但是在網路安全領域,概念證明(POC)的價值遠遠超過任何理論。

這個想法是要使用三個不同的位元組碼來編譯AutoIt可執行文件,一旦被Exe2Aut或MyAut2Exe反編譯,其中一個誘餌腳本就會被反編譯,而不是真正的代碼。

如前所述,MyAut2Exe的誘餌腳本位於真實位元組碼之前。對於Exe2Aut,誘餌和真實腳本的腳本資源名稱將在運行時重命名,以使其反編譯錯誤的代碼。

我已經編譯了三種不同的AutoIt腳本,並將它們作為資源添加到.rsrc部分。其中兩個是誘餌腳本,而第三個是真實的腳本。然後,我將.rsrc部分的許可權設置為讀取/寫入可移植可執行文件(PE)頭。

真實和誘騙的腳本資源

接下來,我編寫了一個小的程序集shellcode來遍歷進程環境塊中的PEB_LDR_DATA結構,以檢查Exe2Aut注入的DLL是否存在。還可以在磁碟上搜索(UPX壓縮)DLL,因為在注入之前,它位於Windows%TEMP%目錄下的隨機文件名下。我之所以選擇這種方法,是因為它更可靠且更難檢測。遍歷進程環境塊以檢查所有已載入模塊中是否存在節名稱為.UPX0的已載入模塊,這是一種識別Exe2Aut注入模塊的更簡便的方法,因為其他所有DLL通常都不會被UPX壓縮。這個方法甚至可以檢測到各種各樣的Exe2Aut版本,而不僅僅是我使用的那個,甚至還有一些自定義的反編譯器。

創建了shellcode之後,我需要在準備好的可執行文件中找到一個位置,將我的shellcode注入其中。我在.text部分的末尾找到了一個大約210位元組的編解碼器,此時我的shellcode可以很容易地放入其中。為了執行我的shellcode,我決定在調用IsDebuggerPresent之後立即跳轉到它,並在執行完成後返回正常執行流程。

saveRegisters:

push ecx

push ebx

push edx

checkInjected:

mov ebx, fs:[0x30] ; Get PEB address

mov ebx, [ebx 0xC] ; Get LDR Table address

mov ebx, [ebx 0x14] ; first entry of LDR table. (the first entry is the that of the executable)

mov edx, [ebx 0x10] ; Store the offset in edx

; I need this later to calculate the offsets

; of the resource names

nextModule:

mov ebx, [ebx] ; Get address of next LDR entry

mov ecx, dword ptr ds:[ebx 0x28] ; Pointer of the module name

test ecx, ecx ; If the pointer is OxO it means we have reached

; the end of our LDR table and we want to

je restoreRegisers ; continue normal execution

mov ecx,dword ptr ds:[ebx 0x10] ; Get the modules base offset

mov ecx, dword ptr ds:[ecx 0x178] ; load a dword from the modules base offset 0x178

cmp ecx,0x30585055 ; and check if it is "UPX0"

je swapResouces

jmp nextModule

swapResouces:

mov byte ptr ds:[edx 0xc7656], 0x49 ; Replace the "1" for a "I" in "SCR1PT"

mov byte ptr ds:[edx 0xc765e] , 0x35 ; Replace the "S" for a "5" in "SCRIPT"

restoreRegisers:

pop edx

pop ebx

pop ecx

test eax, eax ; Restore the instructions that were overwritten by

jnz debugerIsPresent ; the jump to the codecave

jmp debugerNotPresent ; Return to the normal program flow

程序集shellcode(70位元組)

演示視頻可以點擊這裡,從以上POC中我們可以學到的是,我們不應該總是盲目地相信我們使用的工具。逆向工程師應該意識到他們的工具是如何工作的,以及他們如何可能被欺騙而返回具有誤導性的輸出結果。雖然這裡介紹的技巧可能會誤導兩個反編譯器,但它們不會影響沙箱中的動態分析結果。

參考及來源:https://unit42.paloaltonetworks.com/autoit-compiled-malware/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

攻擊者利用Bitbucket存儲大量惡意軟體,已感染全球超50萬台電腦
CVE-2020-8417:WP Code Snippets CSRF RCE漏洞