位置:51电子网 » 技术资料 » 单 片 机

单片机系统加密中的动态反跟踪措施

发布时间:2008/9/4 0:00:00 访问次数:557

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

  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  程序段防修改

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

  ……

  sub2: add a,#35h

  subb a,#05h

  ……

  mov dptr,#sub2

  mov r0,#30h

  mov a,#1

  mov r1,#3

  mov @r0,#24h ;sub2段第一个指令代码为24h

  loop2: push a

  movc a,@a+dptr

  xrl 30h,a ;异或运算

  pop a

  inc a

  djnz r1,loop2

  mov a,30h

  ……

  cjne a,#80h,err ;结果与80h比较

  ……

  err: mov a,#0 ;错误出口

  ……

  在sub2程序段, 是通过指令计算某些数据的,如收费的算法等。解密者总要修改部分指令, 达到某种目的。然而, 反解密的工作是在后面的loop2程序段中,是用到了sub2程序段中的指令字节(这里是用了4个字节)进行运算(这里是用"异或"运算),它的结果将直接影响下面程序的正确执行(正确的运算结果为80h)。如果改变该sub2程序段,则在loop2程序段中将程序引入歧途, 会不知不觉地走入迷途。如果在硬件设计上有电擦除eeprom,可以进一步将程序中的数据修改(或删除),使跟踪者造成设备的"损坏",无法重新分析程序。

  上面介绍的单片机加密方法,是阻止解密者非法获得rom中的程序或者使rom中的程序无法在复制的单片机系统中运行。在实际应用中,判断程序正常运行与被跟踪运行是有很多方法的。例如,可以根据时钟计时断

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

  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  程序段防修改

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

  ……

  sub2: add a,#35h

  subb a,#05h

  ……

  mov dptr,#sub2

  mov r0,#30h

  mov a,#1

  mov r1,#3

  mov @r0,#24h ;sub2段第一个指令代码为24h

  loop2: push a

  movc a,@a+dptr

  xrl 30h,a ;异或运算

  pop a

  inc a

  djnz r1,loop2

  mov a,30h

  ……

  cjne a,#80h,err ;结果与80h比较

  ……

  err: mov a,#0 ;错误出口

  ……

  在sub2程序段, 是通过指令计算某些数据的,如收费的算法等。解密者总要修改部分指令, 达到某种目的。然而, 反解密的工作是在后面的loop2程序段中,是用到了sub2程序段中的指令字节(这里是用了4个字节)进行运算(这里是用"异或"运算),它的结果将直接影响下面程序的正确执行(正确的运算结果为80h)。如果改变该sub2程序段,则在loop2程序段中将程序引入歧途, 会不知不觉地走入迷途。如果在硬件设计上有电擦除eeprom,可以进一步将程序中的数据修改(或删除),使跟踪者造成设备的"损坏",无法重新分析程序。

  上面介绍的单片机加密方法,是阻止解密者非法获得rom中的程序或者使rom中的程序无法在复制的单片机系统中运行。在实际应用中,判断程序正常运行与被跟踪运行是有很多方法的。例如,可以根据时钟计时断

相关IC型号

热门点击

 

推荐技术资料

硬盘式MP3播放器终级改
    一次偶然的机会我结识了NE0 2511,那是一个远方的... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!