1. 程式人生 > 其它 >吾愛破解 軟體虛擬機器保護分析資料整理 筆記

吾愛破解 軟體虛擬機器保護分析資料整理 筆記

吾愛破解 軟體虛擬機器保護分析資料整理 筆記

轉自 軟體虛擬機器保護分析資料整理 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 保護程式碼還原的工具。 完全的程式碼還原是十分困難的,因此該工具穩定性不高,經常出現異常。但是某些簡單樣本的測試,確實有不錯的還原效果。

使用方法:

  1. 使用純淨版 OD 載入外掛,避免外掛間衝突。
  2. Plugins -> VMPSweeper -> Analyze all VM reference
  3. 彈出視窗選要分析的 VM, 右鍵 Decode VM。
  4. 此時會自動在虛擬機器入口點斷下,F1 快捷鍵,VMSweeper會開始進行分析。
  5. 分析完成後,會彈出提示框重新執行程序。重新執行後, Plugins -> VMPSweeper -> Continue decode VM。繼續分析。
  6. 如果分析沒有產生任何異常,VMPSweeper 會把還原後的程式碼 Patch 到原本的虛擬機器入口處。
  7. 但上述過程經常出錯,可以在 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

從官方 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

2013 年 Blackhat視訊: https://www.youtube.com/watch?v=hoda99l5y_g

其他(這些工具作者沒有具體試用)

文章篇

會議PPT

學術文章

  • 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.

其他

本文來自部落格園,作者:Theseus‘Ship,轉載請註明原文連結:https://www.cnblogs.com/yongchao/p/15758603.html