close
總結前人的經驗,摸索着寫一點實用的方法,供大家參考:在這裡不講加密算法,只討論結合軟硬件的加密方法,總結了一下大該有以下幾種:

一、加密方法
1、燒斷數據總線。這個方法我想應不錯,但應有損壞的風險,聽說也能**。
2、芯片打磨改型,這個方法有一定作用,改了型號能誤導,但同時也增加成本,解密者一般也能分析出來。
3、用不合格的單片機的的存儲器:這個方法聽起來不錯,值得一試。很多單片機有這種情況,有的是小容量改為大容量來用,**者應很難發現。例:8031/8052 單片機就是8731/8752掩模產品中的不合格產品,內部可能有ROM。可把8031/8052 當8751/8752 來用.但使用時要測試可靠。
4、其他還有添加外部硬件電路的加密方法。但那樣增加成本,效果不一定好。
5、軟件加密,是一些防止別人讀懂程序的方法,單一的這種方法不能防止別人全盤複製。須配合其他的加密方法。
6、通過序列號加密
這個方法當你的產品是連接PC時或網絡,我想是一個比較理想的方法。原理跟電話產品防偽標誌相近。就是在你的單片機中生成一個唯一的隨機長序列號,並加入複雜的特種算法,或加入你們重新編碼的企業信息在裡面,每個芯片內不同,複製者只能複製到一個序列號。這個方法不能防止複製,但能發現複製品,並可在升級或在網絡狀態控制它或讓他自毀。如果產品不聯機或不可升級,則這個方法完全無效,只能是在上法院時可當作證據,因為內含特種算法破解者是無法知道的。
7、通過單片機唯一的特性標識(不可修改)進行加密
這個方法最好,能很好的防止複製。但大多單片機沒有唯一標識。STC單片機裡面含唯一標識,但本人沒用過,下次一定要研究使用一下。理論上只要含唯一標識是單片機都可實現,ATMEL AVR系列單片大部分型號有RC校正字節(幾十個芯片才有一個相同,並且不可修改)能實現這個理想功能,可做到即使芯片內程序被讀出也無法直接在另一個同型號的單片機上正常運行。並且如果用這個唯一標識來生成含有加密算法的序列號,結合第6種方法,哪應是最理想的加密方法。
以上方法應都是一種加密的思路,各種方法可接合着用,6、7兩種方法是本人認為比較合適,實現起來比較容易的方法。後面將重點介紹兩種加密方式的實現方法。

二、序列號加密實現方法
1、原理
就是在存儲器某個區塊放入一個唯一的序列號(長一點,無規律),每個芯片不同。原理跟電話產品防偽標誌相近
| PC機 | <------------>| 帶自定義算法序列號單片機系統 |
控制方法:
1、PC根據傳回來的序列號根據算法判斷是否合法,合法就運行,不合法處理它。當然,如果是**的序列號,可自毀。
2、單片機內部的序列號經加密算法處理,單片機系統同樣要防止軟件被更改,可在單片機內部加入CRC等數據校驗。一般情況下,序列號如果不合算法,單片機系統應讓程序運行出錯,這樣**者一般不會去修改序列號,如果修改了也沒關係,因為PC還能判斷是否合法。
3、序列號傳送時可採用雙向加密算法認證,相當於銀卡的數據交換方式。
傳送過程:
PC發送隨機SEED數據---->單片機系統跟據隨機SEED算出加密的序列號----->PC根據算法判斷序列號是否合法這樣在序列號的傳送過程中,數據每次不同,解密者無法看到序列號的明碼。這樣PC軟件他同樣不容易更改。
注意:加密算法可以很簡單理解一個為異或,當然算法由你自已隨意定,反正目的不能上別人一看軟件就懂。**者只是**一個產品只能得到一個序列號,即使序列號是明碼,他也只能知道是一個。如他隨便修改一個序列號一般情況就不符合算法,除非他看懂你的軟件算法,我想這是一般解密者最不願意做的事情。
單片機系統的量產:
產生這樣的序列號,單片機系統如何生成?如果用手工一個個去計算調入,得重新編譯是不可能的事情。如果編寫一個軟件生成數據放入到HEX文件中,那樣不說工作量好大,編程時還必須一次次裝入HEX文件,量產同樣無法完成。這個可於MiniPro TL866 編程器完成。
編程器的介紹可查看:www.autoelectric.cn/minipro
TL866編程器有個自動編號功能,可利用DLL動態庫調用實現任意的序列號.如何使用DLL設定序列號,可參考編程器安裝包內的DLL實例,內有詳細說明。後面講的用單片機唯一的特性標識進行加密也用到DLL調用,基本大同小異。
經過這樣的加密,達到一個目的,就是解密者必須修改你的軟件後才能放心使用,但是每次升級同樣會受你控制,好像微軟隨時可以黑你屏一樣的道理,否則可能隨時會被你宰了!!但這種方法只適合連接PC或網絡的系統。
三、用單片機唯一的特徵標識進行加密
加密原理:
單片機必須有唯一標誌,單片機程序內只要判斷是否是這個標誌,就可防止程序直接複製使用。理論上可以做到很難破解,本人認為是最有效又實用的方法。
達到目的:解密者最不願意做的事讓他必須做。
一般大部分搞單片機解密的都是暴力破解,因為這個最容易,只要牚握技巧,有設備,工藝熟練就可了,不用太強的專業知識。如果複製後,程序無法運行,那就蒙了,因為這個時候就要去看匯編語言了,我想信有很多匯編高手,能很容易**。但我也同時認為,怎麼多型號的單片機,匯編指令差別好大,每一種單片機的匯編都很熟的人應不多了。所以這會大大增加**難度。如果一個加密設計好的軟件,跟據單片機的唯一特徵字來加密,有時他可能不得不看懂裡面的加密算法。這樣加密目的就達到了。
開發人員需要做的事:
有了唯一特徵字,並不是加密萬無一失了。如果你只是在程序中只用一條語句判斷,是不是這個芯片的特徵字,則程序被讀出後,解密者只要簡單的修改程序,直接跳過判斷語句。可能只要幾分鐘就解決了。所以在程序要加入加密算法,儘量不用IF判斷語句。可用子程序調用地址來參與特徵字的加密運算等等方法,如何防反匯編及修改軟件等不在這裡討論,網上可以找到有關這方面的很多資料。

來源:網絡
版權歸原作者所有,如有侵權,請聯繫刪除。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()