这软件狗比较老了,还是折叠式的。
时间长了,有点腐蚀了。另一面的芯片型号被擦掉了、
外壳上的网址还能打开,这公司现在还在生产软件狗。
《无驱型加密锁的加密技巧和破解对策》
很多商品软件都采用了usb无驱型加密锁来加密,通过对加密锁的操作,来判断程序是否是正版,如果是盗版,就拒绝执行。用户通过买加密锁获得程序的使用授权。
所谓无驱型,并不是真的没有驱动程序,只是调用了微软给键盘、鼠标之类的设备提供的通用驱动,加密锁插上后,系统识别为人体工学输入设备,它利用了hid.dll来通过usb****换信息。
加密锁中到底有什么东西呢?通过看厂家提供的说明,一般有这几部分,接口电路,单片机,掉电保护存储区(ROM),内存(RAM)。接口电路是标准的usb口,可以不用管它。单片机是可以编程的,厂家用它来实现多种加密算法。ROM区一般有几百个字节,软件开发者可以存储自己的数据。ROM区的读取寿命是无限的,写寿命一般只有10万次。RAM区读、写次数都无限,可以当变量来使用。
早期的加密锁只有ROM区,读取时需要密码,在软件中是明的,很容易被发现,有了读取密码,ROM中的内容就是明着的,可以被硬件复制。
后来的加密锁,用单片机实现了加密算法。程序可以往加密锁中写入某个数据或字符串,经过加密锁中的程序加密,然后读取回来进行判断,给硬件复制制造了麻烦,因为一般情况下加密锁中的单片机程序是不能读取出来的。
还可以通过随机写入RAM中数据,在不同的子程序中读出、判断。用随机读写,可以对抗usb口监听,让每次监听到的数据都不同,让硬件复制和软件模拟都失效。
再后来的加密锁甚至实现了把某段程序移植到锁中运行,这样只要没锁程序就是不完整的,更提高了加密强度。
加密锁厂家提供的开发包中提供了几乎所有语言的调用函数,通过调用厂家提供的api来操作加密锁。厂家还提供直接对exe文件进行加密的加壳程序,也就是俗称的狗壳。狗壳的加密强度比较高,使用也很方便,但最大的缺点就是程序加壳后兼容性下降,造成特殊情况下程序不能运行。因此有些软件开发者不用狗壳,越是大型软件,越是不加狗壳。
对于用加密锁加密的软件破解,一般采用如下办法:
1.软件模拟。自己做一个假的hid.dll,放到程序所在的目录下,它会首先加载它,忽略windows提供的hid.dll。编写这个假的hid.dll,实现加密锁的功能。对于只读取rom的软件,这种做法很有效,可以做到不修改软件的任何字节就能实现解密。对于调用了加密算法,调用次数有限的也可以采用这种办法。对于随机产生数据,连续不断调用加密算法的软件,这种方法就失效了,因为你在不知道加密锁的加密密钥的情况下,模拟一个加密算法的输出结果,几乎是不可能的。
2.修改程序。厂家提供的操作加密锁的api和商品软件之间有一个明显的接口,根据厂家提供的开发手册,很容易读懂这些调用是想做什么,通过修改代码,让它无锁也能运行。
3.两者结合。只是修改软件的随机数形成程序,让随机数变成固定值。这样程序送入加密锁的数据就成了固定的,活狗也就变成了死狗。然后再用第1种方法来模拟它。