-
-
[原创]Rockey2破解软复制的研究
-
发表于:
2013-10-25 22:40
7450
-
免责申明:本文只是对Rockey2的软复制安全性的研究,仅是个人的兴趣爱好,也许有限的帮助对应的企业提升其安全性。本文只是对其中的方案的思路分析和分享,不会提供具体的源码和工具(即使提供也是来源于网络可以公开获取的工具和源码),对于他人使用文中涉及技术,工具和方法,作者不负任何责任。如有兴趣可以email交流:Sunfeedy@163.com
近期有机会对rockey2的加密狗进行软复制操作,能想到几个方案都尝试了也都获得了成功。抽时间分析了其安全性,因为接触不久,算是一个思路总结,请各位大牛多多斧正。Rockey加密狗的原理不是很复杂,就是把一部分特殊的数据写入在狗中,目标程序在运行时随时去访问验证这些数据的正确性,只有通过验证目标程序才能正常运行。这些数据可以是标识信息也可以是程序依赖的数据。
而对于加密狗破解无非是两种方案,即
1,破解目标软件不进行读狗验证等的操作,目标程序一般是加壳的,来增加破解难度
2,对狗进行复制,复制又可以分为硬复制和软复制,本文重点讨论的是软复制的方案。
软复制又分为如下几种:
1,劫持hid.dll进行数据拦截和加工;
2,通过微软的DSF来虚拟usb设备,模拟usb狗的数据读取操作;
3,在驱动层面写个驱动虚拟usb设备,模拟数据的读取操作。
上面不管哪种方案,目的都是让软件以为真的狗存在。
在讲方案前先简单介绍下usb狗的UID和种子的关系的,这个地方对于初学者来说,容易误操作(不小心使用把狗的UID给重新设置了~)。usb狗一般会有一个cpu的芯片,并在固件中内置了一套seed(种子)到UID的算法,通过主机下放一个seed的值给usb狗,usb狗根据内置的算法生成UID。这样如果不知道seed和算法是无法生产相同值UID的狗,只有通过编程器写入,也就是硬复制。
在进行软复制前,需要把usb狗中的数据读取出来,这里可以使用Tee8088前辈的软件(论坛都有,大家自己找吧);这个软件可以很方便的把USB狗中的相关信息读取出来。有了这些信息就可以复制狗了。
方案一:hid劫持的原理很简单,就是利用程序读取dll库文件的路径优先级,在程序目录下伪造一个hid.dll文件,让程序优先使用我们构造的hid.dll文件。(为什么是hid文件呢,是因为程序对usb设备的操作一般都是使用hid中的接口)。网页目前有的hid.dll代码是DELPHI或是汇编的(貌似都有些问题,不稳定),于是我自己写了一个c++语言的,解决调用堆栈返回的问题后,现在使用非常完美。
这个方案是最简单的方案,但是也存在一些缺陷,即必须要电脑上插有usb的其他设备才能使用,否则无法生成对应的hid句柄。
方案二:使用微软的DSF方案也是不错的,网上有对应的代码下载(GenericHID),只需要修改下一些数据就可以使用了,网上只有win7的驱动,我重新编译了winxp的。但是我在测试时发现这个方案的稳定性很差,win xp下电脑重启后会出现系统文件丢失无法启动的现象(据网友反馈只有在部分克隆的操作系统出现,正版的没有出现),在win7虽然重启后可以运行,但是不稳定,出现过几次usb加载失败需要重新卸掉再加载。
方案三:驱动级别的模拟是最好的方案,但是难度也最大,网上没有任何资料。必须要有驱动开发经验,我在摸索中参考使用了 win ddk 中vhidmini的例子源代码,增加了USB相关数据处理实现了该功能。可以完全模拟狗的行为,重启后自动挂接。这个方案经过测试是最完美的。
一个有意思的事,我最耗时不是方案三,反而是方案一。究其原因是调用Hid函数使用的是__stdcall 方式,即由被调用者释放参数栈,而我实现的myHId函数是__cdecl方式(即由调用者释放参数栈),导致参数栈错误,在这个地方纠结了很久,呵呵。
最后对使用加密狗的软件的建议:一定要对目标程序进行加壳,而且最好是目前最难破解的VMProtect壳。加密狗最好使用最新的版本或是国外的,可以撑久一些。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!