本節將給出關于軟件保護的一般性建議,這些都是無數人經驗的總結。程序員在設計自己的保護方式時最好能夠遵守這里給出的準則,這樣會提高軟件的保護強度。 (1)軟件最終發行之前一定要將可執行程序進行加殼/壓縮,使得解密者無法直接修改程序。如果時間允許并且有相應的技術能力,最好是設計自己的加殼/壓縮方法。如果采用現成的加殼工具,最好不要選擇流行的工具,因為這些工具已被廣泛深入地加以研究,有了通用的脫殼/解壓辦法。另外,最好采用兩種以上的不同的工具來對程序進行加殼/壓縮,并盡可能地利用這些工具提供的反跟蹤特性。
(2)增加對軟件自身的完整性檢查。這包括對磁盤文件和內存映像的檢查,以防止有人未經允許修改程序以達到破解的目的。DLL和EXE之間可以互相檢查完整性。
(3)不要采用一目了然的名字來命名函數和文件,如IsLicensedVersion( )、key.dat等。所有與軟件保護相關的字符串都不能以明文形式直接存放在可執行文件中,這些字符串最好是動態生成。
(4)盡可能少地給用戶提示信息,因為這些蛛絲馬跡都可能導致解密者直接深入到保護的核心。比如,當檢測到破解企圖之后,不要立即給用戶提示信息,而是在系統的某個地方做一個記號,隨機地過一段時間后使軟件停止工作,或者裝作正常工作但實際上卻在所處理的數據中加入了一些垃圾。
(5)將注冊碼、安裝時間記錄在多個不同的地方。
(6)檢查注冊信息和時間的代碼越分散越好。不要調用同一個函數或判斷同一個全局標志,因為這樣做的話只要修改了一個地方則全部都被破解了。
(7)不要依賴于GetLocalTime( )、GetSystemTime( )這樣眾所周知的函數來獲取系統時間,可以通過讀取關鍵的系統文件的修改時間來得到系統時間的信息。
(8)如果有可能的話,可以采用聯網檢查注冊碼的方法,且數據在網上傳輸時要加密。
(9)除了加殼/壓縮之外,還需要自己編程在軟件中嵌入反跟蹤的代碼,以增加安全性。
(10)在檢查注冊信息的時候插入大量無用的運算以誤導解密者,并在檢查出錯誤的注冊信息之后加入延時。
(11)給軟件保護加入一定的隨機性,比如除了啟動時檢查注冊碼之外,還可以在軟件運行的某個時刻隨機地檢查注冊碼。隨機值還可以很好地防止那些模擬工具,如軟件狗模擬程序。
(12)如果采用注冊碼的保護方式,最好是一機一碼,即注冊碼與機器特征相關,這樣一臺機器上的注冊碼就無法在另外一臺機器上使用,可以防止有人散播注冊碼,并且機器號的算法不要太迷信硬盤序列號,因用相關工具可以修改其值。
(13)如果試用版與正式版是分開的兩個版本,且試用版的軟件沒有某項功能,則不要僅僅使相關的菜單變灰,而是徹底刪除相關的代碼,使得編譯后的程序中根本沒有相關的功能代碼。
(14)如果軟件中包含驅動程序,則最好將保護判斷加在驅動程序中。因為驅動程序在訪問系統資源時受到的限制比普通應用程序少得多,這也給了軟件設計者發揮的余地。
(15)如果采用keyfile的保護方式,則keyfile的尺寸不能太小,可將其結構設計得比較復雜,在程序中不同的地方對keyfile的不同部分進行復雜的運算和檢查。
(16)自己設計的檢查注冊信息的算法不能過于簡單,最好是采用比較成熟的密碼學算法。可以在網上找到大量的源碼。
上一篇:軟件保護技術--CD-check
下一篇計算機軟件保護條例
溫馨提示:
凡在本公司進行電路板克隆業務的客戶,必須有合法的PCB設計版權來源聲明,以保護原創PCB設計版權所有者的合法權益;