点击上方“小麦大叔”,选择“置顶/星标公众号”

福利干货,第一时间送达

什么是单片机解密?

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

如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就叫单片机加密。(BugPS:单片机程序基本上都存在于Flash中,大部分能够读取或者识别Flash上的数据就能够获得Firmware文件,从而给复制产品带来了机会)

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

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

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

单片机解密方法

2.1  软件攻击

该技术通常使用处理器通信接口并利用协议、加密算法或这些算法中的安全漏洞来进行攻击。

比如一个典型事例是对早期XXX系列单片机的攻击。攻击者利用了该系列单片机擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。

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

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

2.2  电子探测攻击

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

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

2.3   过错产生技术

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

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

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

2.4  探针技术

该技术是直接暴露芯片内部连线,然后观察、操控、干扰单片机以达到攻击目的。(BugPS:芯片内部都完全暴露了,芯片正在瑟瑟发抖!)

单片机解密分类

为了方便起见,人们将以上四种攻击技术分成两类,一类是侵入型攻击(物理攻击),这类攻击需要 破坏封装,然后借助半导体测试设备、显微镜和微定位器,在专门的实验室花上几小时甚至几周时间才能完成。

所有的微探针技术都属于侵入型攻击。另外三种方法 属于非侵入型攻击,被攻击的单片机不会被物理损坏。在某些场合非侵入型攻击是特别危险的,这是因为非侵入型攻击所需设备通常可以自制和升级,因此非常廉价。

大部分非侵入型攻击需要攻击者具备良好的处理器知识和软件知识。与之相反,侵入型的探针攻击则不需要太多的初始知识,而且通常可用一整套相似的技术对付宽范围的产品。

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

侵入式解密过程

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

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

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

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

芯片上面的塑料可以用小刀揭开,芯片周围的环氧树脂可以用浓硝酸腐蚀掉。热的浓硝酸会溶解掉芯片封装而不会影响芯片及连线。该过程一般在非常干燥的条件下进行,因为水的存在可能会侵蚀已暴露的铝线连接 (这就可能造成解密失败)。

接着在超声池里先用丙酮清洗该芯片以除去残余硝酸,并浸泡。

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

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

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

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

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

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

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

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

单片机解密几点建议

任何一款单片机从理论上讲,攻击者均可利用足够的投资和时间使用以上方法来解密。这是系统设计者应该始终牢记的基本原则。

因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和时间辛辛苦苦设计出来的产品被人家一夜之间仿冒的事情发生。(下面是根据沪生电子的解密实践提出下面建议):

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

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

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

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

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

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

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

(8)你应在程序区写上你的大名单位开发时间及仿制必究的说法,以备获得法律保护;另外写上你的大名的时候,可以是随机的,也就是说,采用某种算法,外部不同条件下,你的名字不同,比如www.XXXXX.com、www.XXXXX.cn,  www.XXXXX.com.cn 等,这样比较难反汇编修改。

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

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

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

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

来源:http://www.husoon.com/,整理:最后一个bug

| 整理文章为传播相关技术,版权归原作者所有 |

| 如有侵权,请联系删除 |

—— The End ——

推荐好文  点击蓝色字体即可跳转

☞ 8位MCU要被淘汰了吗?

☞ 推荐一个直接用于项目开发的PID库!很好用,很稳定

☞ 80家MCU国产和国外厂家汇总!

☞ 推荐一款我私藏已久的串口示波神器

欢迎转发、留言、点赞、分享给你的朋友,感谢您的支持!

长按识别二维码关注我

如果对您有所帮助,不妨来个在看

牛逼,我的单片机固件被人破解了相关推荐

  1. 牛逼!这家 AI 公司用面具破解了中国的人脸识别系统!微信、支付宝、火车站无一幸免...

    公众号关注 "GitHubDaily" 设为 "星标",带你了解圈内新鲜事! 转自:新智元 来源:fortune.theverge 编辑:张佳 [导读]据外媒报 ...

  2. 环球黑卡是不是很牛逼?

    环球黑卡 环球黑卡是很牛逼,估计听说过的人都有这样的疑问. 近段就有一个网友在支付宝上抽到了环球黑卡,如果很牛逼还能抽奖送? 所谓抽奖获得环球黑卡,可能是商家跟支付宝联合推出的活动,但是也不要太激动. ...

  3. IT行业技术牛逼就可以无视学历?

    新媒体管家 本文来自我的一个知乎回答,问题截图如下: 问题:https://www.zhihu.com/question/64344519 这类问题,其实已经是烂大街的问题,抛开前面特指的IT行业,相 ...

  4. 会stm32单片机就以为自己很牛逼了?

    人都会经历幼稚无知,狂妄自傲的阶段,我也一样. 记得我刚出来工作2年的时候,自认为做过几个产品就飘了. 记得有一次,我进到一家开发汽车类产品的公司,由于工作经验不足,领导安排了一个老员工带我. 公司几 ...

  5. python最适合做什么生意-面试了57位数据分析师,我发现牛逼的人都有这4个特质...

    原标题:面试了57位数据分析师,我发现牛逼的人都有这4个特质 现在的职场竞争越来越激烈,不学上一两门新技能,保持自己知识更新,很容易被年轻后辈超越.有些人选择学一门外语,有些人选择学习职场上为人处事的 ...

  6. 24岁华为Java程序员工资表曝光,牛逼的人注定会牛逼

    周末和学弟一起吃了个饭,他比较牛逼的,没毕业几年已经进华为了,在他的朋友圈晒出了一年前的工资表. 同样20来岁的年纪,为什么人家可以年入百万,一个项目奖金就比得上别人一年的工资? 他经历就是大学毕业后 ...

  7. 参加最牛逼的运营人年终聚会,是种什么样的体验

    阅读文本大概需要 6.6 分钟. 上周六上海的天下着小雨,清晨 6 点多我就从睡梦中醒来.起身洗漱,刷了下手机的消息,就准备出门了.这天上海有场为职业运营人开的年终聚会,现场大佬云集,2018 年最牛 ...

  8. 真正牛逼的人,都是极简主义者!!

    写在前面 一个真正牛逼的人,都是极简主义者:一款真正伟大的产品,都是极简主义的产品.一个人只要简单的专注于自己的领域,在思想上删繁就简,成为某个领域和某个行业的专家是很顺其自然的事情.一款产品,立足于 ...

  9. 牛逼的人很早就开始牛逼了

    作者:拾遗君 来源:拾遗(ID:shiyi201633) "牛逼的人很早就开始牛逼了."这话很有道理.虽然有"大器晚成"一说,但罗马绝对不是一天建成的.能够&q ...

  10. 牛逼的人,都不太要面子

    前两天读了一篇文章,讲的是鲁迅先生的<说面子>. 鲁迅先生在<说面子>这篇文章里提到一个观点:面子是中国精神的纲领,就像晚清时候的长辫子,你只要一揪着辫子,人的身体就整个跟着你 ...

最新文章

  1. php 正则表达式界限符
  2. php小偷程序原理分析2
  3. 2017年上半年最受关注度的几大免费OA品牌
  4. Java手机忘了密码怎么办_手机开机密码忘记了怎么办
  5. 计算机如何搜索相关文字,搜索引擎:“请输入你要搜索的内容”|你是如何使用搜索引擎的呢?...
  6. android.os.binderproxy cannot be cast to,Android服务android.os.BinderProxy错误
  7. java 设计模式 示例_Java中的状态设计模式–示例教程
  8. 鸿蒙OS电脑体验,华为鸿蒙OS体验抢先曝光!有多个更新版本,界面和安卓完全不同...
  9. nodejs的mysql模块_Nodejs的mysql模块学习(一)
  10. android切图倍数,【Flutter工具】fmaker:自动生成倍率切图/自动更换App图标
  11. excel内容少却文件很大_009- EXCEL文件的表格内的数据内容明明不多,但是文件却变得很大...
  12. python零基础能学吗-Python编程语言好学吗?零基础转行能学Python吗?
  13. mysql5.6二进制包_MySQL 5.6版本二进制包多实例安装
  14. 苹果cms视频模板源码
  15. cocos2dx图片加密解密(npk方式)
  16. 下载c语言软件在哪里,下载c语言编程软件-c语言编程软件去哪里下?c语言编程软件去哪 – 手机爱问...
  17. 基于哈夫曼编码的文件压缩
  18. vue.js中在js获取指定日期到现在时间的天数
  19. POJ 1392 Ouroboros Snake
  20. 使用 Flutter 开发 Github 客户端及学习历程的小结

热门文章

  1. 教你同时查询安能物流多个单号的物流情况并保存
  2. MapGuide open source开发心得二: 资源
  3. 塞班手机刷linux,向 诺基亚 塞班手机中 批量导入 通讯录(csplit iconv)
  4. FFmpeg-2、编解码及视频像素格式尺寸转换和音频重采样
  5. 林老师话说天南地北  我的学生在美国西雅图微软总部
  6. 计算机操作知识试题及答案真题,计算机操作系统期末考试题及答案
  7. 马云说的新零售是错的【完善版】
  8. excel文件如何撤销工作表保护
  9. Windows anaconda下载安装
  10. uni-app 生成安卓证书