AVR单片机解密技术分析

电子说

1.3w人已加入

描述

一般说来,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.最好使用裸片来做产品;

7.将部分端口用大电流熔断;

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区开始执行。而系统时钟源的选择也非常重要,解密后的程序客户烧写的时候经常不好用,打部分是由于时钟源没有设置对的原因,所以系统时钟一定按照原来的设置。

总结

科研成果保护是每一个科研人员最关心的事情,目的不使自己的辛苦劳动付注东流加密方法有软件加密,硬件加密,软硬件综合加密, 时间加密,错误引导加密,专利保护等措施有矛就有盾,有盾就有矛,有矛有盾,才促进矛盾质量水平的提高加密。不论是加密还是解密,这都是相伴相生的两兄弟,在最后还要提的一点是,只有提高你的技术水平,你才能在这场加密与解密中的“冰与火之歌”取胜。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分