软件分析技术

转载 2007年09月13日 18:45:00

  在进行软件的破解、解密以及计算机病毒分析工作中,一个首要的问题是对软件及病毒进行分析。这些软件都是机器代码程序,对于它们分析必须使用静态或动态调试工具,分析跟踪其汇编代码。

一、从软件使用说明和操作中分析软件

  欲破解一软件,首先应该先用用这软件,了解一下功能是否有限制,最好阅读一下软件的说明或手册,特别是自己所关心的关键部分的使用说明,这样也许能够找点线索。

二、静态反汇编

 所谓静态分析即从反汇编出来的程序清单上分析,从提示信息入手进行分析。目前,大多数软件在设计时,都采用了人机对话方式。所谓人机对话,即在软件运行过程中,需要由用户选择的地方,软件即显示相应的提示信息,并等待用户按键选择。而在执行完某一段程序之后,便显示一串提示信息,以反映该段程序运行后的状态,是正常运行,还是出现错误,或者提示用户进行下一步工作的帮助信息。为此,如果我们对静态反汇编出来的程序清单进行阅读,可了解软件的编程思路,以便顺利破解。 常用的静态分析工具是W32DASM、IDA和HIEW等。

三、动态跟踪分析

 虽然从静态上可以了解程序的思路,但是并不可能真正了解地了解软件的细节,如静态分析找不出线索,就要动态分析程序,另外,碰到压缩程序,静态分析也无能为力了,只能动态分析了。所谓动态分析是利用SOFTICE或TRW2000一步一步地单步执行软件。为什么要对软件进行动态分析呢?这主要是因为:

1、许多软件在整体上完成的功能,一般要分解成若干模块来完成,而且后一模块在执行时,往往需要使用其前一模块处理的结果,这一结果我们把它叫中间结果。如果我们只对软件本身进行静态地分析,一般是很难分析出这些中间结果的。而只有通过跟踪执行前一模块,才能看到这些结果。另外,在程序的运行过程中,往往会在某一地方出现许多分支和转移,不同的分支和转移往往需要不同的条件,而这些条件一般是由运行该分支之前的程序来产生的。如果想知道程序运行到该分支的地方时,去底走向哪一分支,不进行动态地跟踪和分析是不得而知的。

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

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

由于上述原因,在对软件静态分析不行的条件下,就要进行动态分析了。哪么如何有效地进行动态跟踪分析呢?一般来说有如下几点:

1、对软件进行粗跟踪
所谓粗跟踪,即在跟踪时要大块大块地跟踪,也就是说每次遇到调用CALL指令、重复操作指令REP.循环操作LOOP指令以及中断调用INT指令等,一般不要跟踪进去,而是根据执行结果分析该段程序的功能。

2、对关键部分进行细跟踪

 对软件进行了一定程度的粗跟踪之后,便可以获取软件中我们所关心的模块或程序段,这样就可以针对性地对该模块进行具体而详细地跟踪分析。一般情况下,对关键代码的跟踪可能要反复进行若干次才能读懂该程序,每次要把比较关键的中间结果或指令地址记录下来,这样会对下一次分析有很大的帮助。软件分析是一种比较复杂和艰苦的工作,上面的几点分析方法,只是提供了一种基本的分析方法。要积累软件分析的经验需要在实践中不断地探索和总结。

 

软件沙箱技术 – 安全分析沙箱Cuckoo Sandbox

1.Cockoo的功能 Cockoo Sandbox是开源安全沙箱,基于GPLv3。目的是恶意软件(malware analysis)分析。使用的时候将待分析文件丢到沙箱内,分析结束后输出报告。...
  • abcd1f2
  • abcd1f2
  • 2016年01月15日 14:48
  • 4144

《软件调试分析技术》学习笔记(十二)

参数和返回值是函数的两个重要组成部分,可以通过参数向函数传入信息,通过返回值使函数传出信息。看一段C语言代码:  #include int function(int a, int b) { ...
  • hacke2
  • hacke2
  • 2012年03月14日 16:40
  • 805

玩可视化大数据分析软件要掌握的6个核心技术(上)

大数据技术与商业智能BI是相辅相成的,前面的文章就提到大数据技术可以帮助BI产品突破业务和技术的双挑战。可视化大数据分析软件在快速发展的市场环境中,迎来了越来越多的技术要求。这些核心技术成为大数据获取...

面向对象软件度量技术的分析与综述----整理

目录   摘要... 2 1      引言... 3 2  面向对象软件度量... 4 2.1 面向对象的特征... 4 2.2 面向对象软件度量方法... 4 2.2.1 面向类的度量——CK度量...

《0day:软件漏洞分析技术》读书笔记

//此代码出自《0day安全:软件漏洞分析技术》 //由于一开始读不懂,就慢慢一点点的加入了注释 //欢迎各位拍砖 //注释中实际内存地址,就是虚拟地址。 #include  #include  i...

《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考

I will Make Impossible To I'm possible                     -----------LittleHann   看了2个多星期。...

《软件调试分析技术》学习笔记(七)

从代码执行的角度上来说,算法分为无条件执行算法和有条件执行算法两种。对于无条件执行算法,它的代码执行顺序总是这变的,不管发生什么情况都是从上到下依次执行;而在条件执行算法中,代码的执行并不是一路向下的...
  • hacke2
  • hacke2
  • 2012年02月12日 21:34
  • 877

0day安全-软件漏洞分析技术(第一版)--8_3_vtable 虚表攻击源码改造

改造成不需要人工定位的。 #include "windows.h" #include "stdio.h" #include "iostream.h" char shellcode[]= "\xFC...

软件动态更新技术总结之1 CIL:程序分析与变换的中间语言工具(sec0-sec3)

前言      更新软件的传统做法是首先关闭旧版本软件,安装新软件,最后启动新软件。如果是对可靠性实时性要求低的软件,这么做是可以的。但如果对需要提供连续服务的软件做更新,重启系统通常是不容许的,重启...

[技术讨论]网络软件开发的bug分析与公司开发管理问题之腾讯篇二(有更新)

接上文腾讯篇第一部分,地址是:http://blog.csdn.net/qingrun/article/details/85415215.5    微信的bug——微信不识数2012年12月26日腾讯...
  • qingrun
  • qingrun
  • 2013年02月01日 16:45
  • 3317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件分析技术
举报原因:
原因补充:

(最多只允许输入30个字)