基于USB软件狗的反解密研究
2009-08-10
作者:陈 芳1, 李 伦2
摘 要: 一种USB加密接口的开发及其反解密技术。在分析USB软件狗安全性的基础上,提出了一系列反解密措施。
关键词: USB 软件狗 反解密
多年来个人计算机的串口与并口的功能和结构并没有什么变化。但是,串、并口不仅速度有限,而且在使用上很不方便。如传统的软件狗安装在并口上,极易与打印机冲突。
USB软件狗是USB接口技术与第四代软件狗技术结合的产物,与其他软件狗相比具有明显优势:(1)USB的数据传输速度快,USB1.1协议定义的USB全速设备的速率为12Mbps,USB2.0定义的高速设备可达480Mbps。(2)USB的底层数据传输具有特定的打包方法和编码格式,这样就增加了加密数据在传输过程中被截获及解密的难度。(3)USB设备的热插拔、即插即用的特性极大地方便了用户的使用,免除了用户开机箱和重启动的麻烦。
目前软件保护方法大致可分为二类:软加密和硬加密。软加密是用纯软件的方式来实现软件的加密,主要包括密码方式、软件的校验方式和钥匙盘方式。硬加密则是利用硬件与软件相结合来实现软件的加密,其典型产品有加密卡和软件狗等。
软件加密狗是一种智能型加密狗,是安装在计算机外设接口上的硬件电路。当被保护的软件运行时,程序向插在计算机上的加密狗发出查询命令,加密狗迅速计算、查询并给出响应,正确的响应能保证软件顺利运行。如果没有加密狗,程序就不能运行。第三代软件狗的核心芯片是E2PROM,主机通过并行口直接读写E2PROM以实现对加密信息的存取;第四代(最新)软件加密狗内置一个单片机芯片(又称微狗),芯片中存有特定的算法程序,可将读出的密钥进行加密变换,以对抗逻辑分析仪。
1 USB软件狗的硬件设计
1.1 USB接口芯片
目前,USB接口芯片有许多种,但无论何种接口芯片都有2个基本功能:一是与主机通信,二是提供对外围电路CPU的接口。也就是说,接口芯片架起了计算机与外围设备的桥梁,使开发者不用关心复杂的USB协议是如何将数据传送到主机的。
现有的支持USB协议的接口芯片可大致分为二类:一类为内部集成了微控制器,如美国TI公司的TUSB3210芯片,它内嵌一个兼容的805lMPU;另一类则只提供对外围电路访问的读写接口,如美国国家半导体公司的USBN9603芯片。在加密狗的设计中,建议采用第2种类型的接口芯片(因为对于较复杂的加密算法,使用计算能力较强的805lMPU或专用加密处理器处理起来更方便一些)。下面以本系统采用的USBN9603为例介绍接口芯片的使用。
USBN9603其微处理芯片采用的是Philips公司的可基于系统编程的单片机P89C51RD2,它负责控制USBN9603芯片的状态和读写USB节点的数据,以及负责控制外部存储器及其他功能设备。在系统中,还使用ATMEL公司的24C64作为存储芯片,采用P89C51RD2单片机的P1口模拟I2C总线来实现MCU与24C64的连接。
USBN9603是一个功能较强的芯片,支持USB1.1协议,可以实现全速的USB传输方式,能实现12Mbps的高速传输。USBN9603提供了一系列事件寄存器(Event Register),它的每一位都代表一个事件。如Main Event Register中的TX_EV位的值为1,则代表收到了1个发给它的传送事件。事件寄存器的各个位的值,一般由硬件根据各个事件的发生情况来设置,用户无法干预。在中断产生之后,可以通过查看这些寄存器的每一位的状态来获得事件发生的信息。
此外,USBN9603还提供了一系列事件屏蔽寄存器(Mask Register)。这组寄存器的每一位都对应于事件寄存器的相应位。把这组寄存器上相应的位置1,就可以允许该事件触发中断,否则就是事件发生也不会产生中断信号。如把Main Mask Register(MAMSK)中的TX_EV位的值设置为0,则USBN9603不会再报告传送事件的发生。
USBN9603使用外部晶振,同时有一个对外的时钟输出器产生对外的时钟信号,它的输出频率可由软件来控制。USBN9603的USB接口引擎由物理层和媒介通道控制器组成。物理层包括数字时钟电路、监视电路、位填充与清除逻辑电路等。媒介通道控制器层要完成数据包格式化、循环冗余检测、端点地址侦察等任务,并提供对端点发出的NAK、ACK和STALL回应的控制。接口引擎还要负责侦察和报告USB总线事件,如复位、挂起和恢复。
USBN9603向开发者提供了58个可编程的寄存器,地址分布范围为0x00~0x3F。MPU通过对寄存器的读写,完成对USB接口的操作。USBN9603寄存器被映射为MPU的外部RAM。MPU通过CS片选信号寻址,在ALE信号及RD、WR信号的配合下,由8位的并口写入地址和数据。虽然USBN9603读写操作简单,但各寄存器的定义及作用却较复杂,但只要对USB协议及USBN9603功能有一定的了解,就不难理解和掌握各寄存器的使用。
1.2 电路设计
外围控制电路的作用有2个:对USB进行读写操作和对加密模块的操作。这要求主控芯片提供基本的读写、中断和地址/数据信号,同时要有一定的计算能力以适应加密算法。在此前提下,可有多种选择,但加密卡的制作不能一味地追求高保密性能,应根据不同的应用场合灵活地选用不同的方案。本文设计的USB软件狗的硬件电路图如图1所示。其核心处理器件是P89C51RD2。P89C51RD2是Philips公司的CMOS高性能单片机,与80C51单片机完全兼容。P89C51RD2可采用串行编程方式,且有2种形式:基于系统的编程和基于应用的编程。基于系统的编程方式可以有效地降低开发成本,缩短开发周期。
本设计中所使用的存储器是24C64,它是带有硬件写保护功能的串行E2PROM,其接口兼容I2C总线规范,通过一对串行时钟、数据线对片内存储单元进行读写。24C64的片内存储器容量为64KB。
作者在实际中加密模块所使用的方案为单片机+FPGA模式,既可方便地用单片机完成对USB口的操作,又能利用FPGA的速度快和保密性强等特点实现复杂的加密算法。FPGA支持众多的加密标准(如AES、DES、三重DES),而且依靠FPGA的在线编程功能可方便地实现算法的更新与升级。这种组合模式符合模块化设计思想,在一定程度上提高了开发速度。
2 USB软件狗的软件设计
2.1 固件程序的设计
USB软件狗的软件包括主机软件和微控制器中的软件(固件)。主机软件和固件相配合,协同完成主机与USB软件狗间的信息交换。其中,微控制器中的固件主要完成与主机的通信(包括参与USB总线设备枚举、USB软件狗的自身标识等)、对24C64的读写操作、与主机程序相配合实现和主机程序间的数据交换等任务。
固化程序的编制完全是按照中断驱动方式编制的。当MPU处理其他任务时,USB数据的传输在中断程序中进行,这样可使传输速度最快并且也简化了编程和调试工作。微控制器程序的USB通信简化软件框图如图2所示。
24C64遵循I2C总线协议,采用SDA、SCL双线串行传输数据。在89C51上模拟I2C总线的设计中,用P1口的P1^2模拟SCL信号,用P1^3模拟SDA信号(对24C64具体的读写程序在很多相关书籍中都有具体的实例程序,本文不再详细叙述)。为防止24C64的内容意外改变,在不进行写操作时,可使WP引脚保持为高电平。同时为保障整个系统的安全,存储器24C64中的任何数据都应采用加密的形式存放。
2.2 驱动程序的设计
驱动程序的基本功能是建立应用程序与加密卡之间的数据通信。Window 98和Window 2000操作系统为USB总线提供了全面的支持,并且用WDM(Windows Device Mode)设备驱动程序模型代替了VxD设备驱动程序。WDM支持USB1.1协议,并为用户开发自己的用户驱动程序提供了接口USBDI(USB Driving Interface)。USB用户驱动程序通过USBDI访问USB设备类驱动程序。USB外设不占用任何硬件资源(端口或中断),所有低层I/O都由USB设备类驱动程序来执行。客户驱动程序只关心数据传输类型、传输时序、传输管道以及如何处理数据等主要操作。USBDI就是为实现以上操作而设计的软件接口。Windows 98和Windows 2000提供了如USB鼠标、USB键盘等设备的驱动程序,但是对一些特殊的设备(如数据加密系统),到目前为止还没有提供现成的驱动程序操作系统,所以必须自己编制驱动程序。USB设备的驱动程序一般用WDM而不能用VxD来编写。尽管系统已经提供了很多的标准接口函数,但是直接使用DDK编制USB驱动程序还是很困难的事情。不过目前很多软件厂商提供了一些非常好用的软件,使编制工作变得简单。例如Compuare Numega公司的DriverWorks等。使用这些软件可在较短的时间内生成高质量的驱动程序(具体步骤比较简单,在此不做详细的说明)。有关Windows对USB支持的更详细的说明,请参考Microsoft提供的设备驱动程序开发包(DDK)中的说明。
3 USB软件狗反解密技术
传统的软件狗的解密方法主要有硬件和软件2种。
(1)软件狗的硬件解密方法主要是仿制软件狗的硬件电路,通过使用逻辑分析仪拦截I/O口的数据,记录下软件狗与主机之间所传送的数据,再用硬件电路来仿真。这种方法对付早期的软件狗很有效。但USB软件狗内置单片机,固化的单片机软件保证外部不可读,但可仿制。并且由于使用USB协议,通信复杂且数据量大,因此该方法现在已经不适用。
(2)目前,常用的软件狗解密方法主要是软件,包括软件模拟、跟踪分析等方法。
软件模拟就是先启动SOFTICE一类的I/O拦截软件,然后在有软件狗的情况下启动受保护软件,同时,SOFTICE拦截并记录下受保护软件与软件狗接口之间的通信数据供以后使用。然后通过分析记录的数据,编制一个软件狗接口的仿真程序,用以代替真正的软件狗。完成后,只需在启动受保护软件前先启动仿真软件,由仿真软件与受保护软件进行数据交互。USB软件狗与受保护软件之间并不直接交换任何密码,而是由系统时间生成一个随机数据,由主机软件加密后同明文一起传送给USB软件狗,由USB软件狗解密密文并同明文比较。这样,软件模拟方法就会失效了。
在各种软件狗的软件解密方法中,以跟踪分析方法最为强大,具体的有静态分析和动态跟踪等方法。
静态分析方法是用反编译工具软件对受保护软件进行逆向分析,以求找出访问软件狗的代码并进行相应的修改。USB软件狗采用了API函数调用与SHELL外壳加密结合的技术,可以有效地对抗静态分析方法。即使被使用脱壳工具软件后外壳被破坏,内部加密函数的调用仍然能保证保护的有效性。
动态跟踪破解法要求使用者具有丰富的破解经验。该方法使用调试分析工具软件,跟踪控制受保护软件的整个运行过程,找出与软件狗间交互部分的判断代码并进行修改,以使其跳过对软件狗的检测或使检测结果无效。为对付这种破解方法,USB软件狗使用了数据交换随机噪声技术和迷宫技术,在程序入口和出口之间包含大量无效判断跳转进行干扰,动态改变执行次序,提升抗跟踪能力。此外,USB软件狗内部设有时间闸,各种操作必须在规定的时间内完成。正常操作用时很短,跟踪操作用时较长,超过规定时间将返回错误结果。
USB软件狗除了进行软件合法性保护外,还包含其他很多有用的功能。它包含有8KB可读写的Flash存储器,可以掉电保存软件开发商设置的初始口令以及用于存放关键数据、配置参数等信息;可以从硬件上对抗共享器共享;可以更加安全稳定地实现软件试用期和使用次数控制等功能。
4 结束语
USB软件狗作为新一代的软件狗为软件保护提供了一种理想的方式,使软件狗被破解的可能性大大降低;现代密码技术的快速发展也为软件狗技术提供了更加广阔的发展空间。但是世界上没有绝对安全的加密技术,面对层出不穷的威胁计算机安全的行为,各种各样的加密技术将不断涌现。作为USB技术和软件狗技术相结合的产物,USB软件狗技术无疑会具有十分强大的生命力。
参考文献
1 Compaq,Intel,Microsoft et al.Universal Serial Bus Specification,Revision 1.1.1998
2 Compaq,Intel,Microsoft et al.USB Class Definitions for Communication Devices,Version 1.1.1999
3 USBN9603 DATASHEET.National Semiconductor Corporation.2001
4 Jan Axelson著,陈逸等译.USB大全.北京:中国电力出版社,2001
5 张念淮,江浩.USB总线接口开发指南.北京:国防工业出版社,2001
6 张国云,彭仕玉,禹柳飞等.基于USB接口的IC卡读写器的设计.电子技术,2002;(1)
7 秦小龙,杨义先.USB密码钥及其在Kerberos系统中的应用.计算机工程与应用,2002;(5)
8 伍云霞,孙继平.安全认证系统中嵌入USB接口技术.电子技术应用,2002;(3)
9 徐增祥.USB软件狗的设计及反破解技术.电子技术应用,2002;(7)
10 胡晓军,杨正新,郜业猛等.USB软件加密卡及其驱动程序的设计与开发.电子工程师,2002;(8)