现在的智能测试仪器和装置大多采用单片微型计算机作为其微处理器
1 为增加技术的保 密性,对设计的硬件和软件的保密方法和措施日益增多. 单片机系统中硬件多采用GAL 器件 和其他的可加密元件作为加密手段. 通过不同的逻辑关系组合和相应的措施,可以在硬件上起 到保护作用1 但现在反汇编软件的功能也逐渐加强,仅仅采用一种方法是难以起到预期作用 的1 硬件和软件相结合的方法正得到广泛的应用,具体方法多种多样. 配合软件在硬件中对数 据线和地址线相交换是采用比较多的一种措施1 本文介绍了实现这一方法的具体做法,并重 点讨论了在对EPROM编程时应该采用的正确做法,最后利用C 语言对实现的软件进行了编 制1 经使用证明此方案是切实可行的.
1 MCS51 系列单片机汇编语言汇编后的格式特点
文中以MCS51 系列单片机为例加以分析. 汇编语言由一组代码组合而成,只有 经过汇编后形成机器代码才能写入到程序存储器中供微处理器使用. 如有一段文件 名为DEMO1ASM 的简单汇编语言,经采用MASM511EXE 文件汇编后形成的16 进制格式文 件为DEMO1HEX: ; - - DEMO1HEX1997 - 10 - 18 :1000000075816075A8007920900016E493A3120012 :100010003ED9F80001130001020304050607080990 :100020000A0B0C0D0E0F10111213141516171819B8 :100030001A1B1C1D1E1F20212223242526270022D7 此文件的格式特点是:每行共有43 个字符,第1 ,2 ,3 为标志符号,第4 ,5 ,6 ,7 为起始地 址,第8 ,9 为00 ,第10 位开始到第41 位共有32 个字符(16 个字节) 程序代码,最后两个是本 行所有程序代码的和,用以校验.
2 硬件加密的两种常用方法
硬件加密的目的,一是使仿制者无法了解硬件的结构特点,特别是某种关键可加密器件的 使用更加大了硬件解密的难度;另一方面可以起到加密软件的作用,使利用一般方法反汇编出 的软件与原始程序完全不同,有时会出现很多问题,根本不能反汇编,起到保护软件的目的.
211 数据线交换
正常的数据线接法应该是把数据总线的D0~D7 按顺序依次接到EPROM 的数据线1 如果在进行硬件设计和印制板制作时对数据线的某些位相互交换,则可实现硬件中的数据加密措施. 利用此方法设计的电路如按通常的程序存储器编程方法进行编程(写程序片) ,则系统不能正常工作. 只有按数据交换的同样方法交换编程时的数据线写出的程序片才能使用. 但编程器具有许多各种各样功能. 如果改线,则对其他芯片(如 EEPROM、RAM、GAL 等) 均不能正常使用. 即便是其他设计中的EPROM ,也不能正常读出和写入. 因此,这种方法不值得提倡. 经过对汇编后形成的HEX 文件格式的分析,采用软件方式实现上述目的,即把文件中相应的数据进行调整和交换.下面以同时交换D0~D1、D4~D5 为例进行分析说明. 由于D0、D1 和D4、D5 都是一个16 进制数据中的低两位,因此在交换后同一字节中的高低数字的互换方式是一致的.
由表1 可知,只要把HEX文件中的数据1 和2、5 和6、9 和A、D 和E相互交换,即完成了数据线交换的目的.
212 地址线的交换
同样,对EPROM的地址线进行交换,亦可以达到211 中之目的. 例,把A0~A1 进行交换后,为使编程后的程序正常运行,必须在HEX文件中完成下表的地址交换.例如,HEX文件中一段起始地址为XXXOH的数据
3 实现数据和地址“线”交换的C 语言程序
311 C语言的编程[1 ,2] 数据交换和地址交换同时使用. 如果再配合GAL 等其他可加密芯片,在一定程度上可以做到对系统设计的保密性1 为实现对E2PROM的正确编程,采用C语言编制一段程序,完成HEX格式文件的转换. 基本思路是:从第一行的第10 个字符开始,一次取8 个字符(4个字节) ,首先按照表1 中方法把数据进行转换,然后再按表2 的方案进行相应地址数据的交换,依次类推直到文件结束,在此程序中用到两个文件的操作,一个是欲转换的HEX格式文件,是按读方式操作的,第二个是转换完成后存放的文件,是按写方式操作的. 此程序文件名设为TLX1C,在Turbo C 210 环境下编译后形成TLX1EXE 文件. 实现的软件流程如附图所示.
312 实例
同样以文件DEMO1HEX为例说明,在DOS 下执行TLX文件后,屏幕提示输入文件名. 此时输入文件名:DEMO1HEX,屏幕继续显示有关转换信息,在转换完成后得到的文件名为ADEMO1HEX,用任何编辑软件可以看到经转换后的文件如下所示: ; ———ADEMO1HEX1997 - 10 - 18 :1000000076508276987A0010A02500D4A321930012 :100010003DF8EA0002002302010403060508070A90 :10002000090C0B0E0D200F22212423262528272AB8 :10003000292C2B2E2D102F121114131615001711D7 转换后的HEX文件在大多数编程器中均可正常操作,写入E2PROM可正常工作;若出现不对的情况,可执行HEXOBJ1EXE 程序,把ADEMO1HEX十六进制格式文件转换成DEMO1BIN 的2 进制文件,问题便得到解决.