將VMProtect集成到應(yīng)用程序教程之實模式(四):將代碼鎖定到序列號上
在實模式下,VMProtect許可系統(tǒng)向受保護的應(yīng)用程序放置一個特殊的許可模塊。該模塊執(zhí)行與SDK中的測試功能相同的功能,但是使用序列號的內(nèi)容而不是配置ini文件。本系列教程的五個步驟說明了使用基于VMProtect和許可系統(tǒng)的全功能保護來保護簡單應(yīng)用程序的過程。
免費下載VMProtect 優(yōu)惠購買VMProtect
破解程序最常見的方法之一是找到要檢查序列號的位置,以及其后的附近條件跳轉(zhuǎn)。如果序列號正確,則程序以一種方式執(zhí)行,否則就以另一種方式執(zhí)行。黑客找到了該跳轉(zhuǎn)并將其替換為“正確”方式的跳轉(zhuǎn)。
本文,我們將使用這種技術(shù)直接在源代碼中“破解”測試程序。首先,“關(guān)掉”條件跳轉(zhuǎn):
char *serial = read_serial("serial.txt"); int res = VMProtectSetSerialNumber(serial); delete [] serial; if (false && res) {
現(xiàn)在,程序可以接受任何序列號,并且可以正常工作。當然,如果文件受到VMProtect的保護,即使是經(jīng)驗豐富的黑客也會花費數(shù)月的時間來定位和修改條件跳轉(zhuǎn)。考慮到程序在不同條件下多次檢查序列號,即使是這樣一個簡單的檢查也是相當安全的。
步驟五 將代碼鎖定到序列號上
VMProtect的演示版對已處理函數(shù)的數(shù)量有所限制:僅處理一個函數(shù)。因此,如果使用demo-version,應(yīng)該只將foo()函數(shù)包括到項目中,否則VMProtect的demo-version可以選擇main()函數(shù),并且對序列號的鎖定將不起作用。
VMProtect的授權(quán)系統(tǒng)允許您將一個或多個功能的代碼鎖定到一個序列號,這樣,如果沒有提供正確的序列號,它們將無法工作。該函數(shù)的主體將被虛擬化,然后進行加密,并且只能使用正確的序列號進行解密。這意味著,即使黑客在序列號檢查中找到并修復(fù)了有條件的跳轉(zhuǎn),鎖定到序列號的功能仍然無法使用。
下面讓我們嘗試一下。在“Functions”部分中,選擇foo()函數(shù),然后在右側(cè)面板中將“Lock to Serial Number”選項更改為“Yes”。
然后,保護應(yīng)用程序。由于我們已經(jīng)“破解”了它,所以可以將任意文本放入serial.txt文件中并運行該應(yīng)用程序。以下文本將出現(xiàn)在控制臺中:
C:\test>dummy_app.vmp.exe serial number is correct, calling foo()
這意味著,黑客“修復(fù)”了條件跳轉(zhuǎn),程序以“正確”方式運行。但是當調(diào)用foo()時,程序?qū)@示一條消息:
由于我們將foo()函數(shù)鎖定在序列號上,而黑客沒有此序列號,因此嘗試解密該函數(shù)的代碼會導(dǎo)致故障和無法繼續(xù)執(zhí)行程序。當按下“OK”時,程序關(guān)閉,并且“done”消息永遠不會不顯示在控制臺中。
什么應(yīng)該被鎖定到序列號?
將只在程序的注冊版本中運行的功能鎖定到序列號是有必要的。由于鎖定需要虛擬化,所以應(yīng)該考慮一些性能損失。例如,如果文本編輯器不允許在演示版中保存結(jié)果,則可以將保存文檔功能鎖定到序列號。如果該函數(shù)在其操作期間調(diào)用其他函數(shù),則也不必鎖定它們,因為沒有主函數(shù),它們將不會有任何用處。
注意,在沒有序列號的情況下調(diào)用鎖定的函數(shù)會導(dǎo)致程序關(guān)閉,并且沒有機會保存工作結(jié)果。這就是為什么應(yīng)該徹底測試應(yīng)用程序,以確保它在試用模式下不會調(diào)用此類功能。在上面的示例中,文本編輯器必須在演示模式下禁用“Save”命令,不能對Ctrl + S快捷鍵作出反應(yīng),也不應(yīng)該要求在退出時保存文檔。如果您不注意這一點,用戶可能會對“錯誤”的演示版本感到失望。
鎖定序列號和無效序列號
當調(diào)用VMProtectSetSerialNumber()函數(shù)時,授權(quán)許可模塊檢查傳遞給該函數(shù)的序列號。只有當序列號在檢查時絕對正確時才執(zhí)行代碼的加密片段——未列入黑名單,具有正確的硬件標識符、未過期等等。在這種情況下,所有加密的過程都將執(zhí)行,直到應(yīng)用程序關(guān)閉,或再次調(diào)用VMProtectSetSerialNumber()。
在程序執(zhí)行期間,某些限制可能會“觸發(fā)”:例如,程序的運行時間可能到期或序列號過期日期到來。在這種情況下,許可模塊仍會加密并執(zhí)行鎖定在序列號上的功能。這是因為受保護的應(yīng)用程序很難檢測到這些限制觸發(fā)的時刻并相應(yīng)地更改行為(阻止相應(yīng)的菜單項等)。如果許可模塊突然停止執(zhí)行鎖定到序列號的代碼片段,很可能導(dǎo)致應(yīng)用程序故障。這就是為什么要在設(shè)置序列號時做出決策,并選擇相應(yīng)的執(zhí)行模式等原因。
有關(guān) VMProtect 更多資源,請聯(lián)系了解
12月,慶圣誕,迎元旦,上“慧都網(wǎng)”小程序簽到兌軟件商城無門檻抵價券>>> 領(lǐng)優(yōu)惠券購VMProtect享折上折>>>