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