一般說(shuō)來(lái),AVR與傳統(tǒng)類(lèi)型的單片機(jī)相比,在IC芯片解密技術(shù)中除了必須能實(shí)現(xiàn)原來(lái)的一些基本的功能,其在結(jié)構(gòu)體系、功能部件、性能和可靠性等多方面有很大的提高和改善。能破解的AVR單片機(jī)都是小芯片/小程序(直接說(shuō)就是模仿其功能而新開(kāi)發(fā)新程序),因此解密難度都是不是很大。因而本文探討的就是AVR單片機(jī)解密技術(shù)分析,以及如何防止解密。
AVR單片機(jī)解密技術(shù)分析
AVR單片機(jī)攻擊者借助專(zhuān)用設(shè)備或者自制設(shè)備,利用單片機(jī)芯片設(shè)計(jì)上的漏洞或軟件缺陷,通過(guò)多種技術(shù)手段,就可以從芯片中提取關(guān)鍵信息,獲取單片機(jī)內(nèi)程序,這就是AVR芯片解密。
針對(duì)AVR系列單片機(jī)解密,世紀(jì)芯集成電路下的芯片解密實(shí)驗(yàn)室均進(jìn)行了系統(tǒng)化的技術(shù)研究和破解,在AVR單片機(jī)解密領(lǐng)域中,已取得重大突破,擁有一系列突出的研究成果,專(zhuān)業(yè)提供高效、可靠、便捷的單片機(jī)解密方案。
AVR單片機(jī)是Atmel公司于1997年推出的RISC單片機(jī)。RISC(精簡(jiǎn)指令系統(tǒng)計(jì)算機(jī))是相對(duì)于CISC(復(fù)雜指令系統(tǒng)計(jì)算機(jī))而言的。RISC并非只是簡(jiǎn)單地去減少指令,而是通過(guò)使計(jì)算機(jī)的結(jié)構(gòu)更加簡(jiǎn)單、合理而提高運(yùn)算速度的。RISC優(yōu)先選取使用頻率最高的簡(jiǎn)單指令,避免復(fù)雜指令,并固定指令寬度,減少指令格式和尋址方式種類(lèi),從而縮短指令周期,提高運(yùn)行速度。由于AVR采用了RISC的這種結(jié)構(gòu),使AVR系列單片機(jī)都具備了1MIPS/MHz(百萬(wàn)條指令每秒/兆赫茲)的高速處理能力。
AVR單片機(jī)具有多個(gè)系列,包括ATtiny、AT90、ATmega,每個(gè)系列又有多種產(chǎn)品,它們?cè)诠δ芎痛鎯?chǔ)器容量等方面有很大的差異,但基本結(jié)構(gòu)和原理都類(lèi)似,而且編程方也相同。AVR單片機(jī)系列齊全,可適用于各種不同的場(chǎng)合,AVR單片機(jī)共分為三個(gè)系列:低檔:ATtiny,中檔:AT90,高檔:ATmega。
AVR單片機(jī)吸收了DSP雙總線的特點(diǎn),采用Harvard總線結(jié)構(gòu),因此單片機(jī)的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器是分離的,且可對(duì)具有相同地址的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器進(jìn)行獨(dú)立的尋址。在AVR單片機(jī)中,CPU執(zhí)行當(dāng)前指令時(shí)會(huì)取出將要執(zhí)行的下一條指令放入寄存器中,從而可以避免傳統(tǒng) MCS51系列單片機(jī)中多個(gè)指令周期的出現(xiàn)。
傳統(tǒng)的MCS51系列單片機(jī)的所有數(shù)據(jù)處理都是基于一個(gè)累加器,因此累加器與程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器之間的數(shù)據(jù)轉(zhuǎn)換就成了單片機(jī)的瓶頸,在AVR單片機(jī)中,寄存器由32個(gè)通用工作寄存器組成,且任何一個(gè)寄存器都可以充當(dāng)累加器,從而有效地避免了累加器的瓶頸效應(yīng),提高系統(tǒng)性能。
AVR單片機(jī)具有良好的集成性,且都具備在線編程接口,Mega系列還具備JTAG仿真和下載功能,都含有片內(nèi)看門(mén)狗電路、片內(nèi)程序Flash、同步串行接口SPI,多數(shù)的AVR單片機(jī)還內(nèi)嵌了AD轉(zhuǎn)換器、EEPROM、摸擬比較器、PWM 定時(shí)計(jì)數(shù)器等多種功能。AVR片機(jī)的I/O接口具有很強(qiáng)的驅(qū)動(dòng)能力,灌電流可直接驅(qū)動(dòng)繼電器、LED等器件,從而省去驅(qū)動(dòng)電路,節(jié)約系統(tǒng)成本。
如何防止AVR被解密
AVR具有上手入門(mén)快,開(kāi)發(fā)方便簡(jiǎn)單的特點(diǎn),但要充分體會(huì)和發(fā)揮AVR的優(yōu)點(diǎn),還需要應(yīng)用工程師本身的硬軟件設(shè)計(jì)開(kāi)發(fā)能力IC芯片解密的不斷學(xué)習(xí)、實(shí)踐提高。
“外行看熱鬧,內(nèi)行看門(mén)道”,對(duì)于有一定基礎(chǔ)的嵌入式和單片機(jī)系統(tǒng)設(shè)計(jì)開(kāi)發(fā)的工程師,不妨先簡(jiǎn)單嘗試一下AVR。
開(kāi)發(fā)環(huán)境與工具:PC+下載線+實(shí)際的系統(tǒng)板
PC上的開(kāi)發(fā)軟件:
AVR Studio(Free)匯編+匯編調(diào)試+高級(jí)語(yǔ)言調(diào)試+軟件仿真
ICC、CVAVR、BASCOM-AVR 高級(jí)語(yǔ)言程序開(kāi)發(fā)+程序下載。其中一個(gè)購(gòu)買(mǎi)正版全功能,作為主要的開(kāi)發(fā)環(huán)境,其它使用DEMO版,作為輔助及參考。
AVR ISP下載線:
STK200 and STK200+ and STK300 ISP programmer。通過(guò)PC的打印機(jī)口,采用ISP技術(shù)將系統(tǒng)運(yùn)行代碼(HEX、BIN)和數(shù)據(jù)寫(xiě)入AVR芯片的Flash和EEProm中,編程AVR的配置熔絲位和加密位。支持決大多數(shù)的AVR芯片、以及ATMEL的51兼容芯片89S8252、89S52等。在ICC、CVAVR、BASCOM-AVR、BASCOM-8051中都內(nèi)含對(duì)該下載線的支持程序。免費(fèi)專(zhuān)用的下載程序:SLISP、PonyProg2000等。
盡量不使用仿真器的建議:
在開(kāi)發(fā)和調(diào)試系統(tǒng)程序、IC芯片解密時(shí),有許多人完全依賴(lài)于IC芯片解密,一旦離開(kāi)了仿真器時(shí)就感覺(jué)無(wú)從下手。其實(shí),由于AVR的Flash存貯器可方便的使用ISP技術(shù)在線的多次擦寫(xiě),因此建議盡量不使用(依賴(lài))仿真器來(lái)開(kāi)發(fā)和調(diào)試程序。
在實(shí)際開(kāi)發(fā)過(guò)程中,程序的調(diào)試可以從下幾方面入手:
現(xiàn)在的高級(jí)語(yǔ)言編譯器(如C編譯器)可以產(chǎn)生效率很高的機(jī)器代碼,因此建議大家盡量使用高級(jí)語(yǔ)言編寫(xiě)系統(tǒng)程序。
使用Atmel公司提供AVR Studio軟件模擬仿真環(huán)境,以及其他的軟件模擬仿真環(huán)境(BASCOM-AVR)。
盡可能使用高級(jí)語(yǔ)言編寫(xiě)系統(tǒng)程序。
利用目標(biāo)板上的LED、LCD或異步串口。見(jiàn)附件“沒(méi)有仿真器的情況下如何開(kāi)發(fā)AVR”的介紹。
提高硬件設(shè)計(jì)的合理性:
盡量合理和充分使用AVR片內(nèi)的資源,如EEPROM、A/D、內(nèi)部的RC振蕩源。
盡量采用串口通信連接的外圍器件,大容量的存儲(chǔ)器、LCD控制器、打印機(jī)、不用8279(LED數(shù)碼管+鍵盤(pán))而使用7279等。除了必須外擴(kuò)RAM(如語(yǔ)音和圖象),一般不提倡使用并行擴(kuò)展(573+譯碼電路),減小硬件和連線以及PCB板上錯(cuò)誤的出現(xiàn)概率,同時(shí)也提高了系統(tǒng)的可靠性。并行擴(kuò)展向串行擴(kuò)展是發(fā)展趨勢(shì)?,F(xiàn)在有大量的新的外圍器件采用高速的串行接口,如A/D、D/A、RTC、存儲(chǔ)器等。
盡量使用以及在目標(biāo)板上預(yù)留ISP程序下載接口,或使用IAP技術(shù)。
優(yōu)點(diǎn):ISP接口與I/O的兼容性比JETAG好。
缺點(diǎn):不能在線調(diào)試
注意和掌握AVR配置熔絲位的使用:
盡量合理采用高級(jí)語(yǔ)言設(shè)計(jì)編寫(xiě)系統(tǒng)程序。有許多人認(rèn)為使用匯編寫(xiě)程序比較精簡(jiǎn),而用高級(jí)語(yǔ)言開(kāi)發(fā)會(huì)浪費(fèi)很多程序空間,其實(shí)這是一種誤解。對(duì)一個(gè)有經(jīng)驗(yàn)的,而且非常熟悉某種單片機(jī)的匯編高手而言,他是能寫(xiě)出比高級(jí)語(yǔ)言更精簡(jiǎn)的代碼。而對(duì)匯編不是很熟的開(kāi)發(fā)者、或突然更換了一種新的單片機(jī),您能保證一定可以寫(xiě)出比高級(jí)語(yǔ)言更簡(jiǎn)練的代碼嗎?
現(xiàn)在的高級(jí)語(yǔ)言編譯器(如C編譯器)已可以產(chǎn)生代碼效率很高的機(jī)器代碼,因此建議大家能用高級(jí)語(yǔ)言實(shí)現(xiàn)的程序盡可能使用高級(jí)語(yǔ)言寫(xiě),在對(duì)速度和時(shí)序要求特嚴(yán)的場(chǎng)合可以采用混合編程的方法來(lái)解決。
更深入和全面的掌握各種串行通信協(xié)議的規(guī)程:
嵌入式系統(tǒng)目前以大量的使用串行接口外圍芯片和各種通信接口,如RS232、兩線(I2C)、三線(SPI)、單總線、USB、CAN、TCP/IP等。開(kāi)發(fā)人員和程序員應(yīng)了解低層協(xié)議,熟悉硬件怎樣和如何實(shí)現(xiàn)低層協(xié)議,如何定義可靠的上層應(yīng)用協(xié)議,以及低層協(xié)議驅(qū)動(dòng)同上層應(yīng)用協(xié)議之間的接口設(shè)計(jì)(中間層軟件的實(shí)現(xiàn))等。
硬件工程師的軟件編寫(xiě)能力要提高,采用標(biāo)準(zhǔn)程序編寫(xiě)方式、完善的軟件整體框架的設(shè)計(jì)、良好的數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu)系統(tǒng)。(計(jì)算機(jī)軟件專(zhuān)業(yè)的程序設(shè)計(jì)員對(duì)硬件不熟悉、大部分是在操作系統(tǒng)支持下編寫(xiě)軟件,對(duì)低層接口和協(xié)議的驅(qū)動(dòng)層以及接口也不了解,往往也編寫(xiě)不出好的單片機(jī)系統(tǒng)程序。)
通信接口的編寫(xiě)應(yīng)盡量
。采用中斷+緩沖區(qū),
。分層+結(jié)構(gòu)化設(shè)計(jì),
。盡量不使用輪循方式(降低AVR的效率)。參見(jiàn)URAT(RS232)驅(qū)動(dòng)+中間層軟件示例。
采用好的系統(tǒng)設(shè)計(jì)模式:
盡量不使用傳統(tǒng)的前后臺(tái)(中斷)系統(tǒng)設(shè)計(jì)模式,任務(wù)之間相互影響和干擾,無(wú)法定時(shí)操作。如設(shè)計(jì)一個(gè)采用動(dòng)態(tài)掃描方式驅(qū)動(dòng)的8位LED數(shù)碼管顯示+動(dòng)態(tài)掃描的4*4矩陣鍵盤(pán)。
采用TimeTip+狀態(tài)機(jī)設(shè)計(jì)+CASE結(jié)構(gòu),實(shí)現(xiàn)多任務(wù)并行運(yùn)行系統(tǒng)設(shè)計(jì)方法?;驎r(shí)間觸發(fā)式的系統(tǒng)設(shè)計(jì)。(見(jiàn):《時(shí)間觸發(fā)嵌入式系統(tǒng)設(shè)計(jì)模式》中國(guó)電力出版社 2004.6)
移植小型嵌入式操作系統(tǒng),如UCOS-II。在網(wǎng)上有些免費(fèi)的基于AVR的簡(jiǎn)潔的操作系統(tǒng)。
提高C語(yǔ)言的編程能力和軟件應(yīng)用水平:
熟悉和用好C中的數(shù)據(jù)結(jié)構(gòu)體、指針應(yīng)用、內(nèi)存管理等較高級(jí)的應(yīng)用。
熟悉和了解你所使用的高級(jí)語(yǔ)言開(kāi)發(fā)平臺(tái)的特點(diǎn)。這些平臺(tái)是針對(duì)某一類(lèi)處理器的,包含許多特殊的不兼容的語(yǔ)句和擴(kuò)展的結(jié)構(gòu)、語(yǔ)句、函數(shù)等。盡管使用方便,但由于其不透明性和時(shí)間的不確定性,因此要合理使用。如C中的getchar()、putchar()等。
AVR有多個(gè)開(kāi)發(fā)平臺(tái),每個(gè)都有其特點(diǎn)和不足。能夠綜合使用這些平臺(tái),相互互補(bǔ),能夠提高開(kāi)發(fā)效率。如通過(guò)ICC、CVAVR的程序生成器CodeWizard學(xué)習(xí)和了解AVR的硬件設(shè)置,簡(jiǎn)化計(jì)算,快速的生成程序基本模塊,如“一個(gè)URAT(RS232)低層驅(qū)動(dòng)+中間層軟件示例”。
防止AVR解密方法
AVR單片機(jī)采用精簡(jiǎn)指令集,以字作為指令長(zhǎng)度單位,將內(nèi)容豐富的操作數(shù)與操作碼安排在一字之中(指令集中占大多數(shù)的單周期指令都是如此),取指周期短,又可預(yù)取指令,實(shí)現(xiàn)流水作業(yè),故可高速執(zhí)行指令。當(dāng)然這種速度上的升躍,是以高可靠性為其后盾的。
AVR芯片的防止解密方法如下:
1.讓原芯片廠家將芯片的封裝腳位全部調(diào)換;
2.將HTXXXX的印字印為MDTXXXX的,將PICXXX的印為ATXXXX;
3.使用四層板(故意多走一些線);
4.用環(huán)氧樹(shù)脂酶(xxx酶:可增加硬度,如將其弄開(kāi)后芯片就報(bào)廢了)將測(cè)試好的線路板密封上;
5.將芯片的程序里加入芯片保護(hù)程序,EMXXX如2腳有電壓輸入時(shí)就將所有芯片的內(nèi)容清除;
6.最好使用裸片來(lái)做產(chǎn)品;
AVR單片機(jī)解密后的熔絲配置
AVR單片機(jī)內(nèi)部有多組與器件配置和運(yùn)行環(huán)境相關(guān)的的熔絲位,這些熔絲位非常重要,用戶可以通過(guò)設(shè)定和配置熔絲位使AVR單片機(jī)局部不同的特性,以更加適合實(shí)際應(yīng)用。但是由于需要對(duì)熔絲位進(jìn)行配置,給初學(xué)者帶來(lái)一些不太好理解的地方,對(duì)于單片機(jī)解密以后,在燒錄程序的時(shí)候,也要對(duì)熔絲位配置,如果配置不對(duì)了,可能不工作或功能發(fā)生變化。所有在燒錄解密后的文件的時(shí)候一定要對(duì)熔絲位進(jìn)行配置,由于支持AVR的工具非常多,而不同的工具的軟件的界面不同,所以在做AVR單片機(jī)解密前最好告訴解密公司自己使用的是什么工具,讓芯片解密公司按照自己的工具的界面做配置圖,這樣就方便了解密以后去燒寫(xiě)程序,不過(guò)自己也可以用解密公司提供的樣片去讀熔絲位配置,有的工具直接讀芯片就可以,有的是讀配置等等,然后將讀出的配置保存。
如果是剛出廠的單片機(jī),默認(rèn)的是使用內(nèi)部1MHZ的RC振蕩作為系統(tǒng)時(shí)鐘,而且JTAG口處于允許方式。對(duì)于AVR熔絲位要起碼要明確以下幾點(diǎn)。
AVR熔絲可以多次編程,不是一次性的OTP熔絲。
熔絲位的配置可以通過(guò)并行方式、ISP方式和JTAG串行方式實(shí)現(xiàn)。
AVR芯片加密鎖定后(LB2/LB1=1/0,0/0)不能通過(guò)任何方式讀取芯片內(nèi)部FLASH和EEPROM中的數(shù)據(jù),但熔絲位的狀態(tài)任然可以讀取,只是不能修改配置。
芯片擦除命令是將FLASH和EEPROM中的數(shù)據(jù)清除,并同時(shí)將兩位鎖定位狀態(tài)配置成無(wú)鎖定狀態(tài)(LB2/LB1=1/1),但芯片擦除命令并不改變其他熔絲位的狀態(tài)。
下載編程的正確步驟是:在芯片無(wú)鎖定狀態(tài)下對(duì)芯片下載運(yùn)行代碼和數(shù)據(jù),配置相關(guān)熔絲位,最后配置芯片的加密位置。
芯片被加密鎖定后,如果發(fā)現(xiàn)熔絲位及配置不對(duì),則必須使用芯片擦除命令,清除芯片中的數(shù)據(jù),解密加密鎖定,然后重新下載運(yùn)行代碼和數(shù)據(jù),修改配置相關(guān)的熔絲位,最后再次配置芯片的加密鎖定位。
需要非常明確的指出一點(diǎn)的是SPIEN位,很多客戶曾經(jīng)電話咨詢過(guò),說(shuō)是我們提供的單片機(jī)用ISP連接不上,而自己買(mǎi)來(lái)的可以,熔絲為的SPIEN就是配置ISP的,如果SPIEN為1,ISP是允許狀態(tài),如果是0則為禁止?fàn)顟B(tài),如果是禁止?fàn)顟B(tài)當(dāng)然是無(wú)法ISP連接口芯片的。
另外比較重要的是BOOTRST位,這一位的設(shè)置關(guān)系到芯片上電后程序從0X0000開(kāi)始執(zhí)行還是從 BOOT區(qū)開(kāi)始執(zhí)行。而系統(tǒng)時(shí)鐘源的選擇也非常重要,解密后的程序客戶燒寫(xiě)的時(shí)候經(jīng)常不好用,打部分是由于時(shí)鐘源沒(méi)有設(shè)置對(duì)的原因,所以系統(tǒng)時(shí)鐘一定按照原來(lái)的設(shè)置。
總結(jié)
科研成果保護(hù)是每一個(gè)科研人員最關(guān)心的事情,目的不使自己的辛苦勞動(dòng)付注東流加密方法有軟件加密,硬件加密,軟硬件綜合加密, 時(shí)間加密,錯(cuò)誤引導(dǎo)加密,專(zhuān)利保護(hù)等措施有矛就有盾,有盾就有矛,有矛有盾,才促進(jìn)矛盾質(zhì)量水平的提高加密。不論是加密還是解密,這都是相伴相生的兩兄弟,在最后還要提的一點(diǎn)是,只有提高你的技術(shù)水平,你才能在這場(chǎng)加密與解密中的“冰與火之歌”取勝。
-
芯片
+關(guān)注
關(guān)注
455文章
50816瀏覽量
423674 -
AVR單片機(jī)
+關(guān)注
關(guān)注
22文章
607瀏覽量
55489
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論