基于PIC16C54单片机的智能软件狗设计
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打印作业无影响。实验结果表明,本软件狗有比较好的安全性、通用性和稳定性。