打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
51单片机程序进行软件加密和硬件解密的方法

 由于固化在片外EPROM 里的单片机程序容易复制,所以,如不在技术上采取保护措施,则程序中所采用的处理方法易被他人分析仿制。对单片机程序进行加密是一种有效的保护措施,也是一项实用的技术。虽然本身带有EPROM 的单片机可做到程序保密,但由于价格和存储容量方面的原因,用户仍常常采用外接EPROM 的单片机来开发产品。
本文以MCS - 51 单片机为例介绍一种对片外E2PROM 里的程序进行软件加密和硬件解密的方法。这种方法不增加用户应用程序开销。
1  基本原理
我们知道,异或运算有这样的特点: A Y B Y B =A ,亦即当用变量B 对变量A 作偶数次异或运算后,其结果恢复为变量A。例如A = 32H , B = 5EH ,则AY B 的结果为6CH ,该结果再与变量B 作异或运算,即6CH Y 5EH 就得到变量A 的值32H。因此,我们可以利用这一特点给单片机程序加密和解密。
51 系列单片机在对外部程序存储器ROM 和外部数据存储器RAM 操作时采用两套不同的指令,在对RAM 操作时用MOVX指令,并产生相应的读(RD) 和写(WR) 信号,而当对外部ROM 进行读操作时不用RD信号,而是有一条专给外部ROM 使用的“读”数控制信号(PSEN) 线。亦即外部RAM 和ROM 的控制信号是严格分开的。这就为利用异或运算给外部ROM里的程序进行加密后固化、解密后执行提供了条件。
这种方法的思路是:首先对欲固化到外部ROM里的目的代码(原代码) 进行第一次异或运算(加密) ,再把加密后的代码固化到ROM 里,程序运行时由硬件对从ROM 读出的加密代码进行第二次异或运算(解密) 变为原代码后送到数据总线。这样,外部ROM
里固化的是加密代码,即便该代码被复制也反汇编不出原程序。另外该程序的执行还需相应的解密电路支持。
图1 是可以在实际中应用的单片机解密电路。当CPU 对片外EPROM(U04) 进行“读”操作时,控制信号PSEN为低电平,这时U04 送出八位加密代码(RD0~RD7) 并和“密钥”经由U05 、U06 组成的异或运算电路作第二次异或运算(解密) 得到原代码,该代码经三
态缓冲器(U07) 由PSEN信号控制送入数据总线。由于电路中已将单片机的EA脚接地,故片外EPROM 的最低地址为0 。另外,与RD0~RD7 一起参与异或运算的另一个数据(“密钥”) 取自当前待解密代码在外部EPROM所在存储单元的低八位地址,并从高位到低位按A0 A2 A4 A6 A1 A3 A5 A7 的顺序组合成新的数据。例如,原地址分别为35H 和36H ,组合后的地址则分别为E2H 和6AH。采用这样的方法确定“密钥”,一是可使一页中的代码中“密钥”不重复,二是由于同页中的代码字节的“密钥”都不同,故很难找到加密规律,可增加破译难度。
2  操作过程
现以SICE 通用单片机仿真器为例说明制作加密程序并固化到片外EPROM 里的操作过程。设程序一是一个待固化到片外EPROM 里执行的用户应用程序。为简便起见,它对外部RAM 的前256 个单元赋于相应的低地址后转入死循环。因为仿真器的出借RAM 为从8000H 开始的24K空间,故应根据程序大小用伪指令把最低地址定位在8000H~DFFFH的24K空间里(如程序一中的ORG 8000H) ,否则,无法直接对该程序的目的码进行第一次异或运算。
程序二是对程序一的目的代码(存放于仿真RAM的8000H~804AH 中共4BH 个字节) 进行第一次异或加密运算的。要加密的总代码字节数由程序一经汇编后得知。该程序中“密钥”的计算应与硬件电路中送到解密电路的低八位地址线的连接关系相一致。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单片机程序运行加密
程序存储器(program memory)
OTP ROM MCU
MCS
学会这4大硬件加密方法,你就可以在单片机界混了!
8031单片机程序存储器EPROM的扩展实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服