UNIX 密鑰生成器
VMProtect 是新一代軟件盜版保護(hù)解決方案。VMProtect 是目前強(qiáng)大的反盜版解決方案之一,許多領(lǐng)先的軟件發(fā)行商都在使用它。VMProtect允許保護(hù)可執(zhí)行文件(EXE,SCR),動(dòng)態(tài)鏈接庫(DLL,OCX,BPL)和驅(qū)動(dòng)程序(SYS)。
加密解密技術(shù)交流群(766135708)
.UNIX 版本的密鑰生成器是一個(gè) PHP 文件,其中包含生成序列號所需的所有信息。該文件位于Keygen\PHP中。下面我們描述使用這種生成器的要點(diǎn)。
配置生成器
在 PHP 文件的開頭,設(shè)置代碼位于:
////////////////////////////////////////////////////////////////////////////////////////////// // The following lines should be generated by VMProtect License Manager $exported_algorithm = "RSA"; $exported_bits = 2048; $exported_private = "PJvj4kEpoQMIpYK+9wEt......xKeiSZgzdiln8Q=="; $exported_modulus = "rOlny/3QgZb/VmGr3CmY......I6ESAUmtQ+RBqQ=="; $exported_product_code = "oLQdGUn8kVk="; //////////////////////////////////////////////////////////////////////////////////////////////
此代碼由 VMProtect 自動(dòng)生成(請參閱導(dǎo)出產(chǎn)品參數(shù))并且對于每個(gè)特定產(chǎn)品都是唯一的。準(zhǔn)確復(fù)制它至關(guān)重要,否則生成器將無法正常工作。
密鑰的內(nèi)容
生成器指定一個(gè)序列號的內(nèi)容。這些內(nèi)容在一個(gè)數(shù)組中指定,下面列出了密鑰的所有可能參數(shù)。然而,在實(shí)際應(yīng)用中,其中一些可能會(huì)被省略:
$params = array( user_name => "John Doe", // UTF-8! email => "john@doe.com", hwid => "vHGMdMRvGCPjWcCQ", // Exactly as returned by VMProtectGetCurrentHWID expire_date => array(year => 2009, month => 10, day => 1), maxbuild_date => array(year => 2009, month => 10, day => 1), time_limit => 10, user_data => base64_decode("CGCvRvMWcPHGdMjQ"), // string of bytes );
成功的密鑰生成處理函數(shù)
您可以在下面看到成功生成序列號時(shí)調(diào)用的最簡單的函數(shù)。發(fā)送給它的唯一參數(shù)是序列號字符串。該函數(shù)必須將序列號傳遞給調(diào)用者(電子商務(wù)代理),通常使用echo命令。為了方便起見,該字符串被初步拆分為每個(gè) 75 個(gè)符號的子字符串。此外,此功能可以通過電子郵件將生成的序列號發(fā)送給開發(fā)人員或?qū)⑵涮砑拥綌?shù)據(jù)庫中。
function OnSerialGenerated($serial) { $serial = wordwrap($serial, 75, "\n", true); echo $serial; }
密鑰生成器錯(cuò)誤處理函數(shù)
需要我們注意的代碼的最后一部分是出現(xiàn)問題時(shí)調(diào)用的函數(shù)。此函數(shù)接收帶有錯(cuò)誤消息的字符串,完成后調(diào)用die()函數(shù)。處理程序函數(shù)必須做兩件事:代替密鑰,向電子商務(wù)代理返回一條消息,說明將手動(dòng)發(fā)送密鑰。并向開發(fā)人員發(fā)送有關(guān)錯(cuò)誤的詳盡信息以修復(fù)它并手動(dòng)生成密鑰。
function OnSerialGenerationFailed($details) { echo "You will receive serial number in the next 24 hours"; // message to the customer // mail("support@vendor.com", "Houston, we have a problem", $details); // message to vendor }
有幾種可能的錯(cuò)誤原因:算法參數(shù)不正確,密鑰參數(shù)不正確,用戶名或電子郵件太長,或者序列號太長不適合算法中指定的位數(shù). 這就是為什么OnSerialGenerationFailed函數(shù)必須向開發(fā)人員發(fā)送有關(guān)該問題的詳細(xì)信息,以便他可以生成序列號并將其發(fā)送給客戶。
其他需要考慮的事情
示例包含密鑰生成器的簡化版本。它沒有考慮開發(fā)網(wǎng)絡(luò)生成器的建議。它不檢查調(diào)用方的 IP 地址,也不分析輸入?yún)?shù)。在開發(fā)自己的生成器時(shí)請注意這一點(diǎn)。用戶名和電子郵件必須作為 UTF-8 字符串傳遞。確保您的電子商務(wù)代理以 UTF-8 編碼發(fā)送這些數(shù)據(jù),如果不是這樣,則對信息進(jìn)行轉(zhuǎn)碼。
錯(cuò)誤的編碼不會(huì)導(dǎo)致生成錯(cuò)誤的序列號,但這樣的序列號顯示的注冊名可能與真實(shí)用戶名不同,所以他或她可能會(huì)在“關(guān)于”窗口中看到它時(shí)感到驚訝。應(yīng)用非對稱加密是一個(gè)復(fù)雜的數(shù)學(xué)過程。如果使用純PHP實(shí)現(xiàn),沒有任何第三方庫,生成序列號可能需要幾十秒。生成器在可用時(shí)使用gmp_powm、bi_powmod、bcpowod函數(shù)。如果在您的主機(jī)上生成序列號的時(shí)間太長,我們建議要求主機(jī)提供商啟用這些功能。例如,gmp_powm函數(shù)的運(yùn)行速度是bcpowmod的十倍。