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