软件加密技巧

来源:互联网 发布:数控车图片编程 编辑:程序博客网 时间:2024/05/17 01:06
简单加密技巧: 1. 赋值和判断分开 参考强度值 :1

在赋值和对值的判断之间,可以插入很多的其他操作,让解密者难以猜到二者之间的联系。对于全局变量,可以在别的函数块中做判断

2. 多次判断值 参考强度值 :2

对于一个值,可以在不同的地方做判断,可以做很多的判断,让解密者难以屏 蔽所有的判断操作,而只要有一个地方判断结果不对就可以认为整个结果是不对的。

3. 多次赋值 参考强度值 :3

对于一个返回值,可以多次赋值给它,可以用复杂循环来做,让解密者无法跟踪该值的变化。

 

4. 赋多个 值参考强度值 :3

返回的结果可以赋给很多的值,让解密者难以跟踪所有的这些返回值。而任意 一个返回值不正确,都可以认为结果不正确。

 

5. 使用返回值 参考强度值 :4

其实做判断是一种不好的方法,容易被识破和屏蔽。直接使用结果可以更好地让应用软件和加密软件结合。如下例中,如果返回值不正确,圆周率肯定也不正确,程序运行的结果也就会混乱了。

 

6. 使用狗中常量 参考强度值 :6

在狗中放置一些常量,要使用时从狗中读出使用。比如路径名,文件名,一些常用数据等。

 

7. 使用多个变换结果 参考强度值 :10-20

变换的结果可以看成是一种可预知的返回值,随着输入的不同,输出也会不同,第页 96宏狗开发商手册进行多次变换,并且使用变换的结果。

 

8. 关键加密点不要使用系统的比较函数进行比较 参考强度值 :10-20

不要使用字符串和硬件狗中的数据进行简单的比较,同时最好不要使用系统的比较函数来进行比较,比如 strncmp、memcmp、radom、getsystemtime、messagebox等函数,最好自己编写比较函数。因为黑客很容易使用静态反编译工具识别出此类函数。

 

9. 尽量在加密点附近不要调用一些敏感的系统函数 参考强度值 :10-20

例如: random、getsystemtime、messagebox、exitprocess 等函数。

 

 

中级技巧: 10. 随机执行 参考强度值 :10

解密者往往是通过大工作量地跟踪程序以发现加密点的,这需要不停地运行程序,以发现规律。在程序中设置随机量可以让加密者糊涂。这种随机可以是随机对返回值进行判断,可以是随机的赋值,也可以是程序随机地执行。

一些解密的高手可能会注意到程序执行的随机性,从而屏蔽 Random 函数。下面几条技巧也用到随机量,如果可能,可以使用自己编写的随机数发生器。随机发生器的初始化可以取如系统时间这样的随机值。

 

11. 随机读 参考强度值 :15

可以随机地从狗中读取一些内容,但是除非需要,这些内容可以不使用。地址、长度都可以是随机的。

 

12. 随机写 参考强度值 :20

可以随机地向狗中写入一些随机内容,地址、长度都可以是随机的。但是要注意不要覆盖狗中有用的内容。较好的办法是在狗中规定一个特定数据文件区域用于随机写,并使随机写的地址和长度不会越界。在下面的例子中,单元 80-99 单元是不使用的。

 

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

可以使用宏狗中提供的加解密函数对随机的数据进行加解密和比较。

 

18. 定时查狗 参考强度值 :40

可以在需要加密的程序中,根据日期来判断是否需要查狗。比如说,在2003-12-26 调用某个加密接口函数,然后在 2004-1-26 以后又调用某个加密接口函数,或者每天的某个时间调用加密接口函数。

 

19. 加密点分散原则 参考强度值 :40

如果开发商的软件包括很多的模块,比如说 exe 、 dll 、 ocx 等子程序,建议不要仅仅在主程序中使用加密函数或者外壳工具,最好其它的模块也使用加密狗进行加第页 98宏狗开发商手册密。

 

20. 使用自定义算法文件 参考强度值 :20-150

开发商可以自己编写算法文件,然后在自己的程序中调用,需要注意的是需要保证输入 / 输出的参数最好每次变化,如果输入参数固定,则此方法不能保证有很高的加密强度。

 

 

        高级技巧: 21. 自校验 参考强度值 :20-150

可以使用宏狗中提供的签名函数对核心模块文件的一部分签名,如果黑客修改了核心模块的文件,则获取到的签名结果将会和以前获取的签名不一致。

 

22. 多线程 参考强度值 :20-150

利用高级操作系统的多线程技术可以很好地迷惑解密者和解密工具。基本思路是这样的:在一个线程中对狗操作,在另外一个线程中判断和使用。

 

23. 队列 参考强度值 :40-60

可以建造一个队列以管理返回值和返回结果,管理的方法可以复杂一些,而程序的执行是依赖于这个队列的。当然不用队列而使用其他的数据结构也是一样的,甚至效果更好。有心的读者可能注意到本技巧也可以和上面的技巧结合起来。一个简单的使用队列进行返回值管理的例子如下图所示:

在上图中,有一个初始化了的队列,共有 6 个单元,初始数据为 148888 ,当发生的返回值不为 0 时,将 205429 赋给 Pin ,并使队列移动一个单元。在 Pout 处检测被推出的数据,当为 148888 时不做动作,当为 205429 时即认为非法。

 

 

其他加密技巧: 24. 多模块软件或多套软件共用一只宏狗  

开发商可以将宏狗的文件系统合理的分配给不同的模块或软件使用 , 可以实现多模块软件或多套软件共用一只狗。

 

25. 限制软件使用次数及使用时间或某些模块无法使用  

开发商可以通过访问宏狗的许可证文件方便地实现软件使用次数和模块使用期限的限制。

 

26. 远程升级更新软件  

加密软件的运行依赖于狗中的数据。软件开发商只需提供给最终客户更新狗数据、算法的程序,将狗标志字节等内容重新初始化,使狗满足升级加密软件的运行条件即可。更新狗的代码也可直接做在升级加密软件中。

使用相同的方式也可将试用软件升级至完全版本,或增加最终客户的使用次数、时间。也可将某些功能、模块或使用次数、时间的限制取消,授权给最终客户使用。

我们提供了远程升级的解决方案,请参看 /Utility/RUS 目录下的工具程序。

 

27. 安装加密软件时检查狗(无狗不能安装 )  

软件开发商在加密软件的安装程序中可以通过调用狗的模块进行查狗或使第用外壳工具加密安装程序,使用方式与应用程序相同。注意这时应先安装狗的驱动程序,然后再对狗操作。

 

 

    总结:  

在程序中综合使用以上各种加密方法可以很好地保护您的软件。参考强度值仅供参考,与使用者的具体使用方法有很大关系。事实上也并不一定要追求高强度值的技巧,低强度参考值的技巧只要使用巧妙,而且多次使用,也可以达 到很好的效果。而高级的技巧一般难于实现,使用和调试都比较困难。开发商同时要注意,对宏狗操作是要耗时的,延时可能在 50 - 200 毫秒之间,与所读写字节的长度有关。此外,使用宏狗提供的 AS 技术,即程序中调用 API 函数和 SHELL 加密EXE 同时使用,可以有更好的加密强度。