總結(jié)前人的經(jīng)驗,摸索著寫一點實用的方法,供大家參考:在這里不講加密算法,只討論結(jié)合軟硬件的加密方法,總結(jié)了一下大該有以下幾種:
一、加密方法
1、燒斷數(shù)據(jù)總線。這個方法我想應(yīng)不錯,但應(yīng)有損壞的風(fēng)險,聽說也能**。
2、芯片打磨改型,這個方法有一定作用,改了型號能誤導(dǎo),但同時也增加成本,解密者一般也能分析出來。
3、用不合格的單片機的的存儲器:這個方法聽起來不錯,值得一試。很多單片機有這種情況,有的是小容量改為大容量來用,**者應(yīng)很難發(fā)現(xiàn)。例:8031/8052 單片機就是8731/8752掩模產(chǎn)品中的不合格產(chǎn)品,內(nèi)部可能有ROM??砂?031/8052 當(dāng)8751/8752 來用。但使用時要測試可靠。
4、其他還有添加外部硬件電路的加密方法。但那樣增加成本,效果不一定好。
5、軟件加密,是一些防止別人讀懂程序的方法,單一的這種方法不能防止別人全盤復(fù)制。須配合其他的加密方法。
6、通過序列號加密,
這個方法當(dāng)你的產(chǎn)品是連接PC時或網(wǎng)絡(luò),我想是一個比較理想的方法。原理跟電話產(chǎn)品防偽標(biāo)志相近。就是在你的單片機中生成一個唯一的隨機長序列號,并加入復(fù)雜的特種算法,或加入你們重新編碼的企業(yè)信息在里面,每個芯片內(nèi)不同,復(fù)制者只能復(fù)制到一個序列號。這個方法不能防止復(fù)制,但能發(fā)現(xiàn)復(fù)制品,并可在升級或在網(wǎng)絡(luò)狀態(tài)控制它或讓他自毀。如果產(chǎn)品不聯(lián)機或不可升級,則這個方法完全無效,只能是在上法院時可當(dāng)作證據(jù),因為內(nèi)含特種算法破解者是無法知道的。
7、通過單片機唯一的特性標(biāo)識(不可修改)進(jìn)行加密
這個方法最好,能很好的防止復(fù)制。但大多單片機沒有唯一標(biāo)識。STC單片機里面含唯一標(biāo)識,但本人沒用過,下次一定要研究使用一下。理論上只要含唯一標(biāo)識是單片機都可實現(xiàn),ATMEL AVR系列單片大部分型號有RC校正字節(jié)(幾十個芯片才有一個相同,并且不可修改)能實現(xiàn)這個理想功能,可做到即使芯片內(nèi)程序被讀出也無法直接在另一個同型號的單片機上正常運行。并且如果用這個唯一標(biāo)識來生成含有加密算法的序列號,結(jié)合第6種方法,哪應(yīng)是最理想的加密方法。
以上方法應(yīng)都是一種加密的思路,各種方法可接合著用,6、7兩種方法是本人認(rèn)為比較合適,實現(xiàn)起來比較容易的方法。后面將重點介紹兩種加密方式的實現(xiàn)方法。
二、序列號加密實現(xiàn)方法
1、原理
就是在存儲器某個區(qū)塊放入一個唯一的序列號(長一點,無規(guī)律),每個芯片不同。原理跟電話產(chǎn)品防偽標(biāo)志相近
| PC機 | 《------------》| 帶自定義算法序列號單片機系統(tǒng) |
控制方法:
1、PC根據(jù)傳回來的序列號根據(jù)算法判斷是否合法,合法就運行,不合法處理它。當(dāng)然,如果是**的序列號,可自毀。
2、單片機內(nèi)部的序列號經(jīng)加密算法處理,單片機系統(tǒng)同樣要防止軟件被更改,可在單片機內(nèi)部加入CRC等數(shù)據(jù)校驗。一般情況下,序列號如果不合算法,單片機系統(tǒng)應(yīng)讓程序運行出錯,這樣**者一般不會去修改序列號,如果修改了也沒關(guān)系,因為PC還能判斷是否合法。
3、序列號傳送時可采用雙向加密算法認(rèn)證,相當(dāng)于銀卡的數(shù)據(jù)交換方式。
傳送過程:
PC發(fā)送隨機SEED數(shù)據(jù)----》單片機系統(tǒng)跟據(jù)隨機SEED算出加密的序列號-----》PC根據(jù)算法判斷序列號是否合法這樣在序列號的傳送過程中,數(shù)據(jù)每次不同,解密者無法看到序列號的明碼。這樣PC軟件他同樣不容易更改。
注意:加密算法可以很簡單理解一個為異或,當(dāng)然算法由你自已隨意定,反正目的不能上別人一看軟件就懂。**者只是**一個產(chǎn)品只能得到一個序列號,即使序列號是明碼,他也只能知道是一個。如他隨便修改一個序列號一般情況就不符合算法,除非他看懂你的軟件算法,我想這是一般解密者最不愿意做的事情。
單片機系統(tǒng)的量產(chǎn):
產(chǎn)生這樣的序列號,單片機系統(tǒng)如何生成?如果用手工一個個去計算調(diào)入,得重新編譯是不可能的事情。如果編寫一個軟件生成數(shù)據(jù)放入到HEX文件中,那樣不說工作量好大,編程時還必須一次次裝入HEX文件,量產(chǎn)同樣無法完成。這個可于
MiniPro TL866 編程器完成。
編程器的介紹可查看//www.autoelectric.cn/minipro
TL866編程器有個自動編號功能,可利用DLL動態(tài)庫調(diào)用實現(xiàn)任意的序列號。如何使用DLL設(shè)定序列號,可參考編程器安裝包內(nèi)的DLL實例,內(nèi)有詳細(xì)說明。后面講的用單片機唯一的特性標(biāo)識進(jìn)行加密也用到DLL調(diào)用,基本大同小異。
經(jīng)過這樣的加密,達(dá)到一個目的,就是解密者必須修改你的軟件后才能放心使用,但是每次升級同樣會受你控制,好像微軟隨時可以黑你屏一樣的道理,否則可能隨時會被你宰了!!但這種方法只適合連接PC或網(wǎng)絡(luò)的系統(tǒng)。
三、用單片機唯一的特征標(biāo)識進(jìn)行加密
加密原理:
單片機必須有唯一標(biāo)志,單片機程序內(nèi)只要判斷是否是這個標(biāo)志,就可防止程序直接復(fù)制使用。理論上可以做到很難破解,本人認(rèn)為是最有效又實用的方法。
達(dá)到目的:解密者最不愿意做的事讓他必須做。
一般大部分搞單片機解密的都是暴力破解,因為這個最容易,只要牚握技巧,有設(shè)備,工藝熟練就可了,不用太強的專業(yè)知識。如果復(fù)制后,程序無法運行,那就蒙了,因為這個時候就要去看匯編語言了,我想信有很多匯編高手,能很容易**。但我也同時認(rèn)為,怎么多型號的單片機,匯編指令差別好大,每一種單片機的匯編都很熟的人應(yīng)不多了。所以這會大大增加**難度。如果一個加密設(shè)計好的軟件,跟據(jù)單片機的唯一特征字來加密,有時他可能不得不看懂里面的加密算法。這樣加密目的就達(dá)到了。
開發(fā)人員需要做的事:
有了唯一特征字,并不是加密萬無一失了。如果你只是在程序中只用一條語句判斷,是不是這個芯片的特征字,則程序被讀出后,解密者只要簡單的修改程序,直接跳過判斷語句。可能只要幾分鐘就解決了。所以在程序要加入加密算法,盡量不用IF判斷語句??捎米映绦蛘{(diào)用地址來參與特征字的加密運算等等方法,如何防反匯編及修改軟件等不在這里討論,網(wǎng)上可以找到有關(guān)這方面的很多資料。
-
單片機
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635308 -
加密
+關(guān)注
關(guān)注
0文章
304瀏覽量
23920
原文標(biāo)題:總結(jié)幾種常用的單片機加密方法
文章出處:【微信號:WW_CGQJS,微信公眾號:傳感器技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論