看雪VMProtect分析與還原
VMProtect虛擬機保護軟件是業(yè)界公認的高強度軟件保護工具。VMP除了具有常規(guī)的IAT保護、資源保護、反調(diào)試、完整性校驗、運行時殼等保護手段以為,其最為人痛恨的是虛擬化保護。通過將原始的二進制匯編代碼轉(zhuǎn)化成語義等價的虛擬機字節(jié)碼(也常稱為PCODE,偽代碼),并使用自定義虛擬機(或稱字節(jié)碼解釋器)對字節(jié)碼進行解釋執(zhí)行。想恢復原始的代碼,必須分析虛擬機本身,大大提高了逆向分析的難度。
據(jù)筆者目前查到的資料,尚無公開的工具或方法可以進行VMP虛擬機字節(jié)碼到原始二進制代碼的還原。
個人覺得主要原因在于VMP虛擬機的RISC棧機體系結(jié)構(gòu)與x86的CISC體系結(jié)構(gòu)差異巨大。
如x86的一條指令如mov eax, [ebp+0x100],轉(zhuǎn)化為VMP偽代碼會變成類似如下的代碼:
push ebppush 0x100addpop eflpop tmppush tmppop eax
(實際上ebp, efl, tmp, eax都會對應VMP的虛擬寄存器,這里為了方便表達暫時這么寫)
一條CISC指令轉(zhuǎn)化成RISC棧機指令時會發(fā)生巨大的指令膨脹。想將膨脹后的偽代碼還原為一條CISC匯編指令是很困難的。
1. 如果單純依靠模式規(guī)則的匹配,這么必須收集非常多的膨脹規(guī)則,需要付出巨大的人力代價,開發(fā)難度高,卻不一定有好的效果。
2. 由于VMP的寄存器輪轉(zhuǎn)問題,確定指令的真實寄存器是很困難的。(2009年中國軟件安全峰值 Bughoho的PPT 《VMProtect的逆向分析與靜態(tài)還原》中詳細描述了寄存器輪轉(zhuǎn)并提出了解決方案,但這種方案比較復雜,開發(fā)難度比較高。)