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

上传人:marr****208 文档编号:117575200 上传时间:2019-12-05 格式:DOC 页数:13 大小:251KB
返回 下载 相关 举报
51单片机程序进行软件加密和硬件解密的方法_第1页
第1页 / 共13页
51单片机程序进行软件加密和硬件解密的方法_第2页
第2页 / 共13页
51单片机程序进行软件加密和硬件解密的方法_第3页
第3页 / 共13页
51单片机程序进行软件加密和硬件解密的方法_第4页
第4页 / 共13页
51单片机程序进行软件加密和硬件解密的方法_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《51单片机程序进行软件加密和硬件解密的方法》由会员分享,可在线阅读,更多相关《51单片机程序进行软件加密和硬件解密的方法(13页珍藏版)》请在金锄头文库上搜索。

1、51单片机程序进行软件加密和硬件解密的方法 由于固化在片外EPROM 里的单片机程序容易复制,所以,如不在技术上采取保护措施,则程序中所采用的处理方法易被他人分析仿制。对单片机程序进行加密是一种有效的保护措施,也是一项实用的技术。虽然本身带有EPROM 的单片机可做到程序保密,但由于价格和存储容量方面的原因,用户仍常常采用外接EPROM 的单片机来开发产品。 本文以MCS - 51 单片机为例介绍一种对片外E2PROM 里的程序进行软件加密和硬件解密的方法。这种方法不增加用户应用程序开销。 1 基本原理 我们知道,

2、异或运算有这样的特点: A Ý B Ý B =A ,亦即当用变量B 对变量A 作偶数次异或运算后,其结果恢复为变量A。例如A = 32H , B = 5EH ,则AÝ B 的结果为6CH ,该结果再与变量B 作异或运算,即6CH Ý 5EH 就得到变量A 的值32H。因此,我们可以利用这一特点给单片机程

3、序加密和解密。 51 系列单片机在对外部程序存储器ROM 和外部数据存储器RAM 操作时采用两套不同的指令,在对RAM 操作时用MOVX指令,并产生相应的读(RD) 和写(WR) 信号,而当对外部ROM 进行读操作时不用RD信号,而是有一条专给外部ROM 使用的“读”数控制信号(PSEN) 线。亦即外部RAM 和ROM 的控制信号是严格分开的。这就为利用异或运算给外部ROM里的程序进行加密后固化、解密后执行提供了条件。 这种方法的思路是:首先对欲固化到外部ROM里的目的代码(原代码)&

4、nbsp;进行第一次异或运算(加密) ,再把加密后的代码固化到ROM 里,程序运行时由硬件对从ROM 读出的加密代码进行第二次异或运算(解密) 变为原代码后送到数据总线。这样,外部ROM 里固化的是加密代码,即便该代码被复制也反汇编不出原程序。另外该程序的执行还需相应的解密电路支持。 图1 是可以在实际中应用的单片机解密电路。当CPU 对片外EPROM(U04) 进行“读”操作时,控制信号PSEN为低电平,这时U04 送出八位加密代码(RD0RD7) 并和“密钥”经由U05 、U06 

5、组成的异或运算电路作第二次异或运算(解密) 得到原代码,该代码经三 态缓冲器(U07) 由PSEN信号控制送入数据总线。由于电路中已将单片机的EA脚接地,故片外EPROM 的最低地址为0 。另外,与RD0RD7 一起参与异或运算的另一个数据(“密钥”) 取自当前待解密代码在外部EPROM所在存储单元的低八位地址,并从高位到低位按A0 A2 A4 A6 A1 A3 A5 A7 的顺序组合成新的数据。例如,原地址分别为35H 和36H ,组

6、合后的地址则分别为E2H 和6AH。采用这样的方法确定“密钥”,一是可使一页中的代码中“密钥”不重复,二是由于同页中的代码字节的“密钥”都不同,故很难找到加密规律,可增加破译难度。 2 操作过程 现以SICE 通用单片机仿真器为例说明制作加密程序并固化到片外EPROM 里的操作过程。设程序一是一个待固化到片外EPROM 里执行的用户应用程序。为简便起见,它对外部RAM 的前256 个单元赋于相应的低地址后转入死循环。因为仿真器的出借RAM 为从8000H 开始的24K空间,故应根据程序大小用伪指令把最低地

7、址定位在8000HDFFFH的24K空间里(如程序一中的ORG 8000H) ,否则,无法直接对该程序的目的码进行第一次异或运算。 程序二是对程序一的目的代码(存放于仿真RAM的8000H804AH 中共4BH 个字节) 进行第一次异或加密运算的。要加密的总代码字节数由程序一经汇编后得知。该程序中“密钥”的计算应与硬件电路中送到解密电路的低八位地址线的连接关系相一致。 程序一:MAIN. ASM ORG 8000H SJMP MAIN ORG 8003H RETI ORG 800BH RETI

8、ORG 8013H RETI ORG 801BH RETI ORG 8023H RETI ORG 8030H MAIN : CLR EA CLR RS0 CLR RS1 MOV A , # 0 MOV DPTR , # 0 MOV B , # 0 ACALL SUBR LOOP : NOP SJMP LOOP SUBR : MO

9、VX DPTR ,A INC A INC DPTR DJNZ B ,SUBR NOP RET END 程序二:XORM. ASM XORM: MOV R0 , # 4BH 置欲加密代码字节数 MOV DPTR , # 8000H 置程序一首地址 LOP1 : MOVX A , DPTR PUSH ACC MOV A ,DPL 取

10、代码单元的低地址 MOV B ,A MOV C ,B. 0 组合新数据开始加密 MOV ACC. 7 ,C MOV C ,B. 2 MOV ACC. 6 ,C MOV C ,B. 4 MOV ACC. 5 ,C MOV C ,B. 6 MOV ACC. 4 ,C MOV C ,B. 1 MOV&nb

11、sp;ACC. 3 ,C MOV C ,B. 3 MOV ACC. 2 ,C MOV C ,B. 5 MOV ACC. 1 ,C MOV C ,B. 7 MOV ACC. 0 ,C POP B XRL A ,B “异或”产生加密代码 MOVX DPTR ,A 加密代码存入原单元 INC DPTR DJNZ R

12、0 ,LOP1 NOP STOP : NOP 首先把程序一调入仿真器汇编,目的是得到总的代码字节数。即键入如下内容(带下划线的为键入内容,否则为显示内容) 。 > ASM51 | FD ASM251 V3. 0 Copyright 1989 Microcomputer Lab. Fudan University No ERROR Display List ? ( Y/ N) N&n

13、bsp;| Next adr :804B 记下程序一的末地址为804BH ,由此可知总代码字节数为4BH。再把程序二添加到程序一的末尾(RET 指令后,END 伪指令前) ,调入仿真器后再汇编。即: > ASM51 | FD ASM251 V3. 0 Copyright 1989 Microcomputer Lab. Fudan University No ERROR Display List&nbs

14、p;? ( Y/ N) N | Next adr : 8081 > EXIT | 退到监控状态 3 MAP 3 | 仿真RAM 出借(8000HDFFFH) 3 DX 8000 | 显示未加密代码(原代码) 8000 : 80 2E 5B 32 CD 90 07 98 A4 C0&n

15、bsp;5C 32 C9 94 03 9C 8010 : 80 E4 78 32 ED B0 27 B8 84 E5 6F 32 E9 B7 29 B8 8020 : 40 22 4F 32 72 4F 18 8F 52 CF 83 C3 12 92 F4&

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号