关键词:单片机 软件狗 数据加密
随着各种计算机应用软件、工具软件的涌现,由此引起的计算机知识产权案件层出不穷,引出了计算机安全保密技术在计算机软件版权保护中应用的新课题。实现计算机版权保护的技术方法很多,概括起来可以分为三大类:软件法、硬件法、软硬件结合法。软硬件结合法结合了软件法和硬件法的特点。从软件设计上增加反跟踪的难度,从硬件上增加仿制和状态分析难度。硬件部分主要完成状态加密和检查。软件狗是一种插在PC打印口上的用于应用软件版权保护的设备。商品化的软件狗产品向用户提供软件狗硬件、应用程序定制工具、应用软件和软件狗的接口程序库。从硬件结构方面讲,软件狗的发展已经历了五代。第一代简单地将打印机的控制或数据线与状态线通过电阻或二极管连接;第二代增加了一些门电路,将某些控制线或数据线经过简单的逻辑运算后输出到状态口线上;第三代使用GAL或EPROM器件;第四代使用串行EEPROM器件;第五代在第四代的基础上增加了微处理器,因此称为智能型软件狗。本文介绍的软件狗使用软硬件结合法,属于第五代软件狗。
图1 电路原理图
1 硬件原理
由于软件狗插在PC打印口上,因此软件狗的硬件设计除了满足其软件保护功能外,还必须着力解决如下三个问题:由于PC的打印口没有提供电源线,要使单片机和串行EEPROM芯片工作,就必须想办法为它们提供电源,并且必须采用低功耗设计;不能影响PC对打印机的正常操作;硬件成本必须足够低。
PIC系列单片机是使用Harvard总线和RISC结构的单片机,具有功耗低、高速、开发容易、价位低、体积小等特点。93C46B是采用CMOS工艺制造的64×16bit结构8引脚的串行可用电擦除可编程只读存储器,同样具有功耗低、价位低、体积小等特点。这两种器件能够满足对硬件设计的低功耗和低成本的要求。
图1为本软件狗的电源原理图。包括PIC16C54及93C46构成的单片机系统、复位电路电源电路三部分。
图1中,R5、C3组成系统上电复位电路;D2、D3、C2组成系统电源电路;D1、R1、R2、C1组成PIC16C54的外部RC振荡电路;PIC16C54通过其A口控制93C46串行EEPROM;T0CLKI引脚用于监测当前PC是否控制打印机;RB7引脚用于监测PC当前是否与本软件狗联系,并选择单片机当前工作的时钟频率;RB4、RB5、RB6是软件狗向PC方向发送数据的接口信号线;RB0~RB3、RB5是PC向软件狗方向发送数据的接口信号线;R6是PIC单片机工作于外部RC振荡电路方式时推荐的间接接地电阻,有利于系统抗干扰和振荡电路的稳定性;R3、R4用于防止打印机和单片机之间信号发生冲突。
PC打印口中数据线和控制线为输出线,控制线的驱动能力较强。为了不影响打印机的工作,只能选择一根不常用并且不会让打印机误动作的控制线(初始化线IP)为软件狗提供电源。但单片机对串行EEPROM编程时系统需要的功率比较大,因此在软件狗工作时又用了一根数据线(D7)提供更大的电源电流。本软件狗工作于三种状态:当IP和D7都为低电平时,软件狗不工作;当IP为高电平时,软件狗工作于低功耗状态:当IP和D7都为高电平时,软件狗工作于正常状态,此时可以对软件狗进行任何操作。由于IP信号只有在PC系统启动时为高电平,一般情况下驱动程序和应用软件很少对此信号线进行操作,平时此信号线一般保持低电平。因此软件狗控制软件可以将此信号线置为高电平使单片机可靠复位,并进行一定的初始化工作。此时,RC振荡电路的R2为220kΩ,系统工作于<200kHz频率时,软件狗的单片机软件在此状态下不会对串行EEPROM编程,因此软件狗的耗散功率达到最低。当D7信号也被置高时,此时,RC振荡电路的R2|R1<4.7kΩ,系统工作于>4MHz频率时,软件狗进入正常工作状态。
当PC对打印机进行操作时,软件狗不应该往并口输出任何信息。由于PC对打印机的操作总是以将并口的选通线置为高电平开始,因此可以通过对并口选通线的上升沿监测,判断PC是否对打印机开始操作。另外,还通过监测IP信号和D7信号来判断软件狗是否可以开始工作。只有在并口选通信号为低电平,IP和D7都为高时,软件狗才允许向并口信号线输出。
图3 软件狗向PC发送数据的时序图
2 软件设计
软件狗的软件设计有两部分:软件狗的单片机程序和PC程序。单片机程序包括对93C46的操作、与PC通讯接口、数据编码、工作状态控制等功能。PC程序包括本软件狗开发用的测试工具程序、用户定制软件狗的工具程序、软件狗随用户程序发行时的动态链接库程序。测试工具程序用于测试软件狗对串行EEPROM的读写操作、软件狗与PC间的通讯测试;用户定制软件狗的工具程序用于对软件狗设置密码的初始化工作;动态链接库程序为用户的应用程序提供编程接口。单片机程序使用MTLAB集成环境的MTASM开发,PC软件使用VC5.0开发。本文只介绍单片机软件。
2.1 软件狗与PC的通讯
软件狗与PC之间的数据通信方法是自行设计的。PC向软件狗送数据时使用并口的选择输入(SELECTIN,这里称之为PCRDY)线,数据线的D3~D0。单片机在PCRDY信号的下降沿读取数据,每一个字节分两次发送,先发低四位,后发高四位。PC向软件狗方向发送数据的时序如图2所示。
软件狗向PC方向发送数据时使用并口的选择输入(SELECT IN,这里称之为PCRDY)线、应答(ACK,这里称之为DO)线、选择(SLC,这里称之为BUSY)线。软件狗向PC发送数据时按先发低位后发高位的顺序串行地将数据发给PC,一个字节分8次发完。软件狗向PC方向发送数据的时序如图3所示。
PC与软件狗之间的数据通讯遵循“命令一应答”规则,PC发命令,单片机处理完命令后发应答数据。双方可以根据命令及其应答的意义解析数据帧的结构,以校验通讯的正确性。命令与应答数据帧的第一个字节的高四位总是命令或应答代码,低四位总是此命令或应答所带参数的个数。各命令与应答数据帧的结构定义如表1所示。
表1 各命令与应答数据帧的结构定义
功 能 | 代 码 | 参数个数 | 参 数 |
连接命令 | 0 | 8 | 软件狗的序列号 |
连接应答 | 0 | 0 | 无 |
擦除命令 | 1 | 0 | 无 |
擦除应答 | 1 | 0 | 无 |
读ROM命令 | 2 | 1 | ROM的起始地址 |
读ROM应答 | 2 | 8 | 返回读出的数据 |
写ROM命令 | 3 | 1~16 | 第一个字节为ROM的起始地址,后面N-1个字节为写入的数据 |
写ROM应答 | 3 | 0 | 无 |
校验编码命令 | 4 | 9 | 第一个字节为校验功能号,后面8个字节为待编码的数据 |
校验编码应答 | 4 | 9 | 第一字节为校验功能号,后面8个字节为编码后的数据 |
2.2 加密算法
考虑到软件狗使用时不能对应用程序的执行速度产生较大影响,对DES加密算法分析后进行了简化,用来对数据进行加密。DES加密算法的核心思想是使加密后的数据没有显著的变化规律,一个方面使不同被加密数据加密后,原始数据一位的变化会引起后密后数据多处无明显规律变化,即变化扩展原则;另一方面使用密钥,密钥的作用是将被加密数据与之进行运算以改变原始数据。综合这两个方面的原则,采取了将被加密数据“换位一与密钥异或”8次的加密方法。这种方法实现比较简单,且将被加密数据与原来数据比较,不同的被加密数据间的加密结果比较,很难发现其中规律,加密效果不错。
整个系统的加密原理是PC利用系统时间产生一个随机数,将此随机数发送给软件狗,软件狗对此进行加密返回加密结果,PC自己也对此进行加密将自己的加密结果与软件狗的加密结果进行比较。另外,每一个软件狗都有一个序列号,连接时必须提供正确的序列号才能连接进行其它工作。同时序列号也用于区分不同的软件狗,使得多个软件狗可以插在同一个并口上正常工作。每个软件狗可以设置16个不同的密钥,用户可以为应用程序的不同功能模块设置不同的密钥。
2.3 程序流程
PIC16C54单片机的程序流程如图4所法。设置OPTION:初始化单片机的工作模式;设置PORTB、清除RAM:位于单片机空闲循环体内,设置PORTB的输出方向,软件狗在空闲时对打印口无影响;接收命令:接收PC发出的数据,按照软件狗与PC的通信规则进行解释;处理命令:一个CASE结构的程序体,根据命令含义执行不同功能;返回命令处理结果;按照软件狗与PC的通信规则向PC返回应答信息。
笔者使用WKPE、DOG、DOGGIE等打狗软件对本软件狗进行了破解实验,这几种软件无法破解本软件狗。另外本软件狗在若干种品牌机和兼容机上进行了测试,都可以正常工作并且对Windows打印作业无影响。实验结果表明,本软件狗有比较好的安全性、通用性和稳定性。