軟件加密技巧

簡單加密技巧:
1. 賦值和判斷分開 參考強度值 :1

在賦值和對值的判斷之間,可以插入很多的其他操作,讓解密者難以猜到二者之間的聯繫。對於全局變量,可以在別的函數塊中做判斷

2. 多次判斷值 參考強度值 :2

對於一個值,可以在不同的地方做判斷,可以做很多的判斷,讓解密者難以屏 蔽所有的判斷操作,而只要有一個地方判斷結果不對就可以認爲整個結果是不對的。

3. 多次賦值 參考強度值 :3

對於一個返回值,可以多次賦值給它,可以用複雜循環來做,讓解密者無法跟蹤該值的變化。

 

4. 賦多個 值參考強度值 :3

返回的結果可以賦給很多的值,讓解密者難以跟蹤所有的這些返回值。而任意 一個返回值不正確,都可以認爲結果不正確。

 

5. 使用返回值 參考強度值 :4

其實做判斷是一種不好的方法,容易被識破和屏蔽。直接使用結果可以更好地讓應用軟件和加密軟件結合。如下例中,如果返回值不正確,圓周率肯定也不正確,程序運行的結果也就會混亂了。

 

6. 使用狗中常量 參考強度值 :6

在狗中放置一些常量,要使用時從狗中讀出使用。比如路徑名,文件名,一些常用數據等。

 

7. 使用多個變換結果 參考強度值 :10-20

變換的結果可以看成是一種可預知的返回值,隨着輸入的不同,輸出也會不同,第頁 96宏狗開發商手冊進行多次變換,並且使用變換的結果。

 

8. 關鍵加密點不要使用系統的比較函數進行比較 參考強度值 :10-20

不要使用字符串和硬件狗中的數據進行簡單的比較,同時最好不要使用系統的比較函數來進行比較,比如 strncmp、memcmp、radom、getsystemtime、messagebox等函數,最好自己編寫比較函數。因爲黑客很容易使用靜態反編譯工具識別出此類函數。

 

9. 儘量在加密點附近不要調用一些敏感的系統函數 參考強度值 :10-20

例如: random、getsystemtime、messagebox、exitprocess 等函數。

 

 

中級技巧:
10. 隨機執行 參考強度值 :10

解密者往往是通過大工作量地跟蹤程序以發現加密點的,這需要不停地運行程序,以發現規律。在程序中設置隨機量可以讓加密者糊塗。這種隨機可以是隨機對返回值進行判斷,可以是隨機的賦值,也可以是程序隨機地執行。

一些解密的高手可能會注意到程序執行的隨機性,從而屏蔽 Random 函數。下面幾條技巧也用到隨機量,如果可能,可以使用自己編寫的隨機數發生器。隨機發生器的初始化可以取如系統時間這樣的隨機值。

 

11. 隨機讀 參考強度值 :15

可以隨機地從狗中讀取一些內容,但是除非需要,這些內容可以不使用。地址、長度都可以是隨機的。

 

12. 隨機寫 參考強度值 :20

可以隨機地向狗中寫入一些隨機內容,地址、長度都可以是隨機的。但是要注意不要覆蓋狗中有用的內容。較好的辦法是在狗中規定一個特定數據文件區域用於隨機寫,並使隨機寫的地址和長度不會越界。在下面的例子中,單元 80-99 單元是不使用的。

 

13. 隨機寫然後讀出 參考強度值 :35

這其實是上面兩個技巧的配對使用。要注意的是讀和寫要從程序的運行邏輯上分離遠一些,中間可以加入其他對狗的操作,這樣解密者極難看出兩者的聯繫。

 

14. 隨機變換 參考強度值 :35

隨機變換是指做變換的內容和長度可以是隨機的。而返回的變換結果可以不使用。

 

15. 隨機變換並使用結果 參考強度值 :20-100

這個技巧可能比較難於理解。使用方法是這樣的:假如我們要使用常數 1 ,我們可以先產生一個隨機內容 A ,把 A 保存起來,按照技巧 14 用 A 做一次隨機變換得到變換結果 B ,再把 B 同我們要得到的常數做一次運算,這裏比如是簡單的加法,得到結果 C ,那麼肯定 C = B + 1 ,再把 C 也保存起來。在程序的另外一個地方,我們再用保存的 A 再做一次變換,變換的結果肯定與上次的 B 相同,同保存的 C 做一次反運算,這裏是減法,會得到結果 D = C - B = 1 。這時就可以使用 D 了, D 就是我們要用的常量。要注意這個技巧也是有兩部分組成,它基於以下的原理:即使變換的結果是不可預知的,但是兩次相同的變換的結果肯定是一樣的。有人可能會覺得中間那步運算和反運算是多餘的,其實不然。

 

16. 使用狗做全局變量 參考強度值 :40

可以把一些變量放在狗中,使用狗來做傳遞變量。而且這些變量還是全局的。甚至下一次運行程序時還在。

 

17. 隨機加密 參考強度值 :40

可以使用宏狗中提供的加解密函數對隨機的數據進行加解密和比較。

 

18. 定時查狗 參考強度值 :40

可以在需要加密的程序中,根據日期來判斷是否需要查狗。比如說,在2003-12-26 調用某個加密接口函數,然後在 2004-1-26 以後又調用某個加密接口函數,或者每天的某個時間調用加密接口函數。

 

19. 加密點分散原則 參考強度值 :40

如果開發商的軟件包括很多的模塊,比如說 exe 、 dll 、 ocx 等子程序,建議不要僅僅在主程序中使用加密函數或者外殼工具,最好其它的模塊也使用加密狗進行加第頁 98宏狗開發商手冊密。

 

20. 使用自定義算法文件 參考強度值 :20-150

開發商可以自己編寫算法文件,然後在自己的程序中調用,需要注意的是需要保證輸入 / 輸出的參數最好每次變化,如果輸入參數固定,則此方法不能保證有很高的加密強度。

 

 

   
   
高級技巧:
21. 自校驗 參考強度值 :20-150

可以使用宏狗中提供的簽名函數對核心模塊文件的一部分簽名,如果黑客修改了核心模塊的文件,則獲取到的簽名結果將會和以前獲取的簽名不一致。

 

22. 多線程 參考強度值 :20-150

利用高級操作系統的多線程技術可以很好地迷惑解密者和解密工具。基本思路是這樣的:在一個線程中對狗操作,在另外一個線程中判斷和使用。

 

23. 隊列 參考強度值 :40-60

可以建造一個隊列以管理返回值和返回結果,管理的方法可以複雜一些,而程序的執行是依賴於這個隊列的。當然不用隊列而使用其他的數據結構也是一樣的,甚至效果更好。有心的讀者可能注意到本技巧也可以和上面的技巧結合起來。一個簡單的使用隊列進行返回值管理的例子如下圖所示:

在上圖中,有一個初始化了的隊列,共有 6 個單元,初始數據爲 148888 ,當發生的返回值不爲 0 時,將 205429 賦給 Pin ,並使隊列移動一個單元。在 Pout 處檢測被推出的數據,當爲 148888 時不做動作,當爲 205429 時即認爲非法。

 

 

其他加密技巧:
24. 多模塊軟件或多套軟件共用一隻宏狗  

開發商可以將宏狗的文件系統合理的分配給不同的模塊或軟件使用 , 可以實現多模塊軟件或多套軟件共用一隻狗。

 

25. 限制軟件使用次數及使用時間或某些模塊無法使用  

開發商可以通過訪問宏狗的許可證文件方便地實現軟件使用次數和模塊使用期限的限制。

 

26. 遠程升級更新軟件  

加密軟件的運行依賴於狗中的數據。軟件開發商只需提供給最終客戶更新狗數據、算法的程序,將狗標誌字節等內容重新初始化,使狗滿足升級加密軟件的運行條件即可。更新狗的代碼也可直接做在升級加密軟件中。

使用相同的方式也可將試用軟件升級至完全版本,或增加最終客戶的使用次數、時間。也可將某些功能、模塊或使用次數、時間的限制取消,授權給最終客戶使用。

我們提供了遠程升級的解決方案,請參看 /Utility/RUS 目錄下的工具程序。

 

27. 安裝加密軟件時檢查狗(無狗不能安裝 )  

軟件開發商在加密軟件的安裝程序中可以通過調用狗的模塊進行查狗或使第用外殼工具加密安裝程序,使用方式與應用程序相同。注意這時應先安裝狗的驅動程序,然後再對狗操作。

 

 

   
總結:  

在程序中綜合使用以上各種加密方法可以很好地保護您的軟件。參考強度值僅供參考,與使用者的具體使用方法有很大關係。事實上也並不一定要追求高強度值的技巧,低強度參考值的技巧只要使用巧妙,而且多次使用,也可以達 到很好的效果。而高級的技巧一般難於實現,使用和調試都比較困難。開發商同時要注意,對宏狗操作是要耗時的,延時可能在 50 - 200 毫秒之間,與所讀寫字節的長度有關。此外,使用宏狗提供的 AS 技術,即程序中調用 API 函數和 SHELL 加密EXE 同時使用,可以有更好的加密強度。

 
發佈了29 篇原創文章 · 獲贊 1 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章