1.1什么是加密与解密

软件的加密与解密:

这是矛与盾的关系,软件开发者为了维护自身的商业利益,不断寻找各种有效的技术来保护软件的版权;解密者受盗版所带来的高额利润的驱使,不断开发新的解密工具,研究新的加密技术以找到破解之法。

  没有无法破解的保护,如果一种保护能达到让解密者在该软件的生命周期中都无法破解,那么这种保护是成功的加密。

 

软件逆向工程:

    逆向工程(Reverse Engineering)是指根据已有的产物和结果,通过分析来推导出具体的实现方法。对软件来说,“可执行程序——反编译——源代码”的过程就是逆向工程。

    逆向工程的内容可分为:

    1. 软件使用限制的去除或者软件功能的添加
    2. 软件源代码的再获得
    3. 硬件的复制和模拟  

逆向分析技术:

    1.通过软件使用说明和操作格式分析软件

      若要分析一个软件,首先应该学会使用该软件。一个有 经验的程序分析员往往能通过软件的使用说明和操作推测出软件的设计思想和编程思路。

2.静态分析技术

是指根据反汇编得到的程序清单进行分析,最常见的方法是从提示信息入手进行分析。通过包含提示信息的程序片段,就可以知道提示信息前后的程序片段所完成的功能,从而宏观地了解软件编程思路。

    3.动态分析技术

许多软件在整体上完成的功能,一般要分解成若干模块来实现,后一模块在执行时往往需要使用前一模块处理的结果,这一结果叫作中间结果。如果只对软件本身进行静态分析,一般是很难获得这些中间结果的。只有跟踪执行前一模块,才能看到这些结果,在程序的执行过程中,往往会在某个地方出现许多分支和转移,不同的分支和转移往往需要不同的条件,而这些条件一般是由运行该分支之前的程序产生的。至于程序在运行到某个分支后到底会走到哪个分支,不进行动态跟踪和分析是无法得知的。 

许多软件在运行时,其最初执行的一段程序往往需要对后面的各个模块进行一些初始化工作,并不依赖系统的重定位。

许多加密程序为了阻止非法跟踪和阅读,对执行代码的大部分内容进行了加密变换,但只有很短的一段程序是明文的。加密程序在运行时会采用逐块解密、执行的方法。首先运行最初的一段明文程序,该程序在运行过程中,不仅要完成阻止跟踪的任务,还要对下一块密码进行解密。显然,仅对软件的密码进行反汇编,而不对该软件进行动态跟踪分析,是根本不可能解密的。

  有效进行动态分析:

    1).对软件进行粗跟踪

      就是在跟踪时要大块大块地跟踪。一般软件划分为若干模块i,在分析一个软件时,要分析的是软件中我们最关心的那一部分模块。

    2).对软件进行细跟踪

在对软件进行一定程度的粗跟踪之后,就能获取软件中我们所关心的模块或程序段了,这样就可以针对性地对该模块进行具体而详细的跟踪分析。在一般情况下,我们可能要进行多次关键代码的跟踪才能读懂程序。在每次跟踪时把关键的中间结果或指令地址记录下来,会对下一次分析有很大的帮助。

 

    

 

  

猜你喜欢

转载自www.cnblogs.com/namecannotfind/p/10088455.html