在使用硬件加密時,加密的強度主要依靠兩個方麵:一是加密鎖本身的設計結構,二是開發商使用加密鎖的技巧。在使用同一種加密鎖時,軟件的加密強度可能有很大的差別,因為很多開發商不是很熟悉加密鎖的使用方式,沒有充分利用加密鎖提供的加密方式,給破解者留下了漏洞。在應用加密鎖開發時加密的強度可以從兩個途徑提高:一是增加破解的工作量,二是增加加密點的複雜度。
一、增加工作量的基本技巧:
1、增加加密點的數量,在程序的多個位置,多次檢驗加密鎖的存在,存取數據,破解者必須識別並修改每個加密點,隻要有漏掉的加密點,程序就不能正常執行。
2、增加複雜的循環或死循環等耗時操作,讓破解者難以跟蹤程序的執行。例如:
例1.1
RetCode = RY2_Find();3、提高效驗和讀寫加密鎖的隨機性,使破解者難以理解程序的結構和執行規律。隨機性是加密的重要思想,合理應用應用隨機性還可以增加程序的複雜度,有效對抗分析軟件和加密鎖模擬器。例如:
例1.2
int j = abs(random()/100);二、增加加密點的複雜度的基本方法是增加迷惑語句,並根據加密鎖本身的特點使用一些編程技巧,迷惑就是增加破解者找到加密點的難度,使程序難於理解。常見的有一下幾種方式:
1、不顯示出錯提示信息:這個技巧很重要,盡可能少地給用戶提示信息,因為這些蛛絲馬跡都可能導致解密者直接深入到保護的核心。比如,當檢測到破解企圖之後,不要立即給用戶提示信息,而是在係統的某個地方做一個記號,隨機地過一段時間後使軟件停止工作,或者裝作正常工作但實際上卻在所處理的數據中加入了一些垃圾。例如:
例2.1
可以改寫上麵的示例中2、加入複雜的循環和死循環,讓破解者難以跟蹤,發現加密點。這個方法與例1.1類似:
例2.2
for ( ;; ){3、隨機的讀寫和效驗加密鎖,在隨機的位置讀寫。這條技巧前麵已經多次應用,下麵舉例說說隨機位置的讀和寫:
例2.3
int i = abs(random()/5);4、把操作加密鎖和最終判斷程序執行是否合法的語句分開。這個技巧前麵的例子裏麵都用到了,就是不要在得到操作加密鎖的狀態後立即判斷狀態是否正常,而是在操作和判斷之間加入一定的代碼。
5、加入無用的讀寫,效驗鎖的語句或其他無效代碼。
6、在加密鎖內寫入讀出無效數據。當然不要應用真的應用這些數據。2.4、2.5、2.6常結合使用。
三、下麵結合rockey2的特點說說綜合的編程技巧。
1、使用加密鎖傳遞變量,把加密鎖內的存儲區當作臨時變量,變量需要賦值時,向鎖內寫入數據,需要應用變量的值時讀取加密鎖。
a.傳遞局部或全局變量舉例
例3.1
void func(){b. 傳遞函數的參數:
例3.2
普通的編程思路:2、把需要保存在磁盤上的數據全部或部分保存到加密鎖內.Rockey2提供了多達2560字節的存儲空間,可以把本來需要保存在磁盤上的重要的數據保存在加密鎖內,比如程序的配置信息,上次運行時得到的下次需要應用的數據等等
3、使用多線程技術。利用多線程調試的複雜性可以有效迷惑破解者和破解軟件。可在一個線程中尋找加密鎖,隨機讀寫數據,在另外的線程中應用這些信息。多線程技術也是加密鎖應用的重要技巧。
彩神彩票 © 1998-2024。
京ICP備34881403號
京公網安備11010802041807號