翻譯|使用教程|編輯:黃竹雯|2019-04-26 10:34:34.000|閱讀 447 次
概述:VMProtect 是一種很可靠的工具,可以保護應(yīng)用程序代碼免受分析和破解,但只有在應(yīng)用程序內(nèi)保護機制正確構(gòu)建且沒有可能破壞整個保護的嚴(yán)重錯誤的情況下,才能實現(xiàn)最好的效果。本文主要介紹在使用VMProtect前,先準(zhǔn)備一個項目。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
VMProtect 是一種很可靠的工具,可以保護應(yīng)用程序代碼免受分析和破解,但只有在應(yīng)用程序內(nèi)保護機制正確構(gòu)建且沒有可能破壞整個保護的嚴(yán)重錯誤的情況下,才能實現(xiàn)最好的效果。
接下來我們一起來看一個非常簡單的應(yīng)用程序,它只包含一個表單(Form1),一個文本元素(Edit1)和一個按鈕(Button1)。該應(yīng)用程序的工作方式如下:單擊Button1時,應(yīng)用程序會檢查輸入的密碼是否正確并顯示相應(yīng)的消息。
這里使用的是一種非常簡單的算法來檢查密碼:第一步,我們將其轉(zhuǎn)換為數(shù)字形式,然后我們通過除以17來計算余數(shù)。如果輸入密碼的數(shù)字表示除以17的余數(shù)等于13,則密碼正確。Delphi上的密碼檢查程序?qū)崿F(xiàn)如下:
function TForm1.CheckPassword: Boolean; begin Result:=(StrToIntDef(Edit1.Text, 0) mod 17=13); end; procedure TForm1.Button1Click(Sender: TObject); begin if CheckPassword then MessageDlg('Correct password', mtInformation, [mbOK], 0) else begin MessageDlg('Incorrect password', mtError, [mbOK], 0); Edit1.SetFocus; end; end;
保護程序和功能的選擇可以通過三種方式完成:
使用MAP文件來定義受保護代碼的邊界有一個很重要的優(yōu)點。幾乎所有具有局部變量或使用堆棧來保存寄存器和/或中間計算結(jié)果的過程或函數(shù)都有所謂的序言(prologue)和結(jié)尾(epilogue),它們相應(yīng)地位于編譯過程或函數(shù)的開頭和結(jié)尾:
push ebp \ mov ebp, esp \ prologue push 00 / push ebx / ... pop ebx \ pop ecx \ epilogue pop ebp / ret /
由于現(xiàn)代編譯器的工作方式,代碼標(biāo)記從不包含功能的序言和結(jié)尾。即使開始和結(jié)束之間的 CheckPassword 函數(shù)的整個代碼都包含在標(biāo)記中。對于黑客來說,只需要修改函數(shù)的序言讓程序不執(zhí)行虛擬化代碼可能就足夠了。 對于CheckPassword 函數(shù),可以按如下方式完成:
mov eax, 1 ret
注意:
如果使用MAP文件來選擇用于虛擬化的代碼片段,則序言和結(jié)尾也被虛擬化,從而顯著提高受保護程序的防黑客能力。此外,一個虛擬化函數(shù)是從另一個虛擬化函數(shù)調(diào)用的,控件在它們之間傳輸而不實際跳轉(zhuǎn)到被調(diào)用函數(shù)的地址(在這種情況下,調(diào)用是一個簡單的跳轉(zhuǎn)到虛擬機解釋器的字節(jié)碼內(nèi)的另一個地址)。 這也加強了對程序的保護,因為黑客對入口點的所有修改都沒有用。使用虛擬化函數(shù)時,只有在從未受保護或變異的代碼片段調(diào)用受保護函數(shù)時,才會將控制權(quán)轉(zhuǎn)移到虛擬化函數(shù)的入口點。
下篇文章將給大家介紹 VMProtect 準(zhǔn)備項目之使用MAP文件,敬請期待~ 如果你有任何問題或建議,請在下方留言噢。
VMProtect 在線訂購 低至¥710 (稅前),立即購買正版VMProtect>>>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn