原創(chuàng)|其它|編輯:郝浩|2012-11-13 16:36:16.000|閱讀 2182 次
概述:VMProtect 是新一代的軟件保護(hù)系統(tǒng),不像其它常見的保護(hù)系統(tǒng),VMProtect 可以修改應(yīng)用程序的源代碼。過對(duì)應(yīng)用程序代源碼的修改,來(lái)實(shí)現(xiàn)對(duì)軟件的保護(hù)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
代碼保護(hù)利器VMProtect在線訂購(gòu)315特惠,個(gè)人授權(quán)專享折扣立即購(gòu)買>>
是一款虛擬機(jī)保護(hù)軟件,是目前最為流行的保護(hù)殼之一,與其他類型保護(hù)軟件不同的是,它使用的是虛擬機(jī)保護(hù)技術(shù),側(cè)重點(diǎn)在于保護(hù)所指定的函數(shù),增加逆向分析的復(fù)雜度。
虛擬機(jī)其實(shí)就是一個(gè)字節(jié)碼解釋器,它循環(huán)的讀取指令并執(zhí)行,并且它只有一個(gè)入口和一個(gè)出口(vm_exit)。通過靜態(tài)分析,我們可以分析出整個(gè)執(zhí)行引擎的完整代碼。
將所有選項(xiàng)全部開啟后的結(jié)果如圖:
這時(shí)大量的fakejcc(虛假跳轉(zhuǎn))和垃圾指令使原來(lái)十分簡(jiǎn)單的代碼變得非常復(fù)雜。
如果要對(duì)加了殼的程序做一些處理,比如設(shè)定一些規(guī)則,將虛假分支清除后,流程圖就會(huì)和未加殼時(shí)一樣清晰了。如果再清除掉垃圾指令,那就會(huì)更清晰了。經(jīng)過處理后,新的流程圖分析起來(lái)難度就會(huì)降低很多。如圖:
VMP是基于堆棧的虛擬機(jī)(Stack-Based VirtualMachine),然而虛擬機(jī)指令并不顯式的使用某個(gè)參數(shù),而是先將參數(shù)壓入堆棧,然后直接從堆棧中讀取。例如:
表達(dá)式:
Add eax,ecx
可以翻譯為:
Push ecx
Push eax
Add
Pop eax
無(wú)論push進(jìn)來(lái)的是誰(shuí),Add指令總是讀取并彈出堆棧中存放的值。
匯編指令在轉(zhuǎn)換到虛擬機(jī)的指令體系的過程中,被最大限度的化簡(jiǎn)和歸類了,VMP中的指令大體分五類:
Vmp中的邏輯運(yùn)算只有一條指令:nor。這個(gè)指令在電路門中叫NOR門,它由三條指令組成,即not not and,與NAND門一樣,用它可以模擬not and xor or這四條邏輯運(yùn)算指令。
轉(zhuǎn)換公式 :
P(a,b) = ~a & ~b
not(a) = P(a,a)
and(a,b)= P(P(a,a),P(b,b))
or(a,b) = P(P(a,b),P(a,b))
xor(a,b)= P(P(P(a,a),P(b,b)),P(a,b))
VMP將所有寄存器都存放在了堆棧的結(jié)構(gòu)中(VM_CONTEXT),結(jié)構(gòu)中的每一項(xiàng)代表一個(gè)寄存器或者臨時(shí)變量。但在運(yùn)行過程中,其中的項(xiàng)所映射的真實(shí)寄存器都是不固定的,可以把它比作一個(gè)齒輪,每做完一個(gè)動(dòng)作,部分項(xiàng)的映射就互換了一下位置,或者執(zhí)行完一段指令,齒輪就按不固定的方向和度數(shù)轉(zhuǎn)動(dòng)一下,然后全部的項(xiàng)映射就改變了。VMP在生成字節(jié)碼的過程中,維護(hù)了一份結(jié)構(gòu)中每一項(xiàng)所映射的真實(shí)寄存器,但這只存在于編譯過程,而在運(yùn)行時(shí)是沒有明確的信息的。這直接導(dǎo)致了分析和識(shí)別的難度。
VMP把解碼算法分布到了Dispatch和每個(gè)Handler中,只有在取指令和取數(shù)據(jù)時(shí)才會(huì)解密,而每個(gè)解碼的算法也都是不同的,并且它的Seed每次解密都會(huì)變化的。 要寫出字節(jié)碼的逆算法不是不可以,但是復(fù)雜度太高,有些得不償失。所以如果想要修改數(shù)據(jù),還是使用HOOK的方式比較輕松。 |
![]() |
但是HOOK的方式得解決代碼檢測(cè)的問題,VMP注冊(cè)版除了會(huì)加密字節(jié)碼以外,還會(huì)隨機(jī)對(duì)一段代碼做檢測(cè),如果有錯(cuò)將無(wú)法運(yùn)行。 VMP注冊(cè)版中有一條叫指令( calchash),就是用來(lái)做檢測(cè)的。VMP會(huì)在編譯好的字節(jié)碼中加一些自己的指令,每次執(zhí)行都會(huì)隨機(jī)對(duì)一段代碼生成一個(gè)Hash結(jié)果,然后與另一個(gè)隨機(jī)的數(shù)相加,結(jié)果必須為0,否則就會(huì)出錯(cuò)。如果要爆破或者修改VMP的代碼,還需要處理這個(gè)過程。
是新一代的軟件保護(hù)系統(tǒng),不像其它常見的保護(hù)系統(tǒng),VMProtect 可以修改應(yīng)用程序的源代碼。通過對(duì)應(yīng)用程序代源碼的修改,來(lái)實(shí)現(xiàn)對(duì)軟件的保護(hù)。總而言之VMP 的設(shè)計(jì)原則就是用最簡(jiǎn)單的正向設(shè)計(jì)導(dǎo)致最難的逆向分析。本文僅介紹VMprotect軟件保護(hù)的底層原理機(jī)制,以便大家對(duì)VMProtect的了解更加深入。
代碼保護(hù)利器VMProtect在線訂購(gòu)315特惠,個(gè)人授權(quán)專享折扣立即購(gòu)買>>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn