查看: 841|回复: 0

[讨论] 单片机行业里的4大硬件加密方法

[复制链接]
  • TA的每日心情

    2018-11-20 13:41
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2019-10-10 09:23:17 | 显示全部楼层 |阅读模式
    分享到:
    我们知道,研究一套可行实用的单片机系统肯定要花大量的人力和物力。为了使所研制的系统不被别人所剽窃,保护知识产权,通常在单片机系统设计时,都要进行加密设计。加密设计一般有硬件加密和软件加密。而硬件加密的方法很多,可以采用PAL、GAL等芯片将CPU与ROM之间的地址线或数据线按一定密钥规律进行交换,这样就把原程序页号打乱,起到加密作用。但这里探讨的是几种简单的硬件加密技术。

    1.硬件加密设计步骤


    1.1 根据具体项目和任务,设计目标程序并在未加密情况下调试成功。

    1.2 设计硬件加密电路

    1.3 对调试好的软件按硬件电路进行加密翻译,不同的硬件加密电路翻译出来的软件不同。

    1.4 将加密翻译后的软件写进EPROM。

    这样,剽窃者将得到的EPROM里的程序进行反汇编后,不在是原来的程序,甚至是逻辑关系混乱毫无价值的代码。从而保护了原设计者的利益。

    2. 硬件加密电路的设计

    为方便说明硬件加密原理和软件加密翻译方法,先列举一例题,以下论述均以该例子为研究对象。

    例1 比较两个无符号数的大小,设两个无符号数事先分别存在RAM里的30H和31H单元,若(30H)里的数大,则累加器的A.0~A.3为高电平;若(31H)里的数大,则累加器的A.4~A.7为高电平;若两数相等,则累加器的A.2~A.5为高电平。试设计汇编程序实现。


    该例题所设计的原程序、机器代码和存储单元如下:





    2.1 硬件加密方法一

    将数据线中某几根线换位,如图1所示。将图中数据线D1、D2交叉,这样单片机系统执行的实际代码就与EPROM中存储的代码完全不同了。若将例1的程序存入EPROM ,那么存入的实际代码就要做相应的加密翻译,以使单片机从EPROM中所取的代码正确。

    加密翻译后在EPROM中实际存的代码和反汇编的结果如下:


    P2.0~P2.4P0.3~P0.7P0.2P0.1P0.0ALEPSENCPU8031


    74LS373


    A8~A12A3~A7A2A1A0 2764OE CED3~D7D2D1





    2.2 硬件加密方法二:

    将CPU和EPROM间的地址换位,如图2所示,将地址线A0、A1换位交叉,这样单片机系统程序存在EPROM中的代码不变,但存储顺序完全打乱。若将例1的程序存入EPROM时,为保证单片机的正常工作,要将存储代码的顺序按硬件电路要求做相应的改变,即进行加密翻译,加密翻译后EPROM中存储的实际代码和反汇编的结果如下:



    从反汇编的结果看,既是剽窃者取出EPROM里的程序代码,反汇编后也得不到原来的程序了。

    2.3 硬件加密方法三

    将CPU和EPROM间的数据线某些位经过三态反相器求反。如图3所示,将数据线D0、D1分别求反后送CPU,这样存在EPROM里的程序和原来的程序就不同了。若将例1的程序按硬件加密电路进行软件加密翻译后,存在EPROM里的实际代码和反汇编后结果如下:

    P2.0~P2.4P0.2~P0.7P0.1P0.0 ALEPSENCPU8031


    74LS373


    A8~A12A2~A7A1A0 2764OE CE D2~D7D1D0




    可见经硬件加密后,存在EPROM里的代码与原来代码完全不同。

    2.4 硬件加密方法四

    将CPU和EPROM间的地址线的某些位求反。如图4所示,将地址线A0、A1求反,这样存在EPROM里的代码内容不变,但代码的存储顺序要按硬件电路相应改变。若仍以例1为例,将该程序代码加密后,存在EPROM里的代码和反汇编后的结果如下:

    A8~A12A2~A7A1A0OE CE2764D2~D7D1D0


    P2.0~P2.4P0.2~P0.7P0.1P0.0 ALEPSENCPU8031


    74LS373



    可见将EPROM里的代码反汇编后,仍得不到原程序。

    总结


    坚持不懈的尝试突破保护机制的破解团体和不断引入新的安全防范方案的制造商之间的斗争是没有尽头的。 “道高一尺,魔高一丈”,又或是“邪不压正”,将不停的在两派之间上演。其实软件加密原理很简单,就是利用单片机IC厂商,为每片出厂芯片的某一特殊全球唯一识别参数,即ID号做为密钥,对程序进行加密。如果以本ID号的程序烧到另一ID号的芯片中,程序中经软件加密过的部分的功能将完全失效。


    要解密上述经软件加密过的程序,唯一的途径,就是反汇编程序,分析单片机反汇编后的汇编程序,将程序中软件加密相关的密钥去掉,然后编译得到新的程序。这项工作需要的不只是耐心,更多的是专业知识与经验。










    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 19:19 , Processed in 0.124114 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.