首页
论坛
专栏
课程

分享:
虽然从静态上可以了解各个模块的功能以及整个软件的编程思路,但是,并不可能真正地了解软件中各个模块的技术细节。对于被分析的软件来说,静态分析只是工作的第一步,动态跟踪是分析软件的关键所在。所谓动态跟踪主要是指利用Visual C++自带的调试器,或系统级调试器SoftICE或TRW2000等,一步一步跟踪分析。 由于Win32程序内存寻址使用的是相对简单的平坦寻址模式,并且Win32程序大量调用系统提供的API,而Win32平台上的调试器如SoftICE等恰好有针对API设置断点的强大功能,因而这些特点都给动态跟踪破解带来极大的方便。因为程序的作者用的是高级语言,Windows又是提倡“透明 ”,不希望程序员知道底层的操作 , 而只提供给他们高层的接口, 而相当多的高级函数调用某个一定的底层函数,所以解密者经常在底层函数上下断点。所以在Windows中,只要Windows的函数被使用,想对任何寻找蛛丝马迹的人隐藏什么东西是比较困难的。 为什么要对软件进行动态分析呢?这主要是因为: 1、许多软件在整体上完成的功能,一般要分解成若干模块来完成,而且后一模块在执行时,往往需要使用其前一模块处理的结果,这一结果我们把它叫中间结果。如果我们只对软件本身进行静态地分析,一般是很难分析出这些中间结果的。而只有通过跟踪执行前一模块,才能看到这些结果。另外,在程序的运行过程中,往往会在某一地方出现许多分支和转移,不同的分支和转移往往需要不同的条件,而这些条件一般是由运行该分支之前的程序来产生的。如果想知道程序运行到该分支的地方时,到底走向哪一分支,不进行动态地跟踪和分析是不得而知的。 2、有许多软件在运行时,其最初执行的一段程序往往需要对该软件的后面各个模块进行一些初始始化工作,而没有依赖系统的重定位。 3、有许多加密程序为了阻止非法跟踪和阅读,对执行代码的大部分内容进行了加密变换,而只有很短的一段程序是明文。加密程序运行时,采用了逐块解密,逐块执行和方法,首先运行最初的一段明文程序,该程序在运行过程中,不仅要完成阻止跟踪的任务,而且还要负责对下一块密码进行解密。显然仅对该软件的密码部分进行反汇编,不对该软件动态跟踪分析,是根本不可能进行解密的。 由于上述原因,在对软件静态分析不行的条件下,就要进行动态分析了。

上一篇 :
下一篇 :
讨论 (4)
talkischeap 2018-3-25
 举报
醍醐灌顶的感觉    赞一个
陈jack 2018-7-31
 举报
学习一下
吴楚添新月 2018-8-11
 举报
动态分析感觉很难又很重要啊
借船摇摆 2018-9-3
 举报
学习了
沪ICP备16048531号-1
沪公网安备 31011502006611号