VMProtect SDK完全避坑指南
文章目錄
- 前言
- 編譯VMProtect Demo
- 生成機(jī)器碼
- 替換密鑰對(duì)
- 生成序列號(hào)
- 總結(jié)
前言
在編寫(xiě)軟件的時(shí)候,通常會(huì)有這樣一個(gè)需求,需要對(duì)自己寫(xiě)的軟件實(shí)現(xiàn)一機(jī)一碼加密保護(hù),并且最好能夠限制使用時(shí)間。拋開(kāi)現(xiàn)有的網(wǎng)絡(luò)驗(yàn)證系統(tǒng)之外,最安全可靠的莫過(guò)于VMP的加密系統(tǒng)了。
但是網(wǎng)上關(guān)于SDK的使用資料幾乎沒(méi)有一套完整的說(shuō)明文檔,清一色全是各種坑。這里筆者整理一下在研究VMP SDK過(guò)程中遇到的各種坑,手把手教你實(shí)現(xiàn)一個(gè)帶時(shí)間驗(yàn)證的加密系統(tǒng)和注冊(cè)機(jī)。
編譯VMProtect Demo
https://bbs.pediy.com/thread-201173.htm
首先需要去看雪下載這個(gè)SDK的Demo,上面演示了幾乎所有的VMP SDK功能。這個(gè)工程作者是用VS2013寫(xiě)的,我這里用VS2017編譯
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-AJ8xNCTQ-1615006331516)(VMP SDK完全避坑指南.assets/1614959989942.png)]
接著安裝一下VMP,我這里用最新的3.4版本
然后開(kāi)始編譯工程,首先來(lái)解決第一個(gè)報(bào)錯(cuò)
嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài) 錯(cuò)誤 C1047 對(duì)象或庫(kù)文件“KeyGen32.lib”是使用比創(chuàng)建其他對(duì)象所用編譯器舊的編譯器創(chuàng)建的;請(qǐng)重新生成舊的對(duì)象和庫(kù) VMProtect C:\Users\87321\Desktop\VMProtect演示SDK加密DEMO\VMProtect\VMProtect\LINK 1將下面這個(gè)路徑中的文件全部復(fù)制到工程目錄中
C:\Users\Public\Documents\VMProtect\KeyGen\DLL\Lib直接替換即可,然后再次編譯
出現(xiàn)第二個(gè)錯(cuò)誤
#ifdef _WIN64 #pragma comment(lib, "KeyGen64.lib") #else #pragma comment(lib, "KeyGen32.lib") #endif // _WIN64這里需要將上面這段代碼復(fù)制到工程的主對(duì)話框類中
然后再次編譯
即可編譯通過(guò)
生成機(jī)器碼
接著我們需要將生成的exe放到VMP中進(jìn)行編譯,因?yàn)榇a中的API實(shí)際上只是一個(gè)標(biāo)記,只有通過(guò)VMP編譯之后,才會(huì)產(chǎn)生實(shí)際效果
直接將生成的exe拖入軟件,在授權(quán)里選擇通用
然后編譯Demo
編譯完成之后運(yùn)行,然后點(diǎn)擊獲取硬件碼。這樣就獲取到了我們的硬件ID。
替換密鑰對(duì)
我們不光需要對(duì)文件進(jìn)行加密,還需要有一個(gè)自己的注冊(cè)機(jī),用于生成序列號(hào),所以這里就需要用到密鑰對(duì)。
在菜單->項(xiàng)目->導(dǎo)出密鑰對(duì)中,將密鑰對(duì)導(dǎo)出
然后將密鑰對(duì)替換到上面的代碼里,進(jìn)行重新編譯之后再用VMP進(jìn)行加殼。
生成序列號(hào)
接著我們需要通過(guò)密鑰對(duì)來(lái)生成注冊(cè)碼
注意不要用這上面的創(chuàng)建注冊(cè)文件,這個(gè)Demo創(chuàng)建的注冊(cè)文件始終是校驗(yàn)不通過(guò)的,具體原因未知,這里算是一個(gè)坑。
我們直接用官方的Demo來(lái)生成序列號(hào)
C:\Users\Public\Documents\VMProtect\KeyGen\DLL\MSVC這個(gè)路徑下的工程就是序列號(hào)的生成Demo
同樣將導(dǎo)出的密鑰對(duì)復(fù)制到工程中,并且注釋掉原先的代碼。接著修改代碼
VMProtectSerialNumberInfo si = {0}; si.flags = HAS_HARDWARE_ID | HAS_TIME_LIMIT; si.nRunningTimeLimit = 1; si.pHardwareID = "fDRhHcnVyCnHFwrfCgl17hbady4GpPOlljzXmQ==";flags設(shè)置為硬件綁定和時(shí)間限制,nRunningTimeLimit時(shí)間限制為1分鐘,接著pHardwareID填入自己的機(jī)器碼
然后生成一個(gè)密鑰對(duì)
創(chuàng)建一個(gè)名為license.lic的文件,放到同路徑下
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-TcdyVdSa-1615006331531)(VMP SDK完全避坑指南.assets/1614961554506.png)]
點(diǎn)擊檢測(cè)注冊(cè)文件,密鑰驗(yàn)證通過(guò)
接著過(guò)一會(huì)再次點(diǎn)擊檢測(cè)注冊(cè)文件,提示密鑰驗(yàn)證失敗,這是因?yàn)槊荑€的有效時(shí)間過(guò)了。關(guān)于到期時(shí)間,可以通過(guò)分解注冊(cè)碼進(jìn)行獲取。
總結(jié)
到這里就完成了一個(gè)完整的帶時(shí)間限制的VMP虛擬機(jī)保護(hù)軟件+注冊(cè)機(jī),各位可以任意為自己寫(xiě)的軟件添加保護(hù)功能了。其余的功能請(qǐng)自行探索。如果發(fā)現(xiàn)其他新奇好玩的功能或者踩過(guò)的坑請(qǐng)務(wù)必一起分享交流。
總結(jié)
以上是生活随笔為你收集整理的VMProtect SDK完全避坑指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Avaddon勒索解密工具原理解析
- 下一篇: 001 JAVA基础