一种基于U盘的软件保护方法
宁 静
(四川大学 计算机学院,四川 成都 610064)
摘 要 U盘的出现使得信息的存储和传输变得更加方便快捷,以U盘作为标识进行软件版权的保护可以成为一种方便易行的方案。为确保软件只能在一台机器上安装,将用户机特征和U盘特征同时存放在U盘上,以确定U盘与机器的对应关系,在卸载时修改U盘上的内容,使软件可以在其它机器上再次安装 。这种方式能够达到相对简单可靠地保护软件不被非法传播的目的。
关键词 软件版权保护;软件反拷贝;USB大容量存储器;USB设备描述符
1 引言
现有的软件保护技术很多,序列号、注册文件等纯软件验证方法具有安全性低的缺点,软盘加密的缺点是软盘易坏、容量小,软件狗加密虽然安全性高,但实现复杂、成本较高。在过去软盘流行的时代,许多软件商采用了钥匙盘技术,将软盘制作成钥匙盘,进行软件保护,因其方便,低成本的特性,得到了广泛应用。不过随着存储技术的发展,软盘已经逐渐退出历史舞台。基于USB的大容量存储设备的应用越来越广泛,不但大大方便了用户的使用,也提高了设备的存储速度。
根据这一思想的启发,可以将原来的软盘加密技术移植到U盘上,实现钥匙盘技术,这种方式易于推广,能够简单而又可靠地保护软件。要将传统的基于钥匙盘的软件保护方法移植到U盘上,需要结合U盘存储器的特点,综合考虑多种软件保护方法。具体工作有以下几方面:
(1)找到可以标识一个U盘的硬件信息,并提供提取U盘硬件信息的具体手段。
(2)找到一些能够标识用户机的硬件信息,提供提取用户机硬件信息的方法。
(3)根据U盘文件系统的特点,选择一种合适可靠的信息隐藏手段。并确定钥匙盘中隐蔽信息的存储结构。
(4)研究并确定方案用到的加密和验证的相关算法。
(5)设计并实现制作安装盘、安装及卸载前的验证阶段,提供一个软件保护模块供实际软件调用。
2 关键技术
2.1 U盘的硬件信息获取
操作系统和驱动程序通过得到设备的描述符,获取设备的特征,并区分不同的设备实例。通过对Windows操作系统识别U盘的方法进行分析,可知用厂商号、产品号、序列号三元组可以唯一标识一个U盘。而在U盘的设备描述符和字符串描述符中包含了所有这些信息,并且还包含了一些表示U盘物理特征的信息,同样对不同的U盘有区分作用。
USB设备的描述符由U盘固件提供,具有不可改变性,并且含有厂商号、产品号等标识信息。因此可以采用序列号字符串、供应商字符串、产品字符串三个字符串描述符,加上设备描述符一起作为U盘的硬件标识信息。使用DeviceIoControl函数与USB设备驱动程序通信可以得到U盘的设备描述符,然后可以通过设备描述符的iManufacturer、iProduct、iSerialNumber三个索引值字段获得这三个字符串描述符。
此方案的优点是不易被伪造,要制造一个具有相同厂商号、产品号、序列号的设备,必须在固件设计时就把这些变量设置好,这样成本高,复制后的实例个数也不多,很难做到直接传播。另外此方案有一定的局限性,对于没有序列号的USB设备就不可用(大部分正规厂商生产的产品是具有序列号的)。
2.2 主机的硬件信息获取
本文要求将U盘与用户机联系起来,在获得U盘硬件信息的基础上,还必须获得用户机的硬件信息,这在一次安装(本文的主要目标之一)的技术中是必需的。
提取U盘硬件信息的过程可由总线枚举实现,而在枚举过程中需要获取一些本机硬件信息(USB主机控制器,USB根集线器等硬件)以获得U盘连接状态,考虑到这些硬件信息也不易改变(USB主机控制器及USB根集线器都集成在主板上,很少被更换),正好这些信息可以用来标识用户机。
因此本文的方法使用USB主机设备的硬件信息作为主要的硬件标识,再附加一些传统的硬件信息(如硬盘系列号、CPUID等)组成主机的硬件标识,就能更好地标识一台主机。
2.3 U盘标识信息的存储
标识信息最好存放在不易被发现、被删除的存储区。隐蔽存储区的选择多种多样,各有优缺点。综合考虑实用性和技术可行性,本文利用DBR(分区引导扇区)之后的保留扇区存储验证信息。
对于U盘常用的FAT32文件系统,在任何一个分区中都含有一个DBR,为扩展引导代码,规定在DBR之后提供一些保留扇区,这些扇区一般不被系统使用,是理想的隐蔽存储区。
此方法对一般的FAT32文件系统都有效,对文件操作(文件创建、复制、删除)透明,但磁盘操作(磁盘格式化)将导致失效。
3 设计与实现
从软件应用的角度,本方案设计可分为制作安装盘、安装、使用、卸载四个动作。
因为软件保护必须与特定的软件结合,而且针对不同的软件可以做不同的优化,为了方便使用,本方案设计成一个类(在Windows XP下实现,使用Windows SDK及Windows DDK)。
3.1 制作安装盘
图1是安装盘制作的流程示意图。
(1) 在制作安装盘之前首先要判断U盘是否符合本方案,判断输入的设备是否具有序列号(序列号是标识U盘的重要信息,本方案只适用于具有序列号的U盘)。
(2) 获取U盘的设备描述符和三个字符串描述符。
(3) 将安装前验证的相关代码插入到软件主要程序之前,还要做一些反破解处理,生成一个具有反破解能力的软件安装文件。
(4) 对第二步得到的U盘硬件信息计算MD5码,作为U盘的硬件标识写入U盘的特定存储区。
(5) 将制作好的安装文件复制到用户指定的U盘中的一个文件夹下,此文件将具有反拷贝能力,只能在这个U盘中正常运行。
3.2 安装前验证
图2是安装过程的流程示意图。
图2 安装程序流程示意图
(1)在制作安装盘之前首先要获取U盘硬件信息,判断U盘是否符合本方案。
(2)检查U盘特定存储区,将这里的信息与获得的U盘硬件信息计算MD5码得到的硬件标识信息进行对比,如果相同表明软件没有在任何一台机器上安装过,可以进入下一步,否则软件已在某台机器上安装过,程序结束。
(3)获得用户机的根集线器信息及附加硬件信息(如CPUID、卷序列号等)。
(4)将用户机硬件信息与U盘硬件信息一起计算一个MD5哈希值,作为硬件标识信息,存储到U盘的特定存储区(将制作安装盘时写入的信息覆盖)。
3.3 使用及卸载前验证
使用前验证与卸载前验证相似,在此仅示意卸载前验证。图3是卸载过程的流程示意图。
图3 使用及修复程序流程示意图
(1)首先要获取U盘硬件信息,判断U盘是否符合本方案,并获得用户机硬件信息。
(2)将获得的用户机器硬件信息与U盘硬件信息一起计算出硬件标识(MD5),并与U盘特定存储区里的信息进行对比,若相同表明软件曾经在此用户机上安装过,可以进入下一步,否则软件没有在此台机器上安装过,程序结束。
(3)卸载完成后,对U盘硬件信息计算MD5码,并写入U盘(覆盖原来的信息)。
4 总结与展望
经过测试程序的测试,证明本方案具有如下特点:
(1)安装程序反拷贝:在安装盘连接的情况下能正常运行软件安装程序,拷贝到其它U盘则无法正常安装。
(2)一次安装:在运行过一次安装程序,软件不能在某台机器上再次安装。正常卸载后才可在其它机器上再次安装。
本文提出的软件版权保护方法从技术层面上给软件提供保障。与普通的基于软件的软件保护方法相比,由于使用了U盘的硬件信息以及主机的硬件信息作为验证信息,本方案在安全性、实用性等方面都有一定的改善。
参考文献
[1]孙兆林.软件加密解密与计算机安全技术[M].北京:中国水利水电出版社,2001
[2]李为,刘嘉勇.一种基于分区引导扇区控制的移动存储介质安全控制方法[J].成都信息工程学院学报,2007,22(1):92-97
[3]吴宇等.基于驱动层的USB 存储设备安全增强技术[J].计算机应用研究,2004,2:95-97
[4]Microsoft Corporation. USBView.exe 源代码[CP],1999
[5] Compaq,Hewlett-Packard,Intel,Lucent,Microsoft,NEC,Philips. Universal Serial Bus Specification Revision 2.0[Z]. 2000
[6] Harlan Carvey,Cory Altheide. Tracking USB storage: Analysis of windows artifacts generated by USB storage devices[J]. Digital Investigation,2005,2:94-100
[7]沈建华,罗悦怿. Flash 文件系统的研究与设计[J].计算机应用研究,2004,12:246-248
收稿日期:11月6日 修改日期:12月4日 作者简介:宁静(1986-),男,浙江衢州人,硕士研究生,研究方向:计算机网络与通信。
|