历史上的今天
返回首页

历史上的今天

今天是:2025年03月10日(星期一)

正在发生

2018年03月10日 | 单片机程序的动态加密方案

2018-03-10 来源:eefocus

    众所周知, 有一些公司或个人专门做单片机的解密服务,另外,单片机的指令不论怎样加密最终它还要在明文的方式下才能运行, 而且解密者可以使用单片机开发系统单步调试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中的程序无法在复制的单片机系统中运行。在实际应用中,判断程序正常运行与被跟踪运行是有很多方法的。例如,可以根据时钟计时断定某个程序段运行的时间, 以便作出不同的反应, 因为单步与连续运行在时间上是有很大差别的。另外, 对单片机的加密不能仅限于上述的一种方法,而且反跟踪的方法也不能单一, 要几种方法配合使用才能达到好的效果。如软件加密与硬件加密相结合,动态解码可与程序防修改相结合等,充分利用新技术、新方法(如可编程逻辑器件等)使单片机的加密保护更有效。


推荐阅读

史海拾趣

Geyer Electronic E K公司的发展小趣事

Geyer Electronic E.K.公司的发展故事

故事一:创立与初步发展

Geyer Electronic E.K.公司由Rudolf Geyer于1964年创立,最初是一家位于慕尼黑莱姆区的电子产品零售店。在那个年代,电子产品行业正处于快速发展阶段,Geyer凭借其敏锐的市场洞察力和对技术的热情,逐渐在市场中站稳了脚跟。起初,店铺销售各类电子产品,从简单的收音机到复杂的电子设备,一应俱全。随着时间的推移,Geyer Electronic凭借其优质的服务和丰富的产品线,逐渐赢得了当地消费者的信任和支持。

故事二:转型与专业化

1992年,Geyer Electronic经历了一次重要的转折点。在Jürgen Reichmann的领导下,公司被收购并进行了战略调整,正式转型为一家专门从事频率产品和特殊电池的公司。这一转型标志着Geyer Electronic开始专注于某一特定领域,并致力于在该领域成为行业的领导者。公司投入大量资源进行技术研发和产品创新,不断推出符合市场需求的高质量频率产品和特殊电池,逐渐在行业内树立了良好的口碑。

故事三:全球化布局

随着业务的不断扩展,Geyer Electronic开始将目光投向全球市场。公司不仅在欧洲建立了稳固的市场地位,还逐渐将业务拓展到亚洲和美国等其他地区。为了实现全球化战略,Geyer Electronic加强了与全球合作伙伴的合作与交流,共同推动频率产品和特殊电池技术的创新与发展。同时,公司还建立了完善的全球销售网络,确保产品能够在短时间内送达全球各地的客户手中。

故事四:认证与品质保证

为了进一步提升产品质量和客户满意度,Geyer Electronic积极寻求国际认证。公司通过了DIN ISO 9001:2015等国际质量管理体系认证,这标志着Geyer Electronic在质量管理方面已经达到了国际先进水平。通过严格的质量控制和持续的技术创新,Geyer Electronic不断推出高品质的频率产品和特殊电池,赢得了全球客户的广泛认可和信赖。

故事五:搬迁与未来发展

为了满足未来发展的需要,Geyer Electronic于2022年搬到了位于Planegg的新公司所在地。这次搬迁不仅为公司提供了更加宽敞和现代化的办公和生产环境,还为公司未来的发展奠定了坚实的基础。在新的起点上,Geyer Electronic将继续秉承“质量第一、客户至上”的经营理念,不断推动技术创新和产品升级,为全球客户提供更加优质、高效的服务和解决方案。同时,公司还将积极探索新的市场领域和发展机遇,努力成为全球电子行业中的佼佼者。

Gwconnect (Molex)公司的发展小趣事
通过超声波发射电路产生的高频振动来清洗物体表面的污垢和油渍,具有清洗效果好、不损伤物体表面等优点。
Cosel公司的发展小趣事

在电子行业,技术创新是企业发展的关键。Cosel公司深知这一点,因此在发展过程中不断引进先进的技术和管理理念。1979年,公司引进了质量控制圈(QC circle)活动,通过全员参与的方式提高产品质量和客户满意度。随后,公司又引进了TQC(全面质量管理)和方针管理,进一步提升了企业的运营效率和产品质量。这些举措使得Cosel公司的产品在市场上获得了良好的口碑。

Advanced Detector Corp公司的发展小趣事

随着全球市场的不断开放和经济的全球化,ADC开始将业务拓展至全球范围。公司在全球各地设立了分支机构,并建立了完善的销售和服务网络。通过全球化布局,ADC成功打开了新的市场,提升了品牌影响力,实现了业务的快速增长。

Everspin Technologies公司的发展小趣事

2010年,Everspin在北京召开了一场盛大的媒体发布会,正式推出了其16MB MRAM存储器产品。这款产品的推出标志着Everspin在MRAM技术领域的领先地位。该产品在市场上受到了广泛关注,不仅因其存储容量大,还因其独特的数据持久性和非易失性特性,使得关键任务数据即使在断电的情况下也能得到保护。

ABC [ABC Taiwan Electronics Corp]公司的发展小趣事

ABC Taiwan Electronics Corp成立于上世纪八十年代,起初只是一个小型电子零件加工厂。面对激烈的市场竞争和有限的资源,公司创始人凭借对电子技术的深刻理解和敏锐的市场洞察力,带领团队不断研发新产品,逐步赢得了客户的信任。通过不断积累经验和扩大规模,ABC逐渐在电子零件加工领域站稳了脚跟。

问答坊 | AI 解惑

求助

本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 有谁知道NE555怎样吸收高高频 …

查看全部问答>

SD卡底层驱动源程序公开------【注意】我的MP3开发板回来了

本程序参考自bozai的SD卡驱动程序, 增加了SD、MMC卡判断的功能,SD、MMC初始化成功后能返回卡的类型参数供主程序使用。 //--------SD_MMC.H------------------------ #ifndef __SD_MMC_H__ #define __SD_MMC_H__ // 数据宏定义 #define ...…

查看全部问答>

爆漿撒尿電容特輯(转自 台湾 xfastest 港都狼仔)

非常好的文章,我就喜欢这样的图文并茂的,分享之 ,在此心里谢过狼仔兄 爆漿撒尿電容特輯       (转至 台湾 xfastest 港都狼仔) 在下無聊時喜歡收集故障電子產品,分析故障原因,下面的圖片是這段時間以來,收集關於電容異 ...…

查看全部问答>

ATOM 平台项目外包

我们公司最近要做个ATOM平台的移动设备,希望有经验的free lancer或公司与我联系。以下的资料仅供参考: Experience must include a successful implementation of an Atom based system that went into commercial production. Experience must h ...…

查看全部问答>

咨询将ADS1.2编译的库和arm-elf-gcc编译的库混编(互相调用)的问题

在论坛里看到有人解决了此问题,但没有发表解决的方法。 再次,咨询此问题,希望知道的高手,指导一下。 谢谢了!…

查看全部问答>

{wanyeye}助人者天助 ,进来下

wanyeye:         您好,我有个串口的问题想请教您,您能给我留个联系方式吗?或则您加我   也可以,我的QQ:834496420,谢谢你…

查看全部问答>

初学开门难,请教各位前辈..谢谢..2812 

基本的问题,.cmd文件怎么编写?写的过程中要注意些什么问题?       2812的头文件那里可以找到?       开始编程需要哪些准备工作?…

查看全部问答>

2407的PDPINTA故障

请问:2407的PDPINTA故障有效时,封锁PWM,之后怎么才能再让PWM恢复输出?谢谢…

查看全部问答>

FPGA的时钟精确度

我想用FPGA产生一个以206.02ns的周期触发信号,spartan-6的FPGA,是否可以实现?求大神指导…

查看全部问答>