应用文档
如何更好地提高加密狗的使用效率---加密狗使用技巧
更新时间:2019-09-26 17:17:29 点击量:
简单技巧
1. 赋值和判断分开 (参考强度值:1)
在赋值和对值的判断之间,可以插入很多的其他操作,让解密者难以猜到二者之间的联系。对于全局变量,可以在别的函数块中做判断。
2. 多次判断值 (参考强度值:2)
对于一个值,可以在不同的地方做判断,可以做很多的判断,让解密者难以屏蔽所有的判断操作,而只要有一个地方判断结果不对就可以认为整个结果是不对的。
3. 多次赋值 (参考强度值:3)
对于一个返回值,可以多次赋值给它,可以用复杂循环来做,让解密者无法跟踪该值的变化。
4. 赋多个值 (参考强度值:3)
返回的结果可以赋给很多的值,让解密者难以跟踪所有的这些返回值。而任意一个返回值不正确,都可以认为结果不正确。
5. 使用返回值 (参考强度值:4)
其实做判断是一种不好的方法,容易被识破和屏蔽。直接使用结果可以更好地让应用软件和加密软件结合。如计算圆面积这样一个函数,可以把圆周率参数放到加密狗的返回值中,如果返回值不正确,圆周率肯定也不正确,程序运行的结果也就会混乱了。
6. 使用加密狗中常量 (参考强度值:6)
在加密狗中放置一些常量,要使用时从加密狗中读出使用。比如路径名,文件名,一些常用数据等。
7. 使用解密函数的结果 (参考强度值:10-20)
解密函数的结果可以看成是一种可预知的返回值,随着输入的不同,输出也会不同,进行多次解密运算,并且使用解密后的结果。
8. 关键加密点不要使用系统的比较函数进行比较 (参考强度值:10-20)
不要使用字符串和加密狗中的数据进行简单的比较,同时最好不要使用系统的比较函数来进行比较,比如 strncmp、memcmp、radom、getsystemtime、messagebox 等函数,最好自己编写比较函数。因为黑客很容易使用静态反编译工具识别出此类函数。
9. 尽量在加密点附近不要调用一些敏感的系统函数 (参考强度值:10-20)
例如:random、getsystemtime、messagebox、 exitprocess 等函数。
中级技巧
10. 随机执行 (参考强度值:10)
解密者往往是通过大工作量地跟踪程序以发现加密点的,这需要不停地运行程序,以发现规律。在程序中设置随机量可以让加密者糊涂。这种随机可以是随机对返回值进行判断,可以是随机的赋值,也可以是程序随机地执行。
一些解密的高手可能会注意到程序执行的随机性,从而屏蔽 Random 函数。下面几条技巧也用到随机量,如果可能,可以使用自己编写的随机数发生器。随机发生器的初始化可以取如系统时间这样的随机值。
11. 随机读 (参考强度值:15)
可以随机地从狗中读取一些内容,但是除非需要,这些内容可以不使用。地址、长度都可以是随机的。
12. 随机写 (参考强度值:20)
可以随机地向加密狗中写入一些随机内容,地址、长度都可以是随机的。但是要注意不要覆盖加密狗中有用的内容。较好的办法是在加密狗中规定一个特定数据文件区域用于随机写,并使随机写的地址和长度不会越界。
13. 随机写然后读出 (参考强度值:35)
这其实是上面两个技巧的配对使用。要注意的是读和写要从程序的运行逻辑上分离远一些,中间可以加入其他对加密狗的操作,这样解密者极难看出两者的联系。
14. 随机调用加解密函数 (参考强度值:35)
随机调用加解密函数是指做加解的内容和长度可以是随机的。而返回的变换结果可以不使用。
15. 随机加密并使用结果 (参考强度值:20-100)
这个技巧可能比较难于理解。使用方法是这样的:假如我们要使用常数 1,我们可以先产生一个随机内容 A,把 A 保存起来,按照技巧 14 用 A 做一次随机加密函数调用得到加密结果 B,再把 B 同我们要得到的常数做一次运算,这里比如是简单的加法,得到结果 C,那么肯定 C = B + 1,再把 C 也保存起来。在程序的另外一个地方,我们再用保存的 A 再做一次加密,加密的结果肯定与上次的 B 相同,同保存的 C 做一次反运算(解密函数),这里是减法,会得到结果 D = C - B = 1。这时就可以使用 D 了, D 就是我们要用的常量。要注意这个技巧也是有两部分组成,它基于以下的原理:即使加密函数的结果是不可预知的,但是两次相同的加密结果肯定是一样的。有人可能会觉得中间那步加密和解密是多余的,其实不然。
16. 使用加密狗做全局变量 (参考强度值:40)
可以把一些变量放在加密狗中,使用加密狗来做传递变量,而且这些变量还是全局的,甚至下一次运行程序时还在。
17. 定时查加密狗 (参考强度值:40)
可以在需要加密的程序中,根据日期来判断是否需要查加密狗。比如说,在 2003-12-26 调用某个加密接口函数,然后在 2004-1-26 以后又调用某个加密接口函数,或者每天的某个时间调用加密接口函数。
18. 加密点分散原则 (参考强度值:40)
如果开发商的软件包括很多的模块,比如说 exe、 dll、 ocx 等子程序,建议不要仅仅在主程序中使用加密函数或者外壳工具,最好其它的模块也使用加密狗进行加密。
19. 使用AppOnChip (参考强度值:20-150)
开发商如果使用的是C++的开发语言,可以使用加密狗提供的AppOnChip功能,将程序植入到加密狗中运行。具体使用方法请参考加密狗的AppOnChip说明。
高级技巧
20.在不影响程序运行效率的情况下,尽可能做外壳加密 (参考强度100)
外壳加密,外壳加密,外壳加密(重要的事情说3次)。外壳加密已经集成了上面大多数的加密技巧,并经过多次的优化,常见的脱壳程序很难对它完全脱壳。对于需要较高的加密强度又没有很多精力来研究加密策略的用户来讲,外壳加密是一个快速有效的办法。
21. 自校验 (参考强度值:20-150)
可以使用外壳加密中提供的签名功能对被加密文件签名,如果黑客修改了加密的文件,则获取到的签名结果将会和以前获取的签名不一致。
22. 多线程 (参考强度值:20-150)
利用高级操作系统的多线程技术可以很好地迷惑解密者和解密工具。基本思路是这样的:在一个线程中对加密狗操作,在另外一个线程中判断和使用。
23. 队列 (参考强度值:40-60)
可以建造一个队列以管理返回值和返回结果,管理的方法可以复杂一些,而程序的执行是依赖于这个队列的。当然不用队列而使用其他的数据结构也是一样的,甚至效果更好。有心的读者可能注意到本技巧也可以和上面的技巧结合起来。一个简单的使用队列进行返回值管理的例子如下图所示:
在上图中,有一个初始化了的队列,共有 6 个单元,初始数据为 148888,当发生的返回值不为 0 时,将 205429 赋给 Pin,并使队列移动一个单元。在 Pout 处检测被推出的数据,当为 148888 时不做动作,当为 205429 时即认为非法。
其他加密技巧
24. 多模块软件或多套软件共用一只加密狗
开发商可以将加密狗的FeatureID(特征)系统合理的分配给不同的模块或软件使用,可以实现多模块软件或多套软件共用一只加密狗。
25. 限制软件使用次数及使用时间或某些模块无法使用
开发商可以通过访问加密狗中的FeatureID(特征)的属性来方便地实现软件使用次数和模块使用期限的限制。
26. 远程升级更新软件
加密软件的运行依赖于加密狗中的数据。软件开发商只需提供给最终客户更新加密狗数据升级码,将加密狗标志字节等内容重新初始化,使加密狗满足升级加密软件的运行条件即可,更新加密狗的代码也可直接做在升级加密软件中。使用相同的方式也可将试用软件升级至完全版本,或增加最终客户的使用次数、时间。也可将某些功能、模块或使用次数、时间的限制取消,授权给最终客户使用。我们提供了远程升级的解决方案,不需要用户将加密狗寄回就能实现远程的更新。
27. 安装加密软件时检查加密狗(无加密狗不能安装)
软件开发商在加密软件的安装程序中可以通过调用加密狗的模块进行查狗,以实现安装过程中校验加密狗。
总结: 在程序中综合使用以上各种加密方法可以很好地保护您的软件。参考强度值仅供参考,与使用者的具体使用方法有很大关系。事实上也并不一定要追求高强度值的技巧,低强度参考值的技巧只要使用巧妙,而且多次使用,也可以达到很好的效果。而高级的技巧一般难于实现,使用和调试都比较困难。
本页关键词:
加密狗使用技巧