如何解密单片机内程序

发布者:那是一条路都最新更新时间:2021-06-29 来源: eefocus关键字:解密  单片机  程序 手机看文章 扫描二维码
随时随地手机看文章

图片

▌单片机解密是什么?


单片机解密又叫单片机破解,芯片解密,IC解密,但是这严格说来这几种称呼都不科学,但已经成 了习惯叫法,我们把CPLD解密,DSP解密都习惯称为单片机解密。单片机只是能装载程序芯片的其中一个类。


单片机(MCU)一般都有内部程序区和数据区(或者其一)供用户存放程序和工作数据(或者其一)。为了防止未经授访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。


如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就叫单片机加密。


单片机程序基本上都存在于Flash中,大部分能够读取或者识别Flash上的数据就能够获得Firmware文件,从而给复制产品带来了机会。


单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序这就叫单片机解密。


能烧录程序并能加密的芯片还有 DSP,CPLD,PLD,AVR,ARM等。

 

当然具存储功能的存储器芯片也能加密,比如DS2401、DS2501、AT88S0104、DM2602、AT88SC0104D等,当中也有专门设计有加密算法用于专业加密的芯片或设计验证厂家代码工作等功能芯片,该类芯片业能实现防止电子产品复制的目的。


▌单片机解密方法


软件攻击


该技术通常使用处理器通信接口并利用协议、加密算法或这些算法中的安全漏洞来进行攻击。比如一个典型事例是对早期XXX系列单片机的攻击。攻击者利用了该系列单片机擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。


目前在其他加密方法的基础上,可以研究出一些设备,配合一定的软件,来做软件解密。


还有比如利用某些编程器定位插字节,通过一定的方法查找芯片中是否有连续空位,也就是说查找芯片中连续的FF FF字节,插入的字节能够执行把片内的程序送到片外的指令,然后用解密的设备进行截获,这样芯片内部的程序就被解密完成了。


电子探测攻击


该技术通常以高时间分辨率来监控处理器在正常操作时所有电源和接口连接的模拟特性,并通过监控它的电磁辐射特性来实施攻击。


因为单片机是一个活动的电子器件,当它执行不同的指令时,对应的电源功率消耗也相应变化。这样通过使用特殊的电子测量仪器和数学统计方法分析和检测这些变化,即可获取单片机中的特定关键信息。


过错产生技术


该办法就是使得单片机异常运行从而使得单片机处于非保护状态。


该技术使用异常工作条件来使处理器出错,然后提供额外的访问来进行攻击。使用最广泛的过错产生攻击手段包括电压冲击和时钟冲击。


低电压和高电压攻击可用来禁止保护电路工作或强制处理器执行错误操作。时钟瞬态跳变也许会复位保护电路而不会破坏受保护信息。电源和时钟瞬态跳变可以在某些处理器中影响单条指令的解码和执行。


探针技术


通过该技术使芯片内部都完全暴露!直接暴露芯片内部连线,然后观察、操控、干扰单片机以达到攻击目的。


为了方便起见,人们将以上四种攻击技术分成两类:


一类是侵入型物理攻击,这类攻击需要 破坏封装,然后借助半导体测试设备、显微镜和微定位器,在专门的实验室花上几小时甚至几周时间才能完成。所有的微探针技术都属于侵入型攻击。


另外一类属于非侵入型攻击,被攻击的单片机不会被物理损坏。在某些场合非侵入型攻击是特别危险的,这是因为非侵入型攻击所需设备通常可以自制和升级,因此非常廉价。大部分非侵入型攻击需要攻击者具备良好的处理器知识和软件知识。与之相反,侵入型的探针攻击则不需要太多的初始知识,而且通常可用一整套相似的技术对付宽范围的产品。


因此,对单片机的攻击往往从侵入型的反向工程开始,积累的经验有助于开发更加廉价 和快速的非侵入型攻击技术。


侵入式解密过程


侵入型攻击的第一步是揭去芯片封装(简称“开盖”有时候称“开封”,英文为 “DECAP”,decapsulation)。有两种方法可以达到这一目的。


第一种是完全溶解掉芯片封装,暴露金属连线。

第二种是只移掉硅核上面的塑料封装。


第一种方法需要将芯片绑定到测试夹具上,借助绑定台来操作。第二种方法除了需要具备攻击者一定的知识和必要的技能外,还需要个人的智慧和耐心,但操作起来相对比较方便,完全实验室中操作。


芯片上面的塑料可以用小刀揭开,芯片周围的环氧树脂可以用浓硝酸腐蚀掉。热的浓硝酸会溶解掉芯片封装而不会影响芯片及连线。该过程一般在非常干燥的条件下进行,因为水的存在可能会侵蚀已暴露的铝线连接,这就可能造成解密失败。接着在超声池里先用丙酮清洗该芯片以除去残余硝酸,并浸泡。

最后一步是寻找保护熔丝的位置并将保护熔丝暴露在紫外光下。一般用一台放大倍数至少100倍的显微镜,从编程电压输入脚的连线跟踪进去,来寻找保护熔丝。若没有显微镜,则采用将芯片的不同部分暴露到紫外光下并观察结果的方式进行简单的搜索。


操作时应用不透明的物体覆盖芯片以保护程序存储器不被紫外光擦除。将保护熔丝暴露在紫外光下5~10分钟就能破坏掉保护位的保护作用,之后,使用简单的编程器就 可直接读出程序存储器的内容。


对于使用了防护层来保护EEPROM单元的单片机来说,使用紫外光复位保护电路是不可行的。对于这种类型的单片机,一般使用微探针技术来读取存储器内容。在芯片封装打开后,将芯片置于显微镜下就能够很容易的找到从存储器连到电路其它部分的数据总线。


由于某种原因,芯片锁定位在编程模式下并不锁定对存储器的访问。利用这一缺陷将探针放在数据线的上面就能读到所有想要的数据。在编程模式下,重启读过程并连接探针到另外的数据线上就可以读出程序和数据存储器中的所有信息。


还有一种可能的攻击手段是借助显微镜和激光切割机等设备来寻找保护熔丝,从而寻查和这部分电路相联系的所有信号线。


由于设计有缺陷,因此,只要切断从保护熔丝到其它电路的某一根信号线,或者切割掉整个加密电路。又或者连接1~3根金线,通常称为FIB(focused ion beam),就能禁止整个保护功能。这样使用简单的编程器就能直接读出程序存储器的内容。


虽然大多数普通单片机都具有熔丝烧断保护单片机内代码的功能,但由于通用低档的单片机并非定位于制作安全类产品,因此,它们往往没有提供有针对性的防范措施且安全级别较低。


加上单片机应用场合广泛,销售量大,厂商间委托加工与技术转让频繁,大量技术资料外泻,使得利用该类芯片的设计漏洞和厂商的测试接口,并通过修改熔丝保护位等侵入型攻击或非侵入型攻击手段来读取单片机的内部程序变得比较容易。


▌防止单片机被解密的几点建议


作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术。因为任何一款单片机从理论上讲,攻击者均可利用足够的投资和时间使用以上方法来解密!为避免辛苦劳作的成果被窃取,提出以下建议:


在选定加密芯片前,要充分调研,了解单片机破解技术的新进展,包括哪些单片机是已经确认可以破解的。尽量不选用已可破解或同系列、同型号的芯片选择采用新工艺、新结构、上市时间较短的单片机。


对于安全性要求高的项目,尽量不要使用普及程度最高,被研究得也最透的芯片。


产品的原创者,一般具有产量大的特点,所以可选用比较生僻、偏冷门的单片机来加大仿冒者采购的难度,选用一些生僻的单片机。


在设计成本许可的条件下,应选用具有硬件自毁功能的智能卡芯片,以有效对付物理攻击;另外程序设计的时候,加入时间到计时功能,比如使用到1年,自动停止所有功能的运行,这样会增加破解者的成本。


如果条件许可,可采用两片不同型号单片机互为备份,相互验证,从而增加破解成本。


打磨掉芯片型号等信息或者重新印上其它的型号,以假乱真。


可以利用单片机未公开,未被利用的标志位或单元,作为软件标志位。


你应在程序区写上版权信息,以备获得法律保护。


采用高档的编程器,烧断内部的部分管脚,还可以采用自制的设备烧断金线,这个目前国内几乎不能解密,即使解密,也需要上万的费用,需要多个母片。


采用保密硅胶,比如环氧树脂灌封胶,封住整个电路板,PCB上多一些没有用途的焊盘,在硅胶中还可以掺杂一些没有用途的元件,同时把MCU周围电路的电子元件尽量抹掉型号。


可以用编程器把空白区域中的FF改成00,也就是把一些未使用的空间都填充好,这样一般解密器也就找不到芯片中的空位,也就无法执行以后的解密操作。


▌总结


当然,要想从根本上防止单片机被解密,那是不可能的,加密技术不断发展,解密技术也不断发展,现在不管哪个单片机,只要有人肯出钱去做,基本都可以做出来,只不过代价高低和周期长短的问题,编程者还可以从法律的途径对自己的开发作出保护,比如写相关专利。

关键字:解密  单片机  程序 引用地址:如何解密单片机内程序

上一篇:单片机开辟情况搭建--Keil uVision4装置教程
下一篇:单片机的Bootloader,可以实现用户轻松升级程序

推荐阅读最新更新时间:2024-11-11 12:31

如何利用PIC16F877A单片机读写AT24C系列储存器
AT24C系列在增强型PIC实验板上编程的硬件原理图如下图所示,U7为实验板上24C02芯片,SDA与单片机的RB5口相连,SCL与单片机RB4相连,七段数码管D5、D7、D8组成了显示单元,字形码的数据通过RC口送入,各数码管的显示片选信号分别不同的RA口进行控制。 在MPLab IDE软件中新建工程,加入源程序代码,同时进行芯片型号的选择和配置位的设置,我们实验所用的芯片型号为PIC16F877A。 编写的程序代码如下,其中程序流程图如下图所示。 软件代码 编好程序后将编译好的HEX码通过ICD2仿真烧写器烧入单片机芯片,上电运行,主程序中在O×01地址写入了“O×55”,在O×0
[单片机]
如何利用PIC16F877A<font color='red'>单片机</font>读写AT24C系列储存器
实际中降低单片机功耗
前段时间利用51做了一个PC机的红外遥控器,能够实现基本的功能,由于考虑到实际情况,因此需要让单片机进入睡眠模式。此处记下,方便以后使用。 单片机的睡眠模式主要由PCON寄存器控制,其寄存器如下图: POF:上电复位标志位,当单片机首次上电时,此标志位为1,可由软件清零。 PD: 当其被置位为1时,单片机进入掉电(pown down)模式,可由外部中断低电平或是下沿触发中断唤醒进 入掉电模式时,外部时钟、CPU、定时器、串行口全部停止工作,只有外部中断继续工作。 为了降低单片机的功耗,使其更为节能,可以为其加上休眠模式。当在3分钟内检测到没有按键按下时,单片机进入休眠模式。此处可以通过一个参数进
[单片机]
电源重新上电引起的MCU启动失败的原因分析
对于主电源掉电后需要继续工作一段时间来用于数据保存或者发出报警的产品,我们往往都能够看见产品PCB板上有大电容甚至是超级电容器的身影。大容量的电容虽然能延时系统掉电,使得系统在电源意外关闭时MCU能继续完成相应操作,而如果此时重新上电,却经常遇到系统无法启动的问题。那么这到底是怎么回事呢?遇到这种情况又该如何处理呢? 一、上电失败问题分析 1. 上电缓慢引起的启动失败 对于需要进行掉电保存或者掉电报警功能的产品,利用大容量电容缓慢放电的特性来实现这一功能往往是很多工程师的选择,以便系统在外部电源掉电的情况下,依靠电容的储能来维持系统需要的重要数据保存及安全关闭的时间。此外,在不需要掉电保存数据的系统中,为了防止电源纹波
[电源管理]
详解TI MSP430 FRAM MCU惊呆小伙伴们的“杀手锏”
针对智能水表、电表、遥控器等需要长时间使用的应用,任何MCU厂商都会以“低功耗”来大做文章,8 bit、16 bit和新晋的32 bit MCU都在分食低功耗应用市场,并且厮杀得越来越激烈。德州仪器(TI)MSP430一直是业界的明星产品,MSP430 FRAM系列MCU问世之后,更是频频打破低功耗的极限,同时也成为竞争对手争先对比和“攻击”的对象。我们不要再听厂商们“王婆卖瓜自卖自夸”,先来看看权威第三方机构的验证结果。 嵌入式微处理器基准评测协会(EEMBC),基本上涵盖80%~90%的MCU的厂家都是其成员,他们一起做了评估,此次评估囊括了8 bit、16 bit和32 bit MCU,评估的标准值称为ULP -MA
[嵌入式]
详解TI MSP430 FRAM <font color='red'>MCU</font>惊呆小伙伴们的“杀手锏”
MSP430F5529&LCD1602程序
代码 LCD1602.c #include msp430.h #include string.h #include LCD1602.h #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) #define DataDir P3DIR #define DataPort P3OUT #define Busy 0x80 #define
[单片机]
基于51单片机和ADC0809的数字电压表设计
本课题是利用单片机设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,使用的元器件数目较少。外界电压模拟量输入到A/D转换部分的输入端,通过A/D转换变为数字信号,输送给单片机。然后由单片机给数码管数字信号,控制其发光,从而显示数字。 注:因为ADC0809的通道选择端口是使用插针,做出电路板后再用导线连起来的,在程序里也少了通道选择的语句,请注意一下。 一.原理图 二.仿真图 三.存储空间定义 (1)70H用于存放A/D转换结果,71H、72H、73H、74H分别存储显示用的三位数据如表所示。 (2)地址30H~39H存放显示在数码管上0~9的数。如表所示。 四.程序 程序可分为数据采
[单片机]
基于51<font color='red'>单片机</font>和ADC0809的数字电压表设计
stc51单片机内部扩展RAM应用
我写贪吃蛇程序的时候存放蛇身数据的100个point类型量总是无法全部定出来,我就只能把最大长度定位十几二十几左右,突然想起郭天祥的书上的stc扩展功能,找了一下果然,使用xdata就能完美解决这个问题。哈哈哈哈哈哈~~~~ 以下图片截自《郭天祥新概念51单片机C语言教程 入门、提高、开发、拓展全攻略》
[单片机]
stc51<font color='red'>单片机</font>内部扩展RAM应用
【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(2)使用 IAR 开发 GD32
IAR版本众多,版本之间的兼容性并不好,如果初次使用建议安装7.3以上的版本,安装好IAR以后再根据该文档来添加GD的器件型号,进行相关的debug工作。 2.1 在IAR中添加GD32 MCU Device 2.1.1 从官网上下载相应的GD32系列插件。 下面以GD32F30x系列为例,下载插件IAR_GD32F30x_ADDON.1.0.0.exe: 2.1.2 运行IAR_GD32F30x_ADDON.1.0.0.exe,单击start开始安装插件。 2.1.3 安装成功后单击Finish,结束插件安装。 2.2 在IAR中编译调试GD32 在上一小节中我们已经添加了GD32F30x系列的插件,这一小节我们介绍
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】一、GD32 <font color='red'>MCU</font> 开发环境搭建(2)使用 IAR 开发 GD32
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved