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