手把手教您玩轉Malwarebytes CrackMe (下篇)
在上一篇文章中,我們詳細介紹了解決Malwarebytes CrackMe挑戰第一階段任務的相關方法,如查找關鍵變數和引用,了解變數的用途和填充方式等。在本文中,我們將繼續為讀者詳細介紹完成第二階段任務的具體過程。
檢查流量
我們已經知道,該軟體將從互聯網上下載一些東西(使用解密的URL),所以,如果對這些網路流量進行仔細檢查的話,應該會有所幫助。當然,檢查URL的方法有很多種,比如,我們可以藉助於Wireshark或Fiddler(鏈接地址:https://www.telerik.com/fiddler)來完成這項任務:
請求和應答:
我們看到,內容是從網址http://pastebin.com/raw/9FugFa91下載的。
這些內容經過了Base64編碼,但是用Base64解碼器(鏈接地址:https://www.freeformatter.com/base64-encoder.html)解碼後,得到的結果還是不像明文(據我們猜測,原因是這些內容經過了壓縮處理和/或進一步的加密)。那麼,讓我們再次深入考察這個應用程序!
了解payload
首先,讓我們來做一些靜態分析,以便了解這個payload到底是幹什麼的,以及其具體用法。好了,讓我們來查找初次顯示「Nope :(」消息框的位置。我們看到,這裡有一項用於確定緩衝區是否從"MZ"開始的檢查。眾所周知,MZ是一個著名的魔術數字,它位於DOS應用程序以及Windows可執行文件(PE文件)的開頭部位。
通過仔細觀察這個函數,我們會發現,處理這個下載的文件的函數為數不多。
首先,需要用一個函數進行base64解碼。然後,輸出未壓縮的文件:
通過查看裡面的內容,同時根據發現的諸如RtlDecompressBuffer之類的API調用,我們可以判斷出,這個函數負責解壓縮工作:
然後,我們注意到一個從剪貼板中讀取內容的函數:
進入該函數後,我們也可以很輕鬆地找到相關的API調用,例如:
我們發現,從剪貼板中讀取內容的格式為CF_TEXT。
然後,我們發現從剪貼板讀取的內容會用於另一個函數。這些內容將作為XOR密鑰來解密下載的內容:
注意,這個結果是從「MZ」魔數開始的。此後,它將被注入rundll32。
在函數sub_4011F0的內部,我們可以看到具體的注入機制。這裡使用的是一種經典的RunPE技術。新進程被創建後,會被立即掛起。然後,payload會被寫入該進程的內存空間,在鏈接到它的PEB後,該進程會恢復運行:
當然,這裡不會對該技術做更加詳細的解釋,因為這超出了本文的範圍(如果讀者對此非常感興趣的話,可以訪問這裡(鏈接地址:https://www.adlice.com/runpe-hide-code-behind-legit-process/))。但是,脫殼實際上是非常容易的——我們只需要在解密之後轉儲payload,然後轉換為虛擬格式並寫入遠程進程即可。接下來,我將為讀者介紹一些可用的脫殼方法
對payload進行解密
在靜態分析過程中,我們發現了如下所示的信息:
· 通過解密後的URL下載payload
· 進行Base64解碼
· 利用RtlDecompressBuffer解壓縮
· 利用從剪貼板讀取密鑰進行XOR解密
現在,我們必須找到XOR密鑰。此外,我們還知道XOR操作是自我可逆的。但是,首先,我們要在解壓縮之後轉儲payload,以便可以得到需進一步分析的相關資料。
我將在調試器(例如ImmunityDbg)下運行修改版的CrackMe,並轉到API調用RtlDecompressBuffer處:
我在解壓縮函數的末尾設置斷點,然後運行CrackMe。
我們可以在堆棧上看到傳遞給函數的相關變數。現在,我們來看看未經壓縮的緩衝區:
我們可以看到一些重複的模式和字元串「malwarebytes」。不難猜到,這可能就是通過剪貼板傳遞的XOR密鑰。雖然我們可以選擇不同的脫殼方法,但是限於篇幅,這裡只演示其中的一種。
對經過了XOR混淆處理的payload進行解碼
對緩衝區進行解壓後,我們把它轉儲到一個文件中,然後利用外部工具dexor.py(鏈接地址:https://github.com/hasherezade/crypto_utils/blob/master/dexor.py)來進行解碼。
首先,我們來轉儲緩衝區:
然後,我們必須進行相應的調整,以使其起始地址與相應的偏移量相匹配。我們可以通過在XVI32 hexeditor中打開轉儲的內存頁面,導航到輸出緩衝區的開始部分,然後選擇:
Edit->Dump to cursor
然後,我們可以通過腳本和XOR密鑰輕鬆進行解碼。就本例來說,我們可以很容易地猜到,密鑰就是「malwarebytes」,因為這個字元串在解碼後的緩衝區中重複出現了許多次。
dexyor.py –file dump.bin –key "malwarebytes"
正如我們預期的那樣,根據之前的發現,解碼後的輸出內容是一個新的PE文件。
第二階段
第二階段的任務,將在新得到的可執行文件中完成。在我們完成轉儲之後,可以把它作為一個完全獨立的模塊來運行。 運行後,它會彈出以下消息:
讓我們利用IDA打開它,以便於進一步的觀察。這個文件沒有被混淆,並且結構非常簡單。
了解檢查條件
首先,我們終於明白為什麼之前會顯示「Fail」消息了。這裡,它做的第一件事情,就是檢查模塊路徑,並與rundll32.exe的路徑進行比較。這項檢查並非直接比較字元串,而是計算路徑的校驗和,然後比較校驗和:
簡而言之,如果當前的PE沒有被注入到rundll32.exe中,那麼檢查將會失敗,從而導致前面介紹過的消息框。現在,我們想要將這個PE文件作為獨立的單元運行,而不是通過rundll32來運行。 所以,我們需要擺脫這個檢查。 我們可以通過直接修改條件跳轉來達到這一目的(與我們在第一階段修改條件跳轉的方式是相同的)。
或者,我們可以利用調試器載入可執行文件,在檢查點上設置斷點,並更改標誌以繞過它。
為了彈出旗標,還需要滿足兩個條件:
1.系統中必須運行著一個使用給定類型的窗口的進程。
首先,調用EnumWindows函數。相應的校驗和位於回調函數的參數中:
在回調函數中,將每個窗口的類名與相應的校驗和進行比較。如果匹配,則打開相應的進程,以便於進行下一步的注入工作:
有人可能會注意到,這個檢查的實現代碼與這裡的代碼(鏈接地址:https://github.com/hasherezade/snippets/blob/master/neutrino_env_check.cpp#L223)非常相似。相應的窗口類屬於ProcessExplorer。
2.應用程序必須載入到調試器中。
檢查到調試器的存在後,它會設置影響XOR密鑰值的旗標。
如果我們在調試器下運行可執行文件和ProcessExplorer(32位)的話,帶有旗標的MessageBox將被注入到那裡,我們將立即得到答案。
轉儲並運行shellcode
如果我們運氣好的話,我們可能會很快找到它。但是在現實生活中,找到必須注入的那個進程可能會有些難度。此外,在64位版本的Windows上運行CrackMe的用戶也會遇到問題,因為這個shellcode是32位的,只能注入到32位版本的Process Explorer中。但是,為了解決這個問題,根本就不需要知道進程的名稱。我們可以在注入之前轉儲shellcode,並用我們自己的loader進行載入。
首先,我們看看IDA,這裡要注意注入代碼的那部分。之前,計算出來的shellcode的校驗和為:
所以,現在我們已經將有效的shellcode存儲到了緩衝區中。我們並不關心它被注入的位置——我們可以將其轉儲,然後運行它。為此,我們只需要繞過基於給定校驗和的窗口搜索就行了。我們可以通過修改條件語句來達到目的(或者在調試器中更改相應的旗標)。下面是必須修改的條件語句:
在附加的視頻中,我們可以看到完整的解決方案:轉儲shellcode並獨立運行。在這個給定的例子中,shellcode是在PE-bear的幫助下,作為一個新節被添加到原始的CrackMe中
這樣,我們就會得到最終的旗標:
小結
在本教程中,我們詳細演示了CrackMe的一個可行解決方案。我建議你看看下面的Write Up,從而學習不同的觀點,掌握更多的解決方法。當然,我鼓勵讀者親自動手嘗試一下,並將自己的解決方案寫下來,因為這是最好的學習方式。
附錄
下面是我們收到的一些Write Up:
https://mauronz.github.io/mb-crackme/ – by @FraMauronz
https://drive.google.com/file/d/0Bzb5kQFOXkiSSURnMUZmaVpWRlk – by @JR0driguezB
https://drive.google.com/file/d/0Bzb5kQFOXkiSUmgwN2dWT21jdXM – by @ShAd0wHuNt3r_0
https://29wspy.ru/reversing/SolutionHasherezadeCrackme2017.pdf – by @ValthekOn
本文翻譯自:https://blog.malwarebytes.com/malwarebytes-news/2017/11/how-to-solve-the-malwarebytes-crackme-a-step-by-step-tutorial/,如若轉載,請註明原文地址: http://www.4hou.com/%e7%a0%b4%e8%a7%a3%e5%a4%a7%e8%b5%9b/8459.html 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※Understanding the Security Threats of Dangling DNS Records - Week 8
※揭秘無文件惡意軟體的前生今世
※熊貓燒香技術含量高嗎?高在哪裡?
※曾入侵CIA和FBI的黑客組織「Crackas With Attitude」成員獲刑5年
TAG:信息安全 |