VMProtect
產(chǎn)品編號(hào):154926
當(dāng)前版本:1.65
開 發(fā) 商:VMPsoft
產(chǎn)品類型:工具軟件
產(chǎn)品功能:源碼混淆 / 加殼程序
開發(fā)平臺(tái):Visual Basic 6.0 / Visual C++ 6.0 / Delphi / C++ Builder
其他特性:不提供源碼
產(chǎn)品源碼:
新一代軟件保護(hù)程序。被保護(hù)的代碼部分在虛擬機(jī)上執(zhí)行,這使得被保護(hù)的程序很難被分析與破解。反匯編程序與MAP文件的運(yùn)用使您能快速選擇需要保護(hù)從而避免破解的代碼。
理論
VMProtect是一款全新的軟件保護(hù)工具。與其它大部分的保護(hù)程序不同,VMProtect可修改程序的源代碼。VMProtect可將被保護(hù)文件中的部分代碼轉(zhuǎn)化到在虛擬機(jī)(以下稱作VM)上運(yùn)行的程序(以下稱作bytecode)中。您同樣可把VM想象為具備命令系統(tǒng)的虛擬處理器,該命令系統(tǒng)與Intel 8086處理器所使用的完全不同。例如,VM沒有負(fù)責(zé)比較2個(gè)操作數(shù)的命令,也沒有有條件與無條件的移轉(zhuǎn)等。就象您現(xiàn)在看到的,黑客必須開發(fā)一款特定的工具以分析與反編譯bytecode,而且還相當(dāng)?shù)睾臅r(shí)。可是,我們知道沒有無法破解的保護(hù)程序,這也是我們?yōu)槭裁磿?huì)將保護(hù)級(jí)別達(dá)到破解費(fèi)用與購買費(fèi)用相當(dāng)(或破解費(fèi)用甚至超過購買費(fèi)用)的程度。不管怎么樣,請(qǐng)您記住VMProtect是 一款能幫助您“隱藏”主要軟件保護(hù)機(jī)制的工具。
為保護(hù)準(zhǔn)備程序
首先,在Delphi中創(chuàng)建一個(gè)具有表格(Form1)、文本編輯字段(Edit1)以及一個(gè)按鍵(Button1)的簡單工程:
pic 1.
在用戶點(diǎn)擊Button1后,程序?qū)z查密碼是否正確以及顯示相應(yīng)消息(正確或不正確):
procedure TForm1.Button1Click(Sender: TObject); begin if StrToIntDef(Edit1.Text, 0) mod 17=13 then MessageDlg('Correct password', mtInformation, [mbOK], 0) else MessageDlg('Incorrect password', mtError, [mbOK], 0); end; |
判斷密碼是否正確的算法非常簡單—密碼被轉(zhuǎn)換為數(shù)字。然后,該數(shù)字除以17,如果余數(shù)為13的話,該密碼正確。否則該密碼錯(cuò)誤。
在編譯工程前,我們將在工程中啟用生成MAP文件的選項(xiàng):
pic 2.
我們需要為VMProtect準(zhǔn)備MAP文件讓它能夠通過流程名稱確定其地址。此后,我們會(huì)運(yùn)行“Build Project1”然后獲得已編譯的工程以及MAP文件。
使用書簽功能
當(dāng)您只需要保護(hù)流程中的一部分(或某些部分)時(shí),就可以理解使用書簽的原因。您應(yīng)使用匯編程序的插入功能以注明需要標(biāo)注的部分:
- The start marker of the protected block:
asm db $EB,$10,'VMProtect begin',0 end; |
- The end marker of the protected block:
asm db $EB,$0E,'VMProtect end',0 end; |
當(dāng)您使用VMProtect時(shí),書簽將會(huì)有它們自己獨(dú)特的名稱如“VMProtectMarker”以及序列號(hào)。
水印
VMProtect為您提供了一個(gè)獨(dú)有的功能,該功能可以將隱藏的文件所有者信息添加到被保護(hù)的文件中。您的每個(gè)用戶都能擁有一個(gè)具有獨(dú)特字節(jié)排列的水印。在您將水印內(nèi)置到被保護(hù)文件中以后,您就能確定文件的所有者以及可以采取相應(yīng)的措施(例如,破解程序被非法分發(fā)時(shí))。
使用VMProtect
使用"File"-"Open"菜單項(xiàng)加載工程。添加負(fù)責(zé)檢查工程密碼是否正確的程序:
pic 3.
VMProtect能根據(jù)所選的編譯類型以不同的方式處理被保護(hù)的代碼。讓我們來詳細(xì)了解每個(gè)不同的編譯類型:
在您將所有必要的程序添加到工程中后,切換到“選項(xiàng)”:
在指定完所有必要的選項(xiàng)后,開始編譯工程。在編譯完成后,在工程文件(例如,TEST.EXE)旁邊會(huì)創(chuàng)建一個(gè)新文件(例如,TEST.VMP.EXE)。指定的程序?qū)⒃谔摂M機(jī)的該文件中運(yùn)行。