VMP分析之VMP2.13插件化分析(四)
文章目錄
- Zeus插件
- 相關(guān)介紹
- 初始化Key并解密
- 加載操作碼
- 解密操作碼
- 取handler
- 解密handler
- 進(jìn)入handler
- 保存堆棧
- 指令流解密Key
- VMP分析插件
- 相關(guān)介紹
- VM分析插件的使用
- 插件化分析VM代碼
- VM指令集說(shuō)明
- FKVMP
- 相關(guān)介紹
- 使用方法
- VMSweeper
- 相關(guān)介紹
- 使用方法
Zeus插件
相關(guān)介紹
- 開(kāi)發(fā)者: ximo
- 更新時(shí)間:2012-1
- 可以分析VM的基本信息,包括解析VM入口信息及handler名,大致是閹割版fkvmp(無(wú)解析流程功能)
- 可以自動(dòng)脫殼保護(hù)的殼,包括IAT,資源保護(hù),heap antidump等
讓代碼執(zhí)行到進(jìn)入VM虛擬機(jī)開(kāi)始的代碼
右鍵,選擇Zeus分析
打開(kāi)log窗口,就能看到分析結(jié)果了。Zeus插件幫我們分析出了整個(gè)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進(jìn)入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和指令流開(kāi)始地址和vmEip實(shí)際上是一個(gè)東西。
VMP分析插件
相關(guān)介紹
- 針對(duì)目標(biāo):VMProtect 1.x 2.x (大概到 VMProtect 2.09)
- 開(kāi)發(fā)者:zdhysd
- 最后更新時(shí)間:v1.4 2013/01/30
- 虛擬指令級(jí)別的調(diào)試。可以像調(diào)試匯編一樣調(diào)試虛擬機(jī)指令,可以單步運(yùn)行一條虛擬指令,并查看虛擬寄存器、虛擬棧的信息。
- 表達(dá)式轉(zhuǎn)化及化簡(jiǎn)。本功能會(huì)在虛擬指令級(jí)別進(jìn)行數(shù)據(jù)流和控制流的分析,進(jìn)行字節(jié)碼的收縮。 VMProtect 是棧機(jī)結(jié)構(gòu),同時(shí)有 NOR 邏輯的混淆膨脹,字節(jié)碼的收縮還原一直是研究的重點(diǎn),本工具可以完成字節(jié)碼收縮過(guò)程,輸出收縮后的表達(dá)式。唯一不同是沒(méi)有轉(zhuǎn)化成原始的 x86 代碼。但在分析上,已經(jīng)可以提供極為有力的參考
- 支持字節(jié)碼的 Patch。由于加密的存在,字節(jié)碼 Patch 一直是十分痛苦的過(guò)程,本工具可以像 Patch 普通指令一樣 Patch 虛擬指令
- 支持自定義模板。模板包括 Handler 識(shí)別模板和表達(dá)式化簡(jiǎn)模板。該工具提供了模板文件及模板修改工具。理論上,可以通過(guò)對(duì)模板文件的修改使及兼容所有版本的 VMProtect 1.x 2.x。( 3.x 因?yàn)樘摂M機(jī)結(jié)構(gòu)變化不能支持)
VM分析插件的使用
還是之前的Demo程序,首先執(zhí)行到進(jìn)入虛擬機(jī)開(kāi)始的位置
然后右鍵選擇分析虛擬機(jī)
在log窗口可以看到分析結(jié)果,這一步會(huì)幫我們分析出VM的解碼循環(huán)和每一個(gè)handler的作用。
然后選擇分析虛擬程序
這一步會(huì)分析出VM的堆棧和vmEip
配置插件,打開(kāi)所有的分析選項(xiàng)
插件化分析VM代碼
按F9會(huì)自動(dòng)進(jìn)入到虛擬機(jī)分析窗口,到了這個(gè)窗口,就可以基于VM指令集進(jìn)行單步調(diào)試了,不需要一個(gè)一個(gè)handler進(jìn)去分析。
如果沒(méi)有到這個(gè)窗口,說(shuō)明進(jìn)入虛擬機(jī)分析窗口失敗。攔截失敗就無(wú)法攔截OD原先的單步指令,不能直接調(diào)試,建議換個(gè)OD。
VM指令集說(shuō)明
打開(kāi)編譯虛擬指令信息
每一條VM的指令在這里都可以看到等價(jià)的匯編指令和詳細(xì)注釋
FKVMP
相關(guān)介紹
- 針對(duì)目標(biāo):VMProtect 1.x 2.x (大概到 VMProtect 2.09)
- 開(kāi)發(fā)者:Nooby
- 功能:Handler 識(shí)別、還原 PCODE 等
使用方法
在虛擬機(jī)入口處右鍵->FKVMP->start即可
在log窗口可以看到所有解析出來(lái)的handler指令
以及初始化壓棧的寄存器順序也會(huì)打印出來(lái)。
這個(gè)插件的缺點(diǎn)是只支持單一的基本塊,每次分析到 SetEIP 指令(實(shí)際就是跳轉(zhuǎn)指令)就會(huì)停止,需要人工操作,去分析下一基本塊
VMSweeper
相關(guān)介紹
- 針對(duì)目標(biāo):VMProtect 2.x 、Code Virtualizer
- 開(kāi)發(fā)者:Vamit
- 最后更新時(shí)間:v1.5 2014
可以完成 VMP 保護(hù)代碼還原的工具。 完全的代碼還原是十分困難的,因此該工具穩(wěn)定性不高,經(jīng)常出現(xiàn)異常。但是某些簡(jiǎn)單樣本的測(cè)試,確實(shí)有不錯(cuò)的還原效果。
使用方法
直接載入被VMP加殼的程序,不需要手動(dòng)跳轉(zhuǎn)到VM虛擬機(jī)的入口
點(diǎn)擊Plugins -> VMPSweeper -> Analyze all VM reference
這里會(huì)自動(dòng)識(shí)別出代碼斷和VM區(qū)段的起始和結(jié)束地址,然后點(diǎn)擊Analize
彈出窗口選要分析的 VM, 右鍵 Decode VM
出現(xiàn)這個(gè)提示后,會(huì)自動(dòng)在虛擬機(jī)的入口下斷點(diǎn),在斷點(diǎn)窗口可以看到
這個(gè)插件有自己的VM入口識(shí)別算法,所以不需要自己跳轉(zhuǎn)到VM入口。接著按F9運(yùn)行到VM入口處后,按F1進(jìn)行分析
分析完成后,會(huì)彈出提示框重新運(yùn)行進(jìn)程。重新運(yùn)行后, Plugins -> VMPSweeper -> Continue decode VM。繼續(xù)分析。
如果分析沒(méi)有產(chǎn)生任何異常,VMPSweeper 會(huì)把還原后的代碼 Patch 到原本的虛擬機(jī)入口處
但上述過(guò)程經(jīng)常出錯(cuò),可以在 OD 根目錄下查找 VMS_xxx 文件夾,查看日志文件,*.log 文件中保存著還原的過(guò)程輸出。
我這里也沒(méi)有完全分析成功,但是在VMS文件夾下可以看到上面幾個(gè)文件
按照文件名提示,很明顯是保存的是VM虛擬機(jī)的寄存器和堆棧狀態(tài)
該工具是少見(jiàn)的可以將 VMProtect 保護(hù)代碼進(jìn)行完整還原的工具,缺點(diǎn)是穩(wěn)定性太差,對(duì)于稍復(fù)雜的程序,還原過(guò)程很大可能會(huì)出現(xiàn)異常報(bào)錯(cuò)。我這里測(cè)試的是VM2.13版本分析失敗。
總結(jié)
以上是生活随笔為你收集整理的VMP分析之VMP2.13插件化分析(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VMP分析之VMP1.09虚拟化架构分析
- 下一篇: Android之Xposed框架完全使用