新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 对单片机及其程序的运行上加密解析方案

对单片机及其程序的运行上加密解析方案

作者:时间:2012-06-01来源:网络收藏

众所周知, 有一些公司或个人专门做的解密服务,另外,的指令不论怎样最终它还要在明文的方式下才能, 而且解密者可以使用开发系统单步调试ROM中的。当解密者了解了指令的过程之后, 也就获得了, 如某些智能计价器的运算方法等,通过修改并仿制新的ROM芯片, 就可以达到解密的目的。因此,对单片机的还要在程序的上进行加密处理, 也就是程序的动态加密措施。

本文引用地址:http://www.eepw.com.cn/article/171383.htm

1 程序的动态解码

动态解码是对加密程序的指令或数据代码进行动态恢复。在程序运行时, 有一段指令是专门对某一区域的指令或数据代码解密, 而且当解密后的代码使用完毕, 还要将其重新加密, 使存储器中不存在完整的程序代码。这种方法对防程序的静态分析很有效, 因为从加密程序的清单上很难看出程序的真实面目。然而,在程序的反跟踪方面, 动态解码又有其独到之处, 在阻止带断点调试跟踪方面, 由于程序在执行之前是以密文方式出现的, 解密者很难确定断点设置的位置, 稍有不慎就会因解密失败造成系统的破坏(电擦除EPROM中的数据)。下面是程序动态解码的具体例子:

……

SUB1: ADD A,#94H ;虚设的程序段

XRL 54H,#13H

……

MOV R0,#20H

MOV R1,#5

MOV R2,#55H

MOV DPTR,#SUB1

MOV A,#00H

LOOP1: PUSH A

MOVC A,@A+DPTR

XRL A,R2 ;异或运算

MOV @R0,A ;存入实际数据

POP A

INC A

INC R0

DJNZ R1,LOOP1

……

该程序是将RAM地址为20H开始的数据组(设有5个)进行动态变换, 因为初始的数据组是密码形式的, 它需要在程序运行中改变,在程序的其他段中要使用改变后的数据。这里是用SUB1程序段中的指令代码(代码为:24H,94H,63H,54H,13H)与55H进行动态解码,数据55H是加密数据,它异或指令代码后得到正确的数据存入20H开始的单元中(结果为:71H,C1H,36H,01H,46H)。为了说明动态数据解码过程, 这个例子比较简单, 实际在转入该程序段时, 可以由某些运算生成数据单元地址, 以增强程序的抗分析能力。

2 程序段防修改

在加密程序中, 所设置的障碍不会只有一处。为了使加密措施完善, 在一些关键地方程序的前后呼应是反破译的有效方法。解密者为了一些目的, 必然要修改某段程序指令;而程序段防修改就是针对这种解密方法所采用的技术手段。为了达到加密程序的完整性, 可以在程序的关键处取指令或数据代码参加某种运算, 其结果作为判断程序是否被变动的依据。下面是程序防修改的程序段:


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭