軟體保護建議

看雪資料發表於2015-11-15

軟體保護建議

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

相關文章