软件的加密与解密

软件的加密与解密
foresta.yang软件的加密与解密
软件的加密与解密技术是矛与盾的关系,它们是在互相斗争中发展进步的。
两者在技术上的较量归根到底是一种利益的冲突。软件开发者为了维护自身的商业利益,不断寻找各种有效的技术来保护软件的版权,推迟软件被解密的时间;而解密者则受盗版所带来的高额利润的驱使或纯粹出于个人兴趣,不断开发新的解密工具,针对新出现的保护方式进行跟踪分析,以找到相应的解密方法。
没有无法解密的保护。对软件的保护仅靠技术是不够的,最终要靠人们的知识产权意识和法制观念的进步及生活水平的提高。如果一种保护技术的强度能达到让解密者在软件的生命周期内都无法将其完全破解的程度,这种保护技术就是成功的。软件保护方式的设计应在一开始就作为软件开发的一部分来考虑,列入开发计划和开发成本,并在保护强度、成本、易用性之间进行折中考虑,选择一个平衡点。
作为一个合格的程序员,要上至需求分析、设计抽象、设计模式,下至系统核心,熟悉整个系统的底层结构。
软件逆向工程
逆向工程(Reverse Engineering)是指根据已有的产物和结果,通过分析来推导出具体的实现方法。
对软件来说,==“可执行程序->反编译->源代码”==的过程就是逆向工程。
逆向工程的内容可以分为如下 3 类。
- 软件使用限制的去除或者软件功能的添加。
- 软件源代码的再获得。
- 硬件的复制和模拟。
坦白地讲,现在的逆向工程,其真实目的就是再利用。
逆向分析技术
1.通过软件使用说明和操作格式分析软件
2.静态分析技术
所谓静态分析,是指根据反汇编得到的程序清单进行分析,最常用的方法是从提示信息人手进行分析。
3.动态分析技术
静态分析只是第一步,动态跟踪才是分析软件的关键。所谓动态跟踪主要是指利用 OllyDbg 或 WinDbg 等调试工具,一步一步跟踪分析。
-
许多软件在整体上完成的功能,一般要分解成若干模块来实现,后一模块在执行时往往需要使用前一模块处理的结果,这一结果叫作中间结果。
-
许多软件在运行时,其最初执行的一段程序往往需要对后面的各个模块进行一些初始化工作,并不依赖系统的重定位。
-
许多加密程序为了阻止非法跟踪和阅读,对执行代码的大部分内容进行了加密变换,但只有很短的一段程序是明文的。
字节存储顺序“endian” 一词来源于《格列佛游记》。在小说中,小人国的居民为吃鸡蛋时该从大的一端(Big-End) 剥开还是从小的一端 (Little-End) 剥开而争论,争论的双方分别称为 “Big-endian" 和“Little-endian"。计算机领域在描述 “关于字节该以什么样的顺序传送的争论”时引用了 “endian"一词,翻译为“字节序”,表示数据在存储器中的存放顺序,主要分为大端序 (Big-endian) 和小端序 ( Little-endian ), 其区别如下
-
Big-endian:高位字节存入低地址,低位字节存入高地址。
-
Little-endian:低位字节存入低地址,高位字节存入高地址。
x86 系列 CPU 都是 Little-endian 字节序,PowerPC 通常是 Big-endian 字节序。因为网络协议也都是采用 Big-endian 方式传输数据的,所以有时也把 Big-endian 方式称为网络字节序。