1GAL 器件简介
通用阵列逻辑GAL 是采用先进的EECMO S 工艺制造的大规模数字集成电路, 是专用集成电路A S IC的一个重要分支。GAL 器件具有高速、低耗、可重编程、可测试、保密性及结构灵活等特点, 是一种新型的数字逻辑器件。GAL 器件自身有1 位保密位, 该保密位能防止对阵列组态模式的非法复制。一旦该保密位被编程加密,对阵列单元的任何访问即被失效, 从而防止了进一步编程或检验出阵列信息。仅当器件被整体擦除时, 该单元才能与整个阵列的单元一起被擦掉。所以, 当此保密位被编程设置后, 原设计的模式将永远不能被检查。但是,该器件仍可被正常使用并执行用户设计的功能。
2EPROM 程序的加密原理
MCS51 系列的8751 等内部的程序存储器是可以加密的, 当对8751 内部EPROM 加 密编程后, 就无法读出单片机内部的程序。这类芯片目前常规方法无法解密, 只能由系统外特性反推其程序功能。但8031 等芯片内部没有程序存储器, 必须在片外增加程序存储器EPROM , 而E2PROM 芯片中内部译码结构是不可改变的, 也就是说, EPROM 芯片本身是不可加密的内部阵列, 用户可通过编程工具读出其内代码经反汇编得到源程序而“失密”。 在一般的单片机系统中, 数据线和地址线是按顺序与EPROM 的数据线和地址线依次相连接的。E2PROM 芯片加密是将EPROM 芯片的地址线或数据线重新定义后重新连接, 地址线或数据线的变换部分的逻辑关系由GAL 器件来实现。这样, 虽然EPROM 芯片是任何一个有编程工具的人都能复制的, 而起译码作用的GAL 器件被加密后不能复制。只有这两者同时作用, CPU 才能正确识别和启动EPROM 芯片内的软件代码, 从而使EPROM 中的程序得到保护。具体的加密方法有很多种, 可以只对EPROM 的数据线或地址线错位连接或逻辑变换来进行简单的加密, 也可同时对EPROM 的数据线和地址线进行各种逻辑运算操作, 以达到加密的目的。 加密电路原理如图1 所示:
3加密的方法
加密电路的软件设计步骤是: ①在开发系统或仿真机上设计软件程序; ②把已调好的程序送微机内存某一空闲区, 然后按加密逻辑用加密程序把调好的目标程序加密; ③将加密后的程序重新写入EPROM 中。 加密逻辑不同, 其加密程序也不同。在下面的方法中, 采用常用的GAL 16V 8 芯片, 对EPROM 的数据线进行加密。其中GAL 的编程采用常用的ABEL 语言,加密程序采用8086 宏汇编语言。 ABEL 源程序清单: module EPROMJM title ’EPROM DA TA BU S JM 1995, 12, 28’ JM device ’P16V 8C’; D0,D1,D2,D3,D4,D5,D6,D7 P IN 1, 2, 3, 4, 5, 6, 7, 8; DD0,DD1,DD2,DD3,DD4,DD5,DD6,DD7 P IN 19, 18, 17, 16, 15, 14, 13, 12; CS P IN 11; EQUA T ION S DD0= D0; DD1= ! D0&! D1+ D0&D1; DD2= ! D0&! D2+ D0&! D2; DD3= ! D0&! D3+ D0&D3; DD4= D4; DD5= D5; DD6= D6; DD7= D7; ENABL E DD0= ! CS; ENABL E DD1= ! CS; ENABL E DD2= ! CS; ENABL E DD3= ! CS; ENABL E DD4= ! CS; ENABL E DD5= ! CS; ENABL E DD6= ! CS; ENABL E DD7= ! CS; END 相应的加密程序: (假设未加密的EPROM 程序放内存6000H 段, 长度为1000H) ; jm 2764 d0’= d0, d1’= ! d03 ! d1+ d03 d1, ; d2’= ! d03 d2+ d03 ! d2, ; d3’= ! d03 ! d3+ d03 d3, ; d4’= d4, d5’= ! d5, d6’= d6, d7’= d7 stacksegment stack ’stack’ stackends code segment myp rocfar assume cs: code, ds: code, es: code start: push ds mov ax, 0 push ax mov ax, 6000h mov ds, ax mov si, 0 mov di, 0 mov cx, 1000h again: clc mov al, [ si] sh r al, 01 jnc jm l rcl al, 01h mov bl, al and al, 24h no t al and al, 24h and bl, 0dbh add al, bl pd: mov[ si], al inc si dec cx jnz again ret jm l: rcl al, 01h mov bl, al and al, 2ah no t al and al, 2ah and bl, 0d5h add al, bl jmp pd my endp code ends end start 在这样的单片机系统中, 如果单片机执行的实际 程序为DALL YA 1A SM : 0000753003DL: MOV 30H, # 03H 00037531F0DL 0: MOV 31H, # 0F0H 0006D531FA DL 1: DJN Z 31H,DL 0 0009D530F7DJN Z 30H,DL 0 000C22RET 则把EPROM 中的代码读出来, 经反汇编成为 DALL YB1A SM: adc dx, [bx+ di] pop ss sbb bl, [bp+ si] pop ss adc dx, [bx+ di] pop ss adc ax, 1a6c db 6e adc [bx ], dx adc ax, 656c db 6e adc [bx ], dx sbb ch, [ si+ 13 ] sbb [bx+ si], bl xo r [bp+ si], ch 由此可见, 源程序已面目皆非, 而且该子程序的未尾已不再返回指令, 因而整个程序无法执行。实际应用时, 在EPROM 中放的是DALL YB1A SM 程序代码,只有采用我们所举例中的GAL 逻辑关系被读出时,才会形成DALL YA 1A SM 程序。当把此EPROM 中的程序代码在常规的单片机上进行反汇编时, 就会出现DALL YB1A SM 的程序形式, 从而达到加密的目的。
4结束语
GAL 器件是理想的可编程逻辑器件, 它的结构是通用的, 阵列输出采用宏单元法, 使用户能对每个输出单元规定其组态和功能, 有十分广泛的应用前景。