软件加密狗简单实现
最近有个项目,老板提出来说要给软件加上加密狗,给用户一些使用限制。没法子,老板怎么说就得怎么做了。起初还以为加密狗不是一个简单的东西,接触后才知其实是很容易实现的。现在对加密狗的具体使用做一个记录。(说明:以下针对的是safenet品牌的软件加密狗,其他产品本人没去研究,可能会有一些差异)
购买了软件加密狗的开发套件,厂家提供了一些各种语言的使用案例,开发人员稍微研究一下都可以很好的将它嵌入到自己的软件中了。
以下是我使用过程中的一些理解,让大家对他有个了解,其实是很简单的。
1、 声明Dog dog=new Dog(100);(100是软件狗的存储空间,单位是字节)
2、 读取的参数设置
dog.DogAddr=0; //读取的开始地址
dog.DogBytes=100; //读取的字节数
3、 读取信息 dog.ReadDog();//厂家提供的dll中的方法
4、 判断是否读取成功,dog.Retcode//值是0,读取成功;否则,读取失败(通常用来判断是否有加密狗存在)
5、 在读取成功的情况下,获取加密狗里面的存储信息(通常存储用户名、机器码、时间等,用来控制用户数量)
char[] chTemp = new char[100];
for (int i = 0; i < 100; i++)
{
chTemp[i] = (char)dog.DogData[i];
}
6、写入加密狗的方法 dog.WriteDog
总体流程是这样的:
重要提示:如果在程序中只是作简单的判断,如:if(dog.ReadDog()==0),这样即使加密狗的加密算法再复杂,黑客只要对代码稍作修改就可以很容易的绕过你的判断,同样可以达到破解的目的。庆幸的是,厂家已经想到了这一点,在开发套件中提供了一些技巧,例如:
If(Random(10)==5)
{
RetCode=WriteDog()
…
}
If(Random(10)==7)
{
RetCode=ReadDog()
…
}
此外还有很多技巧,如多线程、队列等等,有兴趣的朋友可以参考一下。
另外加密狗的操作是要耗时的,厂家说明延时是50-200毫秒之间,我在使用的过程中感觉很顺畅,所以这一点是没问题的。
总结(引用别人的两句话,但是也是我的体会):
1、如果您想不要花太多心思到加密上而想要一个很强的加密,加密狗是最好的选择。
2、花点时间考虑你自己的软件,看看它是否值得保护?如果没人用你的软件,保护也就没有意义了。