上海道寧信息科技有限公司
參考價(jià): | 面議 |
- 產(chǎn)品型號(hào)
- 品牌
- 其他 廠商性質(zhì)
- 所在地
訪問次數(shù):306更新時(shí)間:2021-09-22 10:33:38
-
新一代軟件保護(hù)程序。被保護(hù)的代碼部分在虛擬機(jī)上執(zhí)行,這使得被保護(hù)的程序很難被分析與破解。反匯編程序與MAP文件的運(yùn)用使您能快速選擇需要保護(hù)從而避免破解的代碼。
特征綜述 About Feature
理論
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ì)有它們自己*的名稱如“VMProtectMarker”以及序列號(hào)。
水印
VMProtect為您提供了一個(gè)的功能,該功能可以將隱藏的文件所有者信息添加到被保護(hù)的文件中。您的每個(gè)用戶都能擁有一個(gè)具有*字節(jié)排列的水印。在您將水印內(nèi)置到被保護(hù)文件中以后,您就能確定文件的所有者以及可以采取相應(yīng)的措施(例如,破解程序被非法分發(fā)時(shí))。
使用VMProtect
使用"File"-"Open"菜單項(xiàng)加載工程。添加負(fù)責(zé)檢查工程密碼是否正確的程序:
pic 3.
VMProtect能根據(jù)所選的編譯類型以不同的方式處理被保護(hù)的代碼。讓我們來詳細(xì)了解每個(gè)不同的編譯類型:
- Mutation:在處理器命令的程度上修改了執(zhí)行文件(修改了現(xiàn)有的命令,添加了所有類型的垃圾命令等)。該編譯類型無法充分地保護(hù)代碼。它只能避免破解、解析以及避免進(jìn)行中的功能由簽名解析器確定(PEiD+KANAL、IDA+FLIRT等)。作為固定規(guī)則,我們并不需要保護(hù)庫功能不受破解以及解析,只需要更改它們的簽名就足夠保護(hù)在您應(yīng)用程序中應(yīng)用的庫(對(duì)破解與解析的保護(hù)程度不高,代碼的執(zhí)行率很高)。
- 虛擬化:可執(zhí)行代碼被轉(zhuǎn)化為由虛擬機(jī)執(zhí)行的bytecode。該編譯類型應(yīng)該應(yīng)用到所有執(zhí)行率非常重要的代碼的關(guān)鍵部分以防止破解與解析(對(duì)破解與解析的保護(hù)程度中等,代碼的執(zhí)行率中等)
- Ultra(mutation+虛擬化):以處理器命令的程度修改可執(zhí)行代碼,然后將它轉(zhuǎn)化為由虛擬機(jī)執(zhí)行的bytecode。該編譯類型應(yīng)該應(yīng)用到執(zhí)行率不重要的代碼(對(duì)破解與解析的保護(hù)程度高,代碼的執(zhí)行率低)。
在您將所有必要的程序添加到工程中后,切換到“選項(xiàng)”:
- 調(diào)試模式(確認(rèn)外部地址):用來尋找外部代碼參考的地址。
- 隱藏衡量:如果啟用該選項(xiàng),就不能在打開的表格中找到變量地址或調(diào)用的功能。
- 動(dòng)態(tài)創(chuàng)建在線命令:VM解釋程序不能執(zhí)行所有的Intel 8086命令,這就是為什么這些命令會(huì)以它們?cè)诒Wo(hù)部分中展現(xiàn)的形式執(zhí)行的原因。動(dòng)態(tài)創(chuàng)建在線命令同樣讓針對(duì)bytecode的破解變得艱難。
- 檢查VM對(duì)象的完整性:當(dāng)執(zhí)行程序的時(shí)候,VM解釋程序會(huì)自動(dòng)讀取當(dāng)執(zhí)行命令時(shí)被運(yùn)用的程序、bytecode以及水印中任意部分的檢查結(jié)果。VM對(duì)象的完整性檢查可保護(hù)解釋程序、bytecode以及水印免遭修改。
- 水?。?/strong>選擇您希望內(nèi)置到被保護(hù)文件中的水印。
- VM項(xiàng)目名稱:您能為即將被寫入VM解釋程序與bytecode的新項(xiàng)目名稱
- 移除fixup元素(只針對(duì)EXE文件):編譯程序(尤其象Delphi)會(huì)為EXE文件創(chuàng)建一個(gè)fixup元素列表。當(dāng)加載EXE文件時(shí),操作系統(tǒng)不會(huì)使用這些元素。如果您啟用該選項(xiàng),VM將使用被fixup元素列表所包含的部分。
在完所有必要的選項(xiàng)后,開始編譯工程。在編譯完成后,在工程文件(例如,TEST.EXE)旁邊會(huì)創(chuàng)建一個(gè)新文件(例如,TEST.VMP.EXE)。的程序?qū)⒃谔摂M機(jī)的該文件中運(yùn)行。