摘要:介绍了软件狗技术的发展,提出了一种改进的低成本USB软件狗的设计方案,分析了常见的加解密技术,并据此提出了一系列反破解措施。
关键词:USB 软件狗 加解密技术 反破解
1 软件狗技术 近年来,软件狗技术在保护软件开发者利益、防止软件盗版方面起了很大作用。软件狗技术属于硬加密技术,它具有加密强度大、可靠性高等特点,已广泛应用于计算机软件保护。软件狗技术的发展经历了多次更新换代。第一代软件狗通过短接并行口的某两根线,或者再加上些电阻、电容、二极管等实现;第二代软件狗采用逻辑门电路跨接在开行口上,并采取适当的措施尽量避免软件狗和打印机之间的相互干扰;第三代软件狗的核心芯片是EEPROM,主机通过并行口直接读写 EEPROM以实现对加密信息存取;第四代软件狗以微控制器和EEPROM为核心器件,又称微狗,它具有一定的智能,应用灵活性和抗破解能力都得到了很大提高。 传统的软件狗通过在并行口上附加一定的电路实现,而并行口本身的特点限制了传统软件狗技术的进步发展。由于并行口本身没有电源线,所以传统折并行口软件狗都是通过各种“偷电”技术从数据线或控制线获得软件狗电路所需的电源,其电路必须选用规模不大的低拉耗元器件。在负载能力很低的并行口上,并行口软件狗难以保证正常工作。由于并行口是为连接单个设备设计的,在连接多个设备时很难避免冲突,传统的并行口软件狗必须细考虑与打印机之间的兼容问题。特别是对于一些非标准接口的并行口设备,就更难解决冲突问题。这些都使并行口软件技术的展受到很大限制。 USB是在1994年底由 Compaq、IBM、Microsoft等多家公司联合提出的一种连接外部设备的新型的通用串行接口技术,它具有真正的即插即用和热插拔功能,理论上可支持多达127个不外设的同时连接。USB是一种先进的很有前途的接口标准,随着USB接口器件的发展,使用USB接口的设备会越来越多。USB接口本身具有电源线,可为外设提供稳定可靠的工作电源,从而对USB软件狗所用元器件的工作电压、功耗等的要求大大降低,软件狗的工作条件得到很大改善,更容易实现复杂、灵活的设计和电路的微型化。由于USB是为连接多个设备而设计的,有着严格的规范,从接口本身避免了设备间的冲突,只要遵循USB接口规范, USB软件狗不但不会对别的USB设备产生影响,也不会受到别的USB设备的影响。与并行口相比,USB接口更适合于软件狗技术。 2 USB软件狗的硬件 在本设计中,所使用的微控制器是CY7C63100A/CY7C63101A。它是CYPRESS公司生产的8位精简指令集(RISC)的OTP型微控制器。它集成有1.5Mbps的USB串行接口引擎(SIE)(即USB收发器),具有128字节的片内RAM、2/4K字节的程序存储空间,片内还具有个自由运行的8位定时器、一个看门狗定时器和内部上电复位电路,它的指令集专门为开发USB应用进行了优化。该控制器拥有两个输入输出端口、16根通用 I/O线,且每根线均可作为中断源。端口1的所有引脚都带有可编程驱动器,可以直接驱动LED发光。该控制器的操作电压为4.0~5.25V,它需要 6MHz的外部陶瓷共振器,片内操作时钟为12MHz。CY7C63100A/CY7C63101A是低速USB外设的低成本解决方案,符合USB1.1 规范,支持1个设备址和2个端点(一个控制端点和一个数据端点)。 本设计中所使用的存储器是24C02,它是带有硬件写保护功能的串行EEPROM,其接口兼容I2C总线规范,通过一对串行时钟、数据线对片内存储单元进行读写。24C02的片仙存储器容量为2K位(或256字节)。 本文设计的USB软件狗的硬件电路图如图1所示。其核心器件是微控制器(可根据需要选用CY7C63100A或CY7C63101A,其区别为程序存储器的空间不同,分别为2K字节和4K字节)和串行EEPROM(24C02),各元件的具体参数如图1所示。 微控制器的第15(D-)、16(D )脚分别连接USB连接器的2(D-)、3(D )脚,提供微控制器和主机之间信息交换的电信号通道,其中第15引脚(D-)所接的7.5kΩ的上拉电阻是为了满足USB规范的要求。微控制器通过USB接口与主机进行信息交换。 微控制器的第20脚(P1.1)经过10kΩ的上位电阻连接24C02的第7脚(WP,写保护),控制24C02的写操作使能。当WP为高电平(Vcc)时,只能读取24C02的内容而不能对其进行写入;当WP为低电平(Vss)时,则可以进行读、写操作。设置写保护功能,可以防止存储器内容被意外改写。微控制器的第19脚(P1.3)连接24C02的第6脚(SCL,串行时钟),为控制24C02的读写操作提供时钟;微控制器的第18脚(P1.5)经过 10kΩ的上拉电阻接24C02的第5脚(SDA,串行数据、地址 ),作为读写24C02的数据、地址信号线。微控制器通过这三根信号线完成对24C02 的读写操作,对24C02的读写控制满足I2C总线规范。
3 USB软件狗的软件 USB软件狗的软件包括主机软件微控制器中的软件(固件)。主机软件和固件相配合,协完成主机与USB软件狗间的信息交换。其中,微控制器中的固件主要完成与USB主机的通信(包括参与USB总线设备枚举、 USB软件狗的自身标识等)、对24C02的读写操作、与主机程序相配合实现和主机程序间的数据交换等任务。微控制器程序的简化软件框图如图2所示。
3.1 USB软件狗插入主机后,主机发现USB软件狗,在执行USB复位操作后,主机使用默认地址(地址0)向USB软件狗发出设备描述符请求,USB软件狗向主机返回自已的设备描述符作为响应;接收到要求的设备描述符后,主机为新发现的USB软件狗指定一个新的USB地址;然后,主机使用新的USB地址重新向 USB软件狗发送一个设备描述符请求,USB软件狗向主机返回自己的设备描述符作为响应。主机向USB软件狗发送配置描述符请求,USB软件狗从程序存储空间中取出相应的描述符并返回给主机。当主机接收到所有的描述符后,USB设备枚举过程即告结束。至此,主机已完全了解USB软件狗的资源要求、端点类型和性能等特性。
3.2 USB软件狗和主机间的数据交换 由于CY7C63100A/CYC63101A只提供两个USB端点:端点0和端点1。端点1只能发送数据而不能接收数据,所以不适合USB软件狗的交互式数据交换的要求,故只有使用端点0与主机进行数据交换。 USB 共支持四种类型的传输:等时传输、中断传输、控制传输和批量传输。要求恒定的连续传输速率的实时应用程序一般都采用等时传输方式。等时传输要求及时地提供数据,且对数据正确性要求不高而对时间极为敏感,所以在等时传输中,数据的有效性不能保证。在传送数据发生错误时,USB并不处理这些错误,而是继续传送新的数据。中断传输方式总线用于对设备的查询,以确定设备是否有数据需要传输。因此中断传输的方向总是从USB设备到主机,传送的数据量很小。但这些数据需要及时处理,以达到实时效果。控制传输提供了一种方法来配置USB设备,并对它操作的某些方面进行控制。每个设备都必须实现一个缺省的控制端点(端点 0),控制端点用来配置设备、控制设备状态以及设备操作的其它方面,包括设备控制指令、设备状态查询及确认命令。批量传输适用于对数据的正确性要求很高、而对数据传输速率没有特殊要求的设备。
除缺省的针对端点0的控制传输外,对于其他三种传输方式,端点的传输方式一旦确定,则该端点在此配置下只能进行某一特定方向上的数据传输,而不可以在通信过程中改变传输方向,除非重新选择配置,对于USB软件狗应用,由于USB软件狗与主机间要不断地相互进行数据交换,且每次所需要交换的数据量不大,故选用控制传输方式。
控制传输至少由两个阶段组成,也有可能是三个阶段。建立阶段——控制传输总线从建立阶段开始,在本阶段主机向目标设备传送信息,定义对USB设备的请求类型(例如读设备描述符)。数据阶段——这个阶段仅仅是因要求数据传输的请求定义的。例如,在数据阶段,读描述符的请求把描述符的内容发送给主机。状态阶段——这个阶段用来报告所请求的操作的结果。控制传输从建立阶段开始,它包含8字节的信息包。这个8字节的信息包定义了在控制传输的数据阶段所传输的数据数量。在数据阶段,信息包的最大数据载荷限制为64字节。对于本设计,由于 CY7C63100A/CY7C63101A的端点0只提供了8字节的FIFO缓冲区,故最大信息包只能取8字节。如果有更多的数据需要传输,可以分多次完成。控制传输参与错误检测和恢复机制,努力提供一种最大限度的恢复,以保证数据的完整性。
USB设备枚举过程结束后,并没有立即开始工作,必须由主机根据在枚举阶段所获得的信息对USB设备进行配置。配置完成后,USB设备才进入工作状态。此后,主机就可以与USB设备进行数据交换了。 主机与USB软件狗间的数据交换过程由主机方起,每一次数据交换都由完整的控制传输完成。在控制传输的建立阶段,主机向USB软件狗发送8字节的信息包,通过用户自定久的请求类型字段规定USB软件狗对后续数据应进行的处理,或要求USB软件狗向主机返回特定的信息。在数据阶段,USB软件狗接收指定数据或按要求向主机发送相应数据。控制传输的状态阶段指示本次数据传输的结果状态,以确定本次交互是否正确完成。
3.3 读写24C02 为防止 24C02的内容意外改变(例如,由于强干扰或不规范操作等),在不进行写操作时,应使WP引脚保持为高电平,即P1.1保持为高电平。在进行写操作时使 WP变低,并一直保持到写操作完成。写操作完成后立即恢复WP为高电平。对24C02具体的读写操作符合I2C总线规范,很多相关书籍都有具体的实例程序,本文不再多述。 为安全起见,存储器24C02中的数据应采用加密后的形式存放。
4 软件狗反破解技术 针对软件狗的破解方法主要有两种:硬件方法和软件方法。
软件狗的硬件破解方法,主要是仿制软件狗的硬件电路。这个方法对付早期的软件狗比较有效。当微狗出现后,由于很多微控制器本身都提供了程序代码保护功能,这使得仿制软件狗特别是获取固件变得越来越困难,这种方法现在已经很少使用。还有一种硬件破解方法是使用逻辑分析仪或软件拦截I/O,记录下软件狗与主机软件间所传送的数据并进行分析以找出规律。这对于一些简单的软件狗比较有效,而对于算法众多、交互数据量很大的软件狗,这种方法所带来的繁杂性可想而知。 USB通信规程本身相当复杂,这也大大提高了对USB软件狗进行数据拦截的破解方法的难度。
现在,更加常用的软件狗破解方法主要集中在软件方面,并有软件模拟、跟踪分析等方法。 软件模拟,就是先启动I/O拦截软件,然后在有软件狗的情况下启动受保护软件,并对受保护软件的第一个功能都进行试运行;同时,后台的I/O拦截软件记录下受保护软件与软件狗之间交互的数据供以后合作。记录完成后,只需在启动受保护软件前先启动模拟软件,就可以使受保护软件在没有软件狗的情况下也可以正常运行。在受保护软件运行过程中,当它企图与软件狗进行通信时,后台的模拟软件拦拱到该通信请求,根据先前记录下的数据对真实软件狗进行仿真,使受保护软件通信数据不变的情形,软件模拟方法十分有效;但如果通信数据中含有随机性的参数(例如,系统的当前时间),那么软件狗和受保护软件间所交互的数据就各不相同,在这种情况下,软件模拟方法就显得无能为力了。例如,主机软件可以取系统当前时间送给软件狗,软件狗使用一定的规则对其进行变换,并把结果送回主机软件,机软件用同样的规则对上述时间值进行同样的变换,检查变换后的结果是否一致。这里需要有好的变换算法,使变换结果对参数的各个部分的改变很敏感且程度相似。或者,软件狗和受保护软件间遵循一定的通信协议(当然是不公开的),所传输的数据中含有大量随机的无用信息,而根据该通信协议,软件狗和受保护软件都可以从中提取出有效的信息。 在各种软件狗的软件破解方法中,以跟踪分析方法的威力最为强大,具体的有静态分析和动态跟踪等方法。 静态分析方法是用一些静态反汇编、反编译工具对受保护软件进行逆向分析,以求找出访问软件狗的代码并进行相应的修改。如果预先对受保护软件的程序代码采用一定的变换(可以取软件狗中的数据作为变换参数),在运行时再进行反变换动态生成将要执行的代码,就可以有效地对抗静态分析方法。还可以使用可执行文件压缩工具对受保护软件进行压缩处理,或采用软件加壳工具对其进行处理等,这些都可以有效地对付静态分析法。另外,如果把主机软件的内部函数调用与外壳加密相结合,则可进一步提高加密强度,即使软件的外壳被破除,也仍然不能正常运行。 动态跟踪破解法不仅可以用于软件狗破解,还可以用来获取一些软件的注册序列号,取消软件的试用期限制、试用次数限制和解锁试用版软件等。这种方法是使用一些调试分析工具软件(如DEBUG、SOFTICE等),控制受保护软件的整个运行过程,找出它与软件狗间交互部分的代码并进行修改,以使其跳过对软件狗的检测或使检测结果无效。该破解方法的使用者往往都具有相当丰富的破解经验,对各种加解密方法了如指掌,这种方法也需要破解者付出很大的精力。对付这种暴力破解方法,主要就是设备跟踪陷阱、使用大量各不相同的加密算法并大量分散地设置对软件狗的访问、分离对软件狗的检测命令和对结果的判断等,目的就是加大跟踪分析的工作量、扰乱破解者的思路,大量消耗其体力和脑力,最终达到使其知难而退。动态跟踪法的一种很有效的对策是限定主机软件与软件狗间交互操作执行的时间。如果软件狗发现某个操作的执行时间超出设定的值(时间闸),则不作响应或送回错误的响应以迷或破解者。这是由于对于同样的操作,动态跟踪所需要的执行时间常常要远大于正常连续运行所需要的时间。在主机软件中也可以设置时间闸,但与在软件设中放置时间闸相比它更容易受到攻击而失效,效果不太好。主机软件也可以接管操作系统的调试函数或检测某些调试软件的存在,一旦发现自身在调试状态下运行,就立即退出运行或使程序不正常运行以迷惑破解者;也可以通过缩短软件升级的周期来使解密者疲于应付。静态分析和动态跟踪方法常常是相互配合使用的。与此对应,相应的反破解方法也是密切结合的。 软件狗除用来进行软件合法性检验外,还可以实现很多其它有用的功能。例如,可以在软件安装时把硬般的产品序列号、CPU的产品序列号或者网卡的物理地址等硬件信息写入软件狗,以后软件在每次运行时都进行一致性检测以判断本次运行机器和安装进所用机器是否为同一台机器,这样就可以实现软件对运行机器的限制。也可以利用软件狗中的定时器和存储器实现更加安全的软件试用期和使用次数等功能。 从微狗开始,软件狗就引入了微控制器技术,这大大提高了软件狗技术实现的灵活性;USB接口为软件狗提供了一个理想的工作环境,使软件狗硬件所受的限制大大降低;现代密码技术的发展也为软件狗技术提供了更加广阔的发展空间。作为USB技术的软件狗技术相结合的产物,USB软件狗技术无疑会具有十分强大的生命力。
|