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