单片机原理的加密方法

如题所述

科研成果保护是每一个科研人员最关心的事情,加密方法有软件加密,硬件加密,软硬件综合加密,时间加密,错误引导加密,专利保护等措施有矛就有盾,有盾就有矛,有矛有盾,才促进矛盾质量水平的提高加密只讲盾,也希望网友提供更新的加密思路,现先讲一个软件加密:利用MCS-51 中A5 指令加密,其实世界上所有资料,包括英文资料都没有讲这条指令,其实这是很好的加密指令A5 功能是二字节空操作指令加密方法在A5 后加一个二字节或三字节操作码,因为所有反汇编软件都不会反汇编A5 指令,造成正常程序反汇编乱套,执行程序无问题仿制者就不能改变你的源程序。
硬件加密:8031/8052单片机就是8031/8052掩模产品中的不合格产品,内部有ROM,可以把8031/8052 当8751/8752 来用,再扩展外部程序器,然后调用8031 内部子程序当然你所选的同批8031芯片的首地址及所需用的中断入口均应转到外部程序区。
硬件加密
用高电压或激光烧断某条引脚,使其读不到内部程序,用高电压会造成一些器件损坏重要RAM 数据采用电池(大电容,街机采用的办法)保护,拔出芯片数据失去机器不能起动,或能初始化,但不能运行。
用真假方法加密
擦除芯片标识
把8X52单片机,标成8X51 单片机,并用到后128B的RAM 等方法,把AT90S8252 当AT89C52,初始化后程序段中并用到EEPROM 内容,你再去联想吧!
用激光(或丝印)打上其它标识如有的单片机引脚兼容,有的又不是同一种单片机,可张冠李戴,只能意会了,这要求你知识面广一点 。
用最新出厂编号的单片机,如2000 年后的AT89C 就难解密,或新的单片机品种,如AVR 单片机。
DIP 封装改成PLCC,TQFP,SOIC,BGA等封装,如果量大可以做定制ASIC,或软封装,用不需外晶振的单片机工作(如AVR 单片机中的AT90S1200),使用更复杂的单片机,FPGA+AVR+SRAM=AT40K系列。
硬件加密与软件加密只是为叙说方便而分开来讲,其实它们是分不开的,互相支撑,互相依存的软件加密:其目的是不让人读懂你的程序,不能修改程序,你可以………….....
利用单片机未公开,未被利用的标志位或单元,作为软件标志位,如8031/8051有一个用户标志位,PSW.1 位,是可以利用的程序入口地址不要用整地址,如:XX00H,XXX0H,可用整地址-1,或-2,而在整地址处加二字节或三字节操作码,在无程序的空单元也加上程序机器码,最好要加巧妙一点用大容量芯片,用市场上仿真器不能仿真的芯片,如内部程序为64KB 或大于64KB 的器件,如:AVR 单片机中ATmega103 的Flash 程序存储器为128KBAT89S8252/AT89S53中有EEPROM,关键数据存放在EEPROM 中,或程序初始化时把密码写到EEPROM 中,程序执行时再查密码正确与否,尽量不让人家读懂程序。关于单片机加密,讲到这里,就算抛砖引玉。

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-11-02
本人总结前人的经验,摸索着写一点实用的方法,供大家参考:在这里不讲加密算法,只讨论结合软硬件的加密方法,总结了一下大该有以下几种:一、加密方法
1、烧断数据总线。这个方法我想应不错,但应有损坏的风险,听说也能**。
2、芯片打磨改型,这个方法有一定作用,改了型号能误导,但同时也增加成本,解密者一般也 能分析出来。
3、用不合格的单片机的的存储器:这个方法听起来不错,值得一试。很多单片机有这种情况,有
的是小容量改为大容量来用,**者应很难发现。例:8031/8052 单片机就是8731/8752掩模
产品中的不合格产品,内部可能有ROM。可把8031/8052 当8751/8752 来用.但使用时要测试 可靠。
4、其他还有添加外部硬件电路的加密方法。但那样增加成本,效果不一定好。
5、软件加密,是一些防止别人读懂程序的方法,单一的这种方法不能防止别人全盘复制。须配合 其他的加密方法。
6、通过序列号加密, 这个方法当你的产品是连接PC时或网络,我想是一个比较理想的方法。原理跟电话产品防伪
标志相近。就是在你的单片机中生成一个唯一的随机长序列号,并加入复杂的特种算法,或加
入你们重新编码的企业信息在里面,每个芯片内不同,复制者只能复制到一个序列号。这个方
法不能防止复制,但能发现复制品,并可在升级或在网络状态控制它或让他自毁。如果产品不
联机或不可升级,则这个方法完全无效,只能是在上法院时可当作证据,因为内含特种算法破 解者是无法知道的。
7、通过单片机唯一的特性标识(不可修改)进行加密
这个方法最好,能很好的防止复制。但大多单片机没有唯一标识。STC单片机里面含唯一标识,
但本人没用过,下次一定要研究使用一下。理论上只要含唯一标识是单片机都可实现,ATMEL
AVR系列单片大部分型号有RC校正字节(几十个芯片才有一个相同,并且不可修改)能实现这
个理想功能,可做到即使芯片内程序被读出也无法直接在另一个同型号的单片机上正常运行。并
且如果用这个唯一标识来生成含有加密算法的序列号,结合第6种方法,哪应是最理想的加密方
法。以上方法应都是一种加密的思路,各种方法可接合着用,6、7两种方法是本人认为比较合适,实现起来比较容易的方法。后面将重点介绍两种加密方式的实现方法。

二、序列号加密实现方法 1、原理 就是在存储器某个区块放入一个唯一的序列号(长一点,无规律),每个芯片不同。原理跟电话
产品防伪标志相近 --------------
---------------------------------------------------------
| PC机 | <------------>|
带自定义算法序列号单片机系统 | --------------

---------------------------------------------------------控制方法:
1、PC根据传回来的序列号根据算法判断是否合法,合法就运行,不合法处理它。当然,如果是 **的序列号,可自毁。
2、单片机内部的序列号经加密算法处理,单片机系统同样要防止软件被更改,可在单片机内部加
入CRC等数据校验。一般情况下,序列号如果不合算法,单片机系统应让程序运行出错,这样
**者一般不会去修改序列号,如果修改了也没关系,因为PC还能判断是否合法。
3、序列号传送时可采用双向加密算法认证,相当于银卡的数据交换方式。传送过程:
PC发送随机SEED数据---->单片机系统跟据随机SEED算出加密的序列号----->PC根据算法判断序
列号是否合法这样在序列号的传送过程中,数据每次不同,解密者无法看到序列号的明码。这样 PC软件他同样不容易更改。
注意:加密算法可以很简单理解一个为异或,当然算法由你自已随意定,反正目的不能上别人一看
软件就懂。**者只是**一个产品只能得到一个序列号,即使序列号是明码,他也只能知
道是一个。如他随便修改一个序列号一般情况就不符合算法,除非他看懂你的软件算法,我
想这是一般解密者最不愿意做的事情。单片机系统的量产:
产生这样的序列号,单片机系统如何生成?如果用手工一个个去计算调入,得重新编译是不
可能的事情。如果编写一个软件生成数据放入到HEX文件中,那样不说工作量好大,编程时
还必须一次次装入HEX文件,量产同样无法完成。这个可于MiniPro TL866 编程器完成。
编程器的介绍可查看:http://www.autoelectric.cn/minipro

TL866编程器有个自动编号功能,可利用DLL动态库调用实现任意的序列号.如何使用DLL设定序列号,可参考编程器安装包内的DLL实例,内有详细说明。后面讲的用单片机唯一的特性标识进行加密也用到DLL调用,基本大同小异。

经过这样的加密,达到一个目的,就是解密者必须修改你的软件后才能放心使用,但是每次升级同样会受你控制,好像微软随时可以黑你屏一样的道理,否则可能随时会被你宰了!!但这种方法只适合连接PC或网络的系统。 

三、用单片机唯一的特征标识进行加密加密原理:
单片机必须有唯一标志,单片机程序内只要判断是否是这个标志,就可防止程序直接复制使
用。理论上可以做到很难**,本人认为是最有效又实用的方法。达到目的: 解密者最不愿意做的事让他必须做。
一般大部分搞单片机解密的都是暴力**,因为这个最容易,只要牚握技巧,有设备,工艺熟练就可了,不用太强的专业知识。如果复制后,程序无法运行,那就蒙了,因为这个时候就要去看汇编语言了,我想信有很多汇编高手,能很容易**。但我也同时认为,怎么多型号的单片机,汇编指令差别好大,每一种单片机的汇编都很熟的人应不多了。所以这会大大增加**难度。如果一个加密设计好的软件,跟据单片机的唯一特征字来加密,有时他可能不得不看懂里面的加密算法。这样加密目的就达到了。开发人员需要做的事:

有了唯一特征字,并不是加密万无一失了。如果你只是在程序中只用一条语句判断,是不是这个芯片的特征字,则程序被读出后,解密者只要简单的修改程序,直接跳过判断语句。可能只要几分钟就解决了。所以在程序要加入加密算法,尽量不用IF判断语句。可用子程序调用地址来参与特征字的加密运算等等方法,如何防反汇编及修改软件等不在这里讨论,网上可以找到有关这方面的很多资料。
下面讨论如何用TL866编程器实现,单片机用特征字进行加密的量产操作:
芯片进行加密量产操作同样碰到到一个问题,如果加密算法比较复杂,每个芯片在代码中需要更改的数据较多,用手工的方法是无法实现量产操作编程的,TL866编程器很好的解决了这个问题,下面用ATMEGA8为例,说明TL866编程器如果进行加密量产编程操作。TL866编程器程序安装包(V3.01以上)中有该实例的全部动态库函数及单片机C源代码,稍作修改就可用到你的产品中。下载地址:http://www.autoelectric.cn/minipro
第2个回答  2017-01-04
传统软件加密方式归纳起来主要有以下几种;
(1)指令伪装法
指令伪装法叫的策略是在不影响控制程序运行条件下,改变汇编语言源程序中个别指令的形态来增大反汇编代码阅读的难度,归纳起来主要有以下几种方式:
a、对采用CISC指令系统的MCU芯片,用DB伪指令在两模块间插入多字节指令(双字节或3字节)的操作码,使反汇编后插入的操作码字节与下一模块第一条指令机器码组合形成新的指令(甚至会继续拆分源程序中第二条指令),使反汇编后看不到真实的汇编指令。
b、将长跳转指令中的目标地址压入堆栈,然后用RET指令代替无条件长跳转指令LJMP。
c、将长跳转指令中的目标地址送DPTR,然后用散转指令JMP @A+DPTR代替无条件长跳转指令LJMP。
不过,以上指令伪装方式最多只能增加反汇编程序的阅读难度,对破解后直接复制的盗取方式没有任何防范作用,严格地说指令伪装法并不属于软件加密范畴。
(2)破坏单片机芯片特定硬件资源加密法
破坏单片机芯片特定硬件资源加密法洲归纳起来主要有以下几种:
a、故意烧坏数据总线。对于MCS-51兼容芯片,程序代码总是从数据总线(PO口)读出,因此人为地将12V高压引到PO口某一I/O引脚,使其下拉N沟MOS管击穿——对地短路。
这一方法对防止片内代码被非法读出是有效的,但其局限性也非常明显:一方面无法通过总线方式扩展并行I/O口(破坏了芯片内部数据总线接口电路);另一方面,不能再通过并行编程方式更新片内程序代码;三是占用了芯片I/O引脚资源。
b、破坏芯片的加密锁定位。由于Flasb ROM擦写次数仅为10K左右,因此在运行中通过IAP编程方式对芯片加密位进行多次擦写,使Flash ROM不能再擦除。这种方式的潜在危险是万一加密位擦除失效后不能再写入,则片内代码就很容易被读出;再就是该方法也不能阻止探针攻击法。此外,软件设计者也不能更新片内程序代码。
c、破坏MCS.51的EA引脚。对于MCS-51兼容芯片来说,当EA引脚为低电平时,将从外部ROM执行程序。于是有设计者试flj破坏E引脚,使MCS-51芯片复位后总是从片内执行程序,但这一方法并不能阻止通过擦除芯片加密琐定位方式读取片内代码。
(3)总线加密法
早期MCS-51芯片内部程序存储器容量小,甚至没有内部ROM,一般均需要通过总线方式扩展外部程序存储器,于是出现了所谓的总线加密法。
总线加密法主要有地址总线乱序法、数据总线乱序法,或在MCU芯片地址总线与存储器地址总线间增加可编程芯片(如GAL、FPGA等)俐,使MCU芯片地址与存储器地址之间形成新的映射关系。这些加密方式对采用外设程序存储器的早期的MCS-51应用系统来说也许有一定的作用,但目前几乎所有的单片机应用系统都不再采用外部程序存储器。
经过长期实践,针对目前主流单片机芯片硬件特征,本文提出了基于芯片身份识别码、片内RC振荡器频率离散性、上电标志等3种实用的单片机控制程序加密方式。
二、基于芯片身份识别码的加密方法
为提高片内程序代码的安全性,最近上市的某些MCU芯片,如STC公司2009年后推出MCS-51兼容芯片、ST公司的STM32系列芯片等每一芯片内部均具有惟一的芯片ID号。因此,在控制程序中可充分利用这一功能完善控制程序代码的保护,该加密方式的加密步骤可按图1所示进行。
设置首次上电标志的目的是为了便于判别编程后是否开机过,第一次上电时读出并保存芯片的ID号。为防止攻击者通过仿真方式找到芯片ID号信息,一般不宜直接存放ID号的原码,而是经过相应的加密处理后再分散存放到不同的Flash ROM存储单元中;校验方式也不宜采用常见、简单的校验规则,如和校验等,应尽可能采用某些特殊的检验方式,使攻击者不能迅速确定校验算法。
为防止攻击者获取控制程序片段中有用代码,一旦发现ID号不符,最简单办法就是借助IAP编程方式删除控制程序代码,当然也可以随机改写控制程序代码中的1~2K字节,
三、基于片内RC振荡器频率离散性的加密方法
具有惟一ID号的MCU芯片加密容易,破解成功率很低。但由于生产成本、专利限制等原因,许多中低档MCU芯片,如大部分厂家的MCS-51兼容芯片、PIC系列芯片,甚至最近上市的STM8S系列芯片都没有惟一芯片ID号功能。对于这类芯片,如果内部含有作为看门狗计数器时钟或唤醒时钟的RC振荡器,如Philips公司的P89LPC900系列MCS-51兼容芯片、STM8S系列芯片、PIC16/18系列芯片等均内置了一定数量的RC振荡器。设计者可充分利用RC振荡器频率离散性生成芯片ID号,提高片内控制程序代码的安全性。
1、用RC振荡器频率作为芯片ID号
这一加密方式的加密原理大致如下:
(1)复位后启动MCU芯片的某一定时器测量RC振荡器的频率。只要定时器计数脉冲来自精度与稳定性都很高的外部石英晶体振荡器,则频率测量误差是可控的,也不会很大。
(2)考虑到RC振荡器输出信号频率受环境温度影响较大,应考虑温度变化、晶振频率误差等对测量结果的影响。例如STM8S系列MCU芯片内部低速RC振荡器标称频率为128KHz~12.5%,通过定时器TIM3测出某一特定芯片内部RC振荡器频率为OxID4ED(即120 045 Hz),则可将OxOID4ED作为该芯片的ID号。大量实验统计表明开机60秒后(上电延迟一定时间后测量的目的是为了等待MCU芯片内部温度稳定,即尽量减小环境温度对结果的影响)同一芯片频率测量误差在1%以内(不同芯片在不同环境下的频率误差可能略有不同,可通过多次实验确定。确定频率误差范围的原则是同一芯片保证每次上电复位后测到的数据均在误差允许范围内,因此允许误差不宜太小;另一方面,不同芯片频率相同的可能性又要尽可能小,因此频率误差允许范围也不能太大)。因此,只要上电后测到的RC振荡器频率与ID号相比,误差在1%以内即认为合法,反之视为非法。
该加密方式流程大致如图2所示。尽管不能排除两芯片频率接近的情形,但如果破解后的程序代码有50%或以上不能运行,那么盗版者就会烦恼万分,知难而退。
采用该加密方式对以STM8S207RB单片机芯片作控制核心的某型防盗报警器的实验统计结果如表l所示。可见只要频率误差取1—2%之间,代码复制后有50%以上的芯片不能正确运行。
(2)用RC振荡器频率校正值作为芯片ID号
部分厂家MCU芯片,如Microchip公司的PIC16/18系列、Philips公司的P89LPC900系列等内置的RC振荡器有频率校正值(保存在相应的寄存器或片内程序存储器特定单元中)。在实践中发现不同芯片的频率校正值有差异。对于具有这一功能的芯片,可将RC振荡器频率校正值作为芯片的ID号,完善控制程序代码的加密功能(操作流程与图1相似)。
尽管频率校正值一般在8位以内,但破解后的控制程序代码有50%以上不能运行就达到目的了。该加密方式实验统计结果如表2所示,可见频率校正值长度越大,代码复制的成功率就越低。
四、基于上电标志的加密方式
基于上电标志的加密方式可概括为“设置上电标志一检查芯片加密状态一检查上电标志一随机改写控制程序代码”,主要用于保护既没有芯片惟一 ID号,也没有片内RC振荡器的低档MCU芯片的控制程序代码不被复制。
1、加密过程
基于上电标志的加密过程如下。
(1)在上电复位后,开中断前,先读出Falsh ROM状态寄存器,确认芯片的加密状态。
(2)如果芯片加密状态正确,则检查首次上电标志(为防止误判,往往选择具有一定特征的字符串作为首次上电标志)是否存在:如果首次上电标志不存在,则判定为第一次上电,设置首次上电标志后进入正常的运行状态。
反之,如果芯片加密状态不正确,可根据首次上电标志是否存在进行相应处理:如果首次上电标志不存在,则表明芯片从未上电过,芯片未加密的原因可能是编程时漏选了加密锁定位,应进入IAP编程状态,对芯片进行加密操作。如果加密成功,设置了首次上电标志后,进入正常的运行状态;如果首次上电标志存在,说明芯片曾经上电运行过,加密位状态不正确,很可能是加密位被人为破坏,应立即启动某一定时器(目的是为了获得随机数),然后进入IAP编程状态,随机改写指定程序段内数十到数百字节(不必擦除改写字节所在扇区,将待改写字节内的“1”变为“0一即可)破坏应用程序代码的完整性,然后关闭中断进入死循环状态或复位退出。
该加密方法具体的加密流程如图3所示。
这种随机改写程序代码的加密方式具有很大的迷惑性;一方面,通过反汇编方式无法获得完整的源程序;另一方面,如果被随机改写的代码属于某一非主功能模块,则破解后的程序运行似乎正常,但它确实是一个不完整、运行后果难以预料的程序。
(2)代码检查与生成
为防止不法分子,通过反汇编、跟踪执行方式找到并删除随机改写程序段内的指令系列,可将改写程序代码段内的指令机器码读出,并以数表方式存放在主程序中。然后在主程序中的适当位置检查随机改写程序段代码的有效性,一旦发现代码无效,则进入IAP编程方式,重新生成改写程序段代码。
单片机应用程序加密与解密技术都在进步,可以说几乎没有哪一种加密技术绝对安全可靠。只能在实践中根据所选单片机芯片的硬件特征,有选择地交叉组合使用两种或两种以上的加密手段,以增大解密难度,并尽可能破坏解密版代码的完整性。但无论采用何种加密方式都应尽量避免增加系统的硬件成本、占用MCU芯片的硬件资源,此外也不能明显降低系统的运行效率。本文介绍的3种加密方式,尽管不能完全避免盗版者的攻击,但多年实践表明交叉组合使用这些加密手段确实能有效提高MCU芯片控制程序代码的安全性,控制程序代码被成功盗取的几率很小,且不占用任何硬件资源,也没有额外增加MCU应用系统的硬件成本。
第3个回答  2016-06-20
看不懂你的问题

加密锁的工作原理
加密锁的工作原理是通过在软件执行过程中与加密锁交换数据来实现加密。这种加密锁内置了单片机电路(也称为CPU),使其具备判断和分析的处理能力,从而增强了反解密的能力。这类加密产品被称为“智能型”加密锁。在加密锁内置的单片机中,包含了专用于加密的算法软件。一旦该软件被写入单片机,就无法再被读...

加密锁工作原理
加密锁通过在软件执行过程中与加密锁交换数据实现加密。内置单片机电路增强主动反解密能力,赋予了加密锁判断、分析的处理能力,使它成为"智能型"加密锁。单片机中的加密算法软件被写入后无法读出,确保加密锁硬件无法复制。加密算法不可预知、不可逆,将数字或字符变换成整数,如DogConvert(1)=17345、DogConv...

单片机解密方法什么是单片机
单片机(MCU)内部通常设有EEPROM\/FLASH存储器,用于存放程序与工作数据。为了防止未经授权的访问或复制,大多数单片机内置了加密锁定位或加密字节,以此保护内部程序。一旦编程时加密锁定位启用(即锁定状态),普通编程器将无法直接读取单片机内的程序,这便是单片机加密的原理。面对单片机加密,攻击者通常利用...

AVR单片机解密简介
在电子设计中,单片机通常内置ROM、EEPROM或Flash存储空间,用于存放程序。为了维护程序的私密性和防止未经授权的访问或复制,许多单片机都配备了加密机制,如加密锁定位或加密字节。当编程时,如果启用了加密锁定位,通常的编程器就无法直接读取单片机内部的程序,这就构成了所谓的拷贝保护或锁定功能。然而,这种...

Microchip单片机程序解密
研究新型加密方式的 PIC 单片机,对于国内的企业而言,可能只有少数的公司能够进行。因为其特殊的工艺,分析起来非常复杂,费用高昂,整个反向工程的代价可能达到 15 万元以上。因此,理解其加密原理的公司在国内可能不超过两家。考虑到市场需求,我们提供合法渠道获得的 PIC18F13K22 的解密服务,适用于合法...

单片机软件加密程序是否可以进行芯片解密?
加密狗的也不例外.现最强的是烧断一条IO线的方法加密.要破解就必须磨片了(破坏芯片).加密程序的原理是多种多样,并没有统一.现在最多的认为是把程序的代码通过加密程序变成了另一个毫无意义的代码.不过这种方法不适合在单片机便用.我就试过开机要输入密码.那么这个密码判断程序也可以说是加密程序.更多...

加密狗工作原理
加密狗通过在软件执行过程中和加密狗交换数据来实现加密。加密狗内置单片机电路,增强主动反解密能力,被称为“智能型”加密狗。单片机内置加密算法软件,被写入后无法读出,确保了加密狗硬件无法复制。加密算法不可预知、不可逆,将数字或字符变换成整数,如DogConvert(1)=12345、DogConvert(A)=43565。程序...

软件加密狗工作原理
软件加密狗还具备读写功能,可以将常量写入存储器,使解密更为困难。尽管单片机算法可能不如公开算法如DES那样复杂,但在触及算法前,解密者还需面对其他难关。智能型软件加密狗通过算法和内置功能,使得软件的使用价值仅能由软件开发者掌握。相比一旦发现非法使用即警告、中止的加密方式,这种加密方式更为温和...

单片机解密-程序破解的8种方法
方法一:软件攻击。这一技术通常利用处理器通信接口,通过分析协议、加密算法或其中的安全漏洞进行攻击。以ATMELAT89C系列单片机为例,攻击者可以利用其在操作时序设计上的漏洞,通过自编程序消除加密锁定位后,停止消除单片内程序存储器数据的操作,从而将加密的单片机变为无加密状态,随后使用编程器读取单片...

芯片破解芯片破解方法
电子探测攻击是一种以高时间分辨率监控处理器在正常操作时的电源和接口连接的模拟特性的方法。通过分析和检测这些变化,可以获取单片机中的特定关键信息。例如,RF编程器可以直接读出老型号加密MCU中的程序,就是采用这一原理。这种方法利用单片机作为活动电子器件在执行不同指令时,对应的电源功率消耗相应变化的...

相似回答