VMP分析之VMP2.13插件化分析(四)
文章目錄
- Zeus插件
- 相關介紹
- 初始化Key并解密
- 加載操作碼
- 解密操作碼
- 取handler
- 解密handler
- 進入handler
- 保存堆棧
- 指令流解密Key
- VMP分析插件
- 相關介紹
- VM分析插件的使用
- 插件化分析VM代碼
- VM指令集說明
- FKVMP
- 相關介紹
- 使用方法
- VMSweeper
- 相關介紹
- 使用方法
Zeus插件
相關介紹
- 開發者: ximo
- 更新時間:2012-1
- 可以分析VM的基本信息,包括解析VM入口信息及handler名,大致是閹割版fkvmp(無解析流程功能)
- 可以自動脫殼保護的殼,包括IAT,資源保護,heap antidump等
讓代碼執行到進入VM虛擬機開始的代碼
右鍵,選擇Zeus分析
打開log窗口,就能看到分析結果了。Zeus插件幫我們分析出了整個VM流程
初始化Key并解密
InitKey Decode : 0042D0EF add esi, 92e49d49 0042D0F8 bswap esi 0042B8C2 ror esi, 1d加載操作碼
Load PCode: 0042B907 0042B907 mov al, byte ptr [esi]解密操作碼
0042B90A sub al, bl 0042C1F5 not al 0042C1FC inc al 0042C209 not al 0042B847 sub bl, al取handler
Dispatch Table : 0042B85A 0042B85A mov ecx, dword ptr [eax*4+42d503]Dispatch Base : 0042D503Dispatch Reg : ecx解密handler
Handler Decode : 0042BF29 sub ecx, 7eef2a8d 0042BF30 add ecx, 0進入handler
Handler Entry : 0042B39F 0042B39F retn 40保存堆棧
VM Initial Info:[+00] <- 00000000 RELOC[+01] <- 00000000 ANTIDUMP[+02] <- 0019FE8C esi[+03] <- 0019FED8 ebp[+04] <- 003AB000 ebx[+05] <- CCCCCCCC eax[+06] <- 003AB000 ebx[+07] <- 00000000 ecx[+08] <- 0019FED8 edi[+09] <- 022C0F90 edx[+0A] <- 00000202 EFL[+0B] <- 502585E5 RETADDR[+0C] <- 92766AB7 INITDATA指令流解密Key
VMInitKey : 92766AB7VMDecodeKey : 0042D928VMOpcodeStart : 0042D928 0042D928 VMEipStart : 0042D928VMOpcode Direction : ↑接著給出了VM初始化的Key和解密后的Key。解密后的Key和指令流開始地址和vmEip實際上是一個東西。
VMP分析插件
相關介紹
- 針對目標:VMProtect 1.x 2.x (大概到 VMProtect 2.09)
- 開發者:zdhysd
- 最后更新時間:v1.4 2013/01/30
- 虛擬指令級別的調試。可以像調試匯編一樣調試虛擬機指令,可以單步運行一條虛擬指令,并查看虛擬寄存器、虛擬棧的信息。
- 表達式轉化及化簡。本功能會在虛擬指令級別進行數據流和控制流的分析,進行字節碼的收縮。 VMProtect 是棧機結構,同時有 NOR 邏輯的混淆膨脹,字節碼的收縮還原一直是研究的重點,本工具可以完成字節碼收縮過程,輸出收縮后的表達式。唯一不同是沒有轉化成原始的 x86 代碼。但在分析上,已經可以提供極為有力的參考
- 支持字節碼的 Patch。由于加密的存在,字節碼 Patch 一直是十分痛苦的過程,本工具可以像 Patch 普通指令一樣 Patch 虛擬指令
- 支持自定義模板。模板包括 Handler 識別模板和表達式化簡模板。該工具提供了模板文件及模板修改工具。理論上,可以通過對模板文件的修改使及兼容所有版本的 VMProtect 1.x 2.x。( 3.x 因為虛擬機結構變化不能支持)
VM分析插件的使用
還是之前的Demo程序,首先執行到進入虛擬機開始的位置
然后右鍵選擇分析虛擬機
在log窗口可以看到分析結果,這一步會幫我們分析出VM的解碼循環和每一個handler的作用。
然后選擇分析虛擬程序
這一步會分析出VM的堆棧和vmEip
配置插件,打開所有的分析選項
插件化分析VM代碼
按F9會自動進入到虛擬機分析窗口,到了這個窗口,就可以基于VM指令集進行單步調試了,不需要一個一個handler進去分析。
如果沒有到這個窗口,說明進入虛擬機分析窗口失敗。攔截失敗就無法攔截OD原先的單步指令,不能直接調試,建議換個OD。
VM指令集說明
打開編譯虛擬指令信息
每一條VM的指令在這里都可以看到等價的匯編指令和詳細注釋
FKVMP
相關介紹
- 針對目標:VMProtect 1.x 2.x (大概到 VMProtect 2.09)
- 開發者:Nooby
- 功能:Handler 識別、還原 PCODE 等
使用方法
在虛擬機入口處右鍵->FKVMP->start即可
在log窗口可以看到所有解析出來的handler指令
以及初始化壓棧的寄存器順序也會打印出來。
這個插件的缺點是只支持單一的基本塊,每次分析到 SetEIP 指令(實際就是跳轉指令)就會停止,需要人工操作,去分析下一基本塊
VMSweeper
相關介紹
- 針對目標:VMProtect 2.x 、Code Virtualizer
- 開發者:Vamit
- 最后更新時間:v1.5 2014
可以完成 VMP 保護代碼還原的工具。 完全的代碼還原是十分困難的,因此該工具穩定性不高,經常出現異常。但是某些簡單樣本的測試,確實有不錯的還原效果。
使用方法
直接載入被VMP加殼的程序,不需要手動跳轉到VM虛擬機的入口
點擊Plugins -> VMPSweeper -> Analyze all VM reference
這里會自動識別出代碼斷和VM區段的起始和結束地址,然后點擊Analize
彈出窗口選要分析的 VM, 右鍵 Decode VM
出現這個提示后,會自動在虛擬機的入口下斷點,在斷點窗口可以看到
這個插件有自己的VM入口識別算法,所以不需要自己跳轉到VM入口。接著按F9運行到VM入口處后,按F1進行分析
分析完成后,會彈出提示框重新運行進程。重新運行后, Plugins -> VMPSweeper -> Continue decode VM。繼續分析。
如果分析沒有產生任何異常,VMPSweeper 會把還原后的代碼 Patch 到原本的虛擬機入口處
但上述過程經常出錯,可以在 OD 根目錄下查找 VMS_xxx 文件夾,查看日志文件,*.log 文件中保存著還原的過程輸出。
我這里也沒有完全分析成功,但是在VMS文件夾下可以看到上面幾個文件
按照文件名提示,很明顯是保存的是VM虛擬機的寄存器和堆棧狀態
該工具是少見的可以將 VMProtect 保護代碼進行完整還原的工具,缺點是穩定性太差,對于稍復雜的程序,還原過程很大可能會出現異常報錯。我這里測試的是VM2.13版本分析失敗。
總結
以上是生活随笔為你收集整理的VMP分析之VMP2.13插件化分析(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMP分析之VMP1.09虚拟化架构分析
- 下一篇: 最强黑客库Blackbone使用教程