吾愛破解 軟體虛擬機器保護分析資料整理 筆記
吾愛破解 軟體虛擬機器保護分析資料整理 筆記
轉自 軟體虛擬機器保護分析資料整理 https://www.52pojie.cn/thread-712684-1-1.html (出處: 吾愛破解論壇)
awesome-vmp
關於軟體虛擬化保護(如VMProtect)的資料。
-
工具篇介紹了VM保護的現有分析工具,並進行了簡單的試用分析。
-
文章篇介紹了VM保護相關的分析文章,包括對虛擬機器的分析,及一些反混淆方法。
本專案發在了github上, https://github.com/lmy375/awesome-vmp
工具篇
FKVMP
- 針對目標:VMProtect 1.x 2.x (大概到 VMProtect 2.09)
- 型別:Ollydbg 外掛
- 開發者:Nooby
- 功能:Handler 識別、還原 PCODE 等
FKVMP 是比較古老的一款 Ollydbg 外掛,但在當時非常有名。
使用方法簡單,在虛擬機器入口處(push/call 或 jmp)右鍵 FKVMP -> start 即可。
下圖是對如下程式碼
mov ebx, 0deadbeefh
mov eax, 0beefdeadh
使用 VMProtect 1.60 保護後, 使用 FKVMP 分析的結果(結果列印在 OD 的日誌視窗中)
可以所有Handler已經為指令都已經識別出來,初始化壓棧的暫存器順序也會打印出來。
本工具(可能是第1次完成)位元組碼的還原的實現(其實可以認為是虛擬機器指令的反彙編)使對 VMProtect 的人工分析成為可能。
缺點是隻支援單一的基本塊,每次分析到 SetEIP 指令(實際就是跳轉指令)就會停止,需要人工操作,去分析下一基本塊。
VMP分析外掛
- 針對目標:VMProtect 1.x 2.x (大概到 VMProtect 2.09)
- 型別:Ollydbg / Immunity Debugger 外掛
- 開發者:zdhysd
- 功能:Handler 識別、虛擬位元組碼除錯、表示式化簡
- 連結:https://bbs.pediy.com/thread-154621.htm
- 最後更新時間:v1.4 2013/01/30
可以認為是 FKVMP 的超級加強版,在同類工具之中功能最為強大的工具。
首先該工具支援了跨基本塊的分析,可以一次性將全部虛擬機器位元組碼提取出來。除此外,還有許多亮點功能:
- 虛擬指令級別的除錯。可以像除錯彙編一樣除錯虛擬機器指令,可以單步執行一條虛擬指令,並檢視虛擬暫存器、虛擬棧的資訊。
- 表示式轉化及化簡。本功能會在虛擬指令級別進行資料流和控制流的分析,進行位元組碼的收縮。 VMProtect 是棧機結構,同時有 NOR 邏輯的混淆膨脹,位元組碼的收縮還原一直是研究的重點,本工具可以完成位元組碼收縮過程,輸出收縮後的表示式。唯一不同是沒有轉化成原始的 x86 程式碼。但在分析上,已經可以提供極為有力的參考。
- 支援位元組碼的 Patch。由於加密的存在,位元組碼 Patch 一直是十分痛苦的過程,本工具可以像 Patch 普通指令一樣 Patch 虛擬指令。
- 支援自定義模板。模板包括 Handler 識別模板和表示式化簡模板。該工具提供了模板檔案及模板修改工具。理論上,可以通過對模板檔案的修改使及相容所有版本的 VMProtect 1.x 2.x。( 3.x 因為虛擬機器結構變化不能支援)。
該工具以外掛的形式,實現了一個與原生OD非常相似的VMP除錯介面,暫存器、棧的內容可以實時檢視。
使用方法簡單,在虛擬機器入口處(push/call 或 jmp)右鍵 VMP分析外掛 -> 分析虛擬程式 完成分析。然後可以開啟外掛的虛擬指令視窗、除錯視窗檢視位元組碼並進行除錯分析。
VMSweeper
- 針對目標:VMProtect 2.x 、Code Virtualizer
- 型別:Ollydbg 外掛
- 開發者:Vamit
- 功能:VMProtect 保護下的 x86 程式碼還原
- 最後更新時間:v1.5 2014
可以完成 VMP 保護程式碼還原的工具。 完全的程式碼還原是十分困難的,因此該工具穩定性不高,經常出現異常。但是某些簡單樣本的測試,確實有不錯的還原效果。
使用方法:
- 使用純淨版 OD 載入外掛,避免外掛間衝突。
- Plugins -> VMPSweeper -> Analyze all VM reference
- 彈出視窗選要分析的 VM, 右鍵 Decode VM。
- 此時會自動在虛擬機器入口點斷下,F1 快捷鍵,VMSweeper會開始進行分析。
- 分析完成後,會彈出提示框重新執行程序。重新執行後, Plugins -> VMPSweeper -> Continue decode VM。繼續分析。
- 如果分析沒有產生任何異常,VMPSweeper 會把還原後的程式碼 Patch 到原本的虛擬機器入口處。
- 但上述過程經常出錯,可以在 OD 根目錄下查詢 VMS_xxx 資料夾,檢視日誌檔案,*.log 檔案中儲存著還原的過程輸出。
如下是log檔案擷取:
...
++++++++++++++++++++++++++++++++++++
Section a12 final
++++++++++++++++++++++++++++++++++++
004100BC: push ebp
004100C2: rvm_38 = esp
004100C9: push esi
004100D5: push edi
004100F6: [rvm_38 + 0xFFFFFFFC] = 0
00410111: eax = [rvm_38 + 0xFFFFFFFC]
00410131: rvm_34 = [rvm_38 + 8]
00410167: eax = [eax * 4 + rvm_34]
00410186: rvm_10 = [rvm_38 + 0xFFFFFFFC]
004101A6: edi = [rvm_38 + 8]
004101EC: rvm_08 = [rvm_10 * 4 + edi + 4 + eax]
0041021C: eax = [rvm_38 + 0xFFFFFFFC]
0041023C: rvm_10 = [rvm_38 + 0x0000000C]
00410278: [eax * 4 + rvm_10] = rvm_08
00410292: rvm_34 = [rvm_38 + 0xFFFFFFFC]
0041029C: eax = rvm_34 + 1
004102D4: [rvm_38 + 0xFFFFFFFC] = eax
004102EF: edx = [rvm_38 + 0xFFFFFFFC]
0041030F: eax = [rvm_38 + 8]
0041032F: rvm_18 = [rvm_38 + 0xFFFFFFFC]
0041034F: eax = [rvm_38 + 8]
00410385: rvm_3C = [edx * 4 + eax]
00410466: edi = and ~and ~rvm_3C, [rvm_18 * 4 + rvm_24 + ~4], ~and rvm_3C, [rvm_18 * 4 + rvm_24 + 4]
...
這是還原出來的 x86 程式碼。其中 rvm 是暫存器未推斷出結果導致的。完美還原的程式碼會形成 完整的 x86 指令。
該工具是少見的可以將 VMProtect 保護程式碼進行完整還原的工具,缺點是穩定性太差,對於稍複雜的程式,還原過程很大可能會出現異常報錯。
根據工具的說明,似乎是應該支援 Code Virtualizer的。測試成功還原 Code Virtualizer 1.3.8 版本未成功。
Oreans UnVirtualizer
- 針對目標:Oreans系列 Code Virtualizer / Themida / WinLicense
- 型別:Ollydbg 外掛
- 開發者:Deathway
- 功能:Oreans 保護下的 x86 程式碼還原
- 最後更新時間:v1.8 2014/02/04
以支援 Oreans 系列保護工具早期版本的 x86 還原。但對新版本的 FISH/TIGER 等系列虛擬機器效果不佳。
使用:在虛擬機器入口,右鍵分析,如果還原成功會彈出還原始碼的文字檔案。
如下是對 Code Virtualizer v1.3.8 程式碼還原的結果示意。 如果還原成功則與原始碼基本一致(對CISC體系效果較好)。
...
@Label_00409223
00409252 MOV DWORD PTR [EBP+0xfffffffc],0x0
00409263 MOV EAX,DWORD PTR [EBP+0xfffffffc]
00409281 MOV DWORD PTR [EBP+0xfffffff8],EAX
00409291 JMP 0x4c
@Label_00409297
00409297 MOV ECX,DWORD PTR [EBP+0xfffffff8]
004092AC ADD ECX,0x1
004092C3 MOV DWORD PTR [EBP+0xfffffff8],ECX
@Label_004092E2
004092E2 MOV EDX,DWORD PTR [EBP+0xfffffff8]
004092F2 CMP EDX,DWORD PTR [EBP+0xc]
0040930A JNB 0x7b2
0040930F MOV EAX,DWORD PTR [EBP+0xfffffff8]
...
VMAttack
- 針對目標:VMProtect
- 型別:IDA 外掛
- 開發者:anatolikalysch
- 功能:VMProtect虛擬碼還原、動靜態分析
- 連結:https://github.com/anatolikalysch/VMAttack
- 最後更新時間:2017
從官方 demo 上看,應該只支援去混淆的 VMProtect demo 版。
2016 IDA外掛大賽第2名
相關論文:[Kalysch A, Götzfried J, Müller T. VMAttack: Deobfuscating Virtualization-Based Packed BinariesC]// The, International Conference. 2017:1-10.
VirtualDeobfuscator
- 針對目標:通用類(?)
- 型別:Python指令碼
- 開發者:jnraber
- 功能:Trace化簡
- 連結:https://github.com/jnraber/VirtualDeobfuscator
- 最後更新時間:2013
2013 年 Blackhat視訊: https://www.youtube.com/watch?v=hoda99l5y_g
其他(這些工具作者沒有具體試用)
-
VMP 1.7 完整還原 http://bbs.pediy.com/thread-155215.htm
-
VMP Handler 分析外掛 https://github.com/OoWoodOne/VMP_ODPlugin
-
Zeus--VMProtect分析及自動脫殼外掛 by ximo http://www.52pojie.cn/thread-129047-1-1.html
-
VMP偵錯程式 https://github.com/uvbs/VMPDBG2
-
CV 反編譯 https://github.com/pakt/decv
-
Code Deobfuscator https://forum.tuts4you.com/topic/37952-code-deobfuscator/
https://github.com/Pigrecos/CodeDeobfuscator
文章篇
會議PPT
- KCon 2016 - VMProtect 的一次奇妙之旅 by 何瀟瀟
- SecurityDay 2015 - Inside VMProtect by Samuel Chevet
- CSAW 2016 - How Triton can help to reverse virtual machine based
software protections by Jonathan Salwan - BlackHat 2013 - Removing virtualization obfuscations from malware – a DARPA Cyber Fast Track funded effort by Raber
- 中國軟體安全峰會 2009 - VMProtect的逆向分析和靜態還原 by Bughoho
- CARO 2008 - Dealing with Virtualization packer by Boris Lau
學術文章
- Xie, H., Zhang, Y., Li, J., & Gu, D. (2017). Nightingale: Translating Embedded VM Code in x86 Binary Executables. Information Security.
- Yadegari, B. and S. Debray (2015). Symbolic Execution of Obfuscated Code. ACM Sigsac Conference on Computer and Communications Security: 732-744.
- Yadegari, B. and B. Johannesmeyer, et al. (2015). A Generic Approach to Automatic Deobfuscation of Executable Code. IEEE Symposium on Security and Privacy.
- Kinder, J. (2012). "Towards Static Analysis of Virtualization-Obfuscated Binaries." Proc.working Conf.reverse Engineering: 61-70.
- Coogan, K. and G. Lu, et al. (2011). Deobfuscation of virtualization-obfuscated software: a semantics-based approach. ACM Conference on Computer and Communications Security, CCS 2011, Chicago, Illinois, Usa, October.
- Rolles, R. (2009). Unpacking virtualization obfuscators.
- Sharif, M. and A. Lanzi, et al. (2009). Automatic Reverse Engineering of Malware Emulators. IEEE Symposium on Security and Privacy.
其他
- 2018年 FinSpy VM 分析及程式碼還原系列 by Rolf Rolles(該作者有十年以上的VM保護的研究經驗,非常值得一讀)
- FinFisher VM分析 白皮書
- ZeusVM analysis - Miasm's blog
- 彙集所有能幫助你對抗強殼的知識(VMP、SE、THEMIDA、Enigma)
- VMProtect 2.06全過程分析 by hkfans
- Themida 1.2.0.1 全過程分析 by hkfans
- Themida 1.9.1.x CICS Processor VM 簡單分析 by softworm
- 人肉某CM-VMP2.13.8 Vmcode (視覺化) by Sound
- VMProtect 逆向分析 by aalss2
- VMSweeper 分析 by aalss2
- VMProtect 學習 by OoWoodOne
- Inside Code Virtualizer by scherzo February 16 2007
本文來自部落格園,作者:Theseus‘Ship,轉載請註明原文連結:https://www.cnblogs.com/yongchao/p/15758603.html