本文將介紹軟件加密鎖的一些編程技巧,以及軟件開發者將如何編寫安全可靠的代碼,如何對付各類各樣的加密狗破解,編寫加密程序時應該儘可能避免的一些問題等等。如下是全文。html
開發商程序經過調用硬件加密狗的接口模塊對硬件加密狗操做,硬件加密狗響應該操做並經過接口模塊將相應數據返回給開發商的應用程序。開發商的應用程序能夠對返回值進行斷定並採起相應的動做。若是返回無效的響應,代表沒有正確的狗,開發商能夠將應用程序終止運行,或者讓應用程序以錯誤的方式執行。簡要示意以下:web
一、反彙編後靜態分析: W32Dasm、IDA Pro算法
二、用調試工具跟蹤動態分析:SoftICE、TRW2000編程
三、針對各類語言的反彙編工具:VB、Delphi、Java等安全
四、其餘監視工具:FileMon、RegMon 等函數
下面,咱們以Sentinel SuperPro加密鎖爲例,詳細介紹一下使用如何在編程的過程當中提升加密強度的方法。工具
訪問狗以後不要當即作判斷,判斷狗不正確後,不要當即提示,或者不提示。開發商在程序各個部分插入校驗算法的代碼,用以增長程序代碼的複雜性,防止解密者輕易跟蹤發現所有的校驗代碼。校驗代碼插入程序的頻率越高,破解難度越大,軟件就越安全。開發工具
重要的字符串不要在程序中以明文出現,應該使用算法動態生成。加密
在不影響程序效率的狀況下,儘可能多寫一些查狗的函數,彼此要有區別,使用不一樣的算法,多一些查狗出錯的標誌,讓這些標誌參與運算,在不一樣的模塊中,使用不一樣的查狗函數。spa
針對某一具體查詢校驗,都有三步驟組成:查詢獲得響應串;比較響應串和查詢串是否匹配;根據校驗結果執行相應的步驟。建議三個步驟要延時執行。最好將三步驟相互遠離些,甚至放到不一樣的子程序或函數中。例如:執行「查詢獲得響應串」後,相隔50行執行「比較響應串和查詢串是否匹配」,假如程序須要調用一個函數。那麼就在這個函數裏執行「執行相應的步驟」。解密者在跟蹤過程當中,即便發現了其中一部分程序代碼,但很難發現另外兩部分代碼和所有三部分之間的關聯。程序難於被破解。
將加密鎖返回的「響應串」做爲程序中的參數使用。例如:算法單元返回「響應串」是「87611123」,而程序中須要使用「123」這個參數。程序中獲得「響應串」後,將「響應串」減去「87611000」獲得參數。若是解密者修改代碼跳過查詢校驗加密鎖部分,參數將是錯誤值,從而會使程序運行紊亂。
程序在驗證加密算法過程當中,通常狀況下驗證數據不正確程序就會選擇退出。這樣一來很容易被解密者發現代碼特徵,跳過查詢校驗部分。開發商設計查詢校驗部分時,若是程序校驗數據不正確,程序也不退出能夠繼續執行一些無用的操做使程序紊亂,用以隱蔽代碼迷惑解密者。
開發商的軟件可能有多個模塊,查狗的模塊或接口不要用顯而易見的名字來命名,這樣會令解密者更容易找到加密點,固然也能夠利用一些名字來迷惑解密者,尤爲是dll,引出函數時甚至能夠不用函數名。
給查狗函數加入必定的隨機性,例如,隨機地執行某一API函數,或者在狗的存儲區中劃定一小塊區域做隨機讀寫,讀寫地址、讀寫內容、讀寫長度都是隨機取的,這樣能夠很好地防止那些模擬工具。
試用版與正式版要分開,試用版不提供的功能,代碼已經刪掉,使得不可能利用試用版破解獲得正式版。
在大多數狀況下,破解是經過更改exe 或 dll 文件實現的,要在程序中檢查exe或dll文件的完整性,即利用某種算法計算出整個文件的校驗和,在程序中比較,若是文件被更改,校驗和就會變化,這類算法網上有不少,能夠查獲得。另外,exe和dll之間要相互認證,一方面防止dll被替換,另外一方面防止非法exe訪問dll。
小結:應該儘可能避免的問題
1)訪問狗、作判斷、提示用戶寫在一塊兒
2)重要的字符串在程序中以明文出現
3)在狗中存放字符串,程序中讀出比較
4)調用同一函數或判斷同一個全局標誌查狗
5)試用版軟件同正式版軟件是同一份
6)查狗的模塊或接口名字太明顯
7)程序無隨機性,每次運行執行路徑都同樣
8)沒有檢查exe 或 dll 文件的完整性,exe 和 dll 之間也沒有相互認證
1)隨機查詢法:開發商使用SuperPro開發工具生成大量查詢、響應對,如:1000 對,並在程序中使用這些校驗數據。在程序運行過程當中,從1000 對查詢、響應對之中,隨機的抽出其中一對驗證SuperPro加密算法。由於,校驗數據不少,每次驗證加密算法使用的「查詢響應對」可能不一樣,「監聽仿真」軟件即便紀錄了一部分「查詢響應對」,但沒法紀錄所有「查詢響應對」。軟件每次運行時,均可能使用新的查詢響應校驗數據,「監聽仿真」軟件沒法響應這些新的查詢。所以,「監聽仿真」也就失去了模擬、仿真SuperPro軟件保護鎖的做用。
2)延時法:開發商能夠事先使用開發工具生成大量的校驗數據,即:「查詢、響應」對,好比:200000 組「查詢、響應」對,開發程序過程當中,開發商設計定時查詢、校驗加密鎖的機制。在程序運行過程當中,每10分鐘查詢並校驗加密鎖一次,使用過的校驗數據,4年內再也不重複使用。即便監聽軟件24小時記錄數據,也須要4年才能紀錄完畢。4年後,軟件早已過了「熱賣期」了,使用監聽軟件的解密者也就失去了行動意義。
3)分組、分時法:開發商能夠在程序中把查詢響應對分組,好比:1200 對校驗數據可分爲12組,每100對一組。程序在一年中的第一月使用第一組校驗數據,第二月使用第二組校驗數據,以此類推。監聽軟件就算記錄了第一月的校驗數據,第二個三個月之後校驗數據沒有紀錄,在之後的時間段軟件仍然沒法正常使用,從而「監聽仿真」失去意義。
4)隨機噪聲數據法:開發商能夠在程序中隨機產生查詢數據,隨機數據和真實數據混合在一塊兒,監聽軟件即便記錄了查詢數據,也會被其隨機性所迷惑,同時也沒法仿真另外一個次軟件運行產生的隨機數,加密軟件也就沒法破解。
注:本文部份內容來源於彩虹加密鎖Sentinel SuperPro的使用說明文檔以及相關技術文檔整理而成。