一、前言
上一章节我们成功实现了使用动态分析技术来爆破软件登录功能的目的。
而本章则是使用另一个同样非常常用的技术来分析爆破软件:静态分析。
使用高级语言编程的程序有两种形式,第一种就是我们现在所见的,使用c++编译生成的机器语言在CPU上执行。
这种机器语言与汇编语言是一一对应的,所以我们就可以依靠一些软件将其翻译为汇编代码,即反汇编,然后再对汇编代码进行分析。
而另一种则是边解释便执行的程序,称之为解释性语言,比如Python、Java等,它们编译后的程序可以直接被还原为高级语言的原始结构,这个过程被称为反编译,一般比汇编要简单。
而所谓的静态分析,就是通过反汇编、反编译的手段来获得程序汇编代码或源代码,进一步分析程序的运行流程,了解模块所完成的功能等目的。
二、文件类型分析
正如上面所说,由不同语言生成的程序逆向方式是不一样的。
所以我们第一步,一般都是要先分析这个程序是什么类型的,这同样有工具可以帮我们做到这一点。
常见的工具有PEiD
、Exeinfo PE
这两个,我使用的后者,可以点击这里前往下载,提取码:3tn6
。
这个工具的使用是很简单的,直接点击启动之后,将你想要分析的程序拖进去就行了:
上面从上面箭头所指向的位置,就会显示出来这个可执行文件的信息,这个程序就是用vc++
编译生成的,它已经分析出来了。
除此之外,它还能得到很多别的信息,也就是上面:程序入口、文件偏移等等等等。
这些其实就是根据windows系统上的可执行文件exe
文件格式分析出来的,也就是前面提到过的PE文件格式。
后面章节会带大家看看如何分析的。
它之所以能够分析出这是由什么编译的,依靠的是一个叫做特征码的东西。
说白了,也就是一段固定的二进制数据。
不同开发语言都有其固定的启动代码,利用这一点就能分析,只不过过程比较繁琐而已,但现在已经有人将其写好了程序,我们直接用即可。
三、反汇编引擎
对于分析exe
可执行文件来说,我们需要将其二进制翻译为汇编代码。
而实现这一功能的就是一个叫做反汇编引擎的程序。
别听起来好像很高大上的样子,其实也就是一段c/c++程序而已,它的输入就是二进制串,输出就是汇编代码,我们完全是可以将其集成到自己的程序中的。
由于不同CPU支持的指令集(也就是实现某一功能的机器码),并不完全相同,所以还有很多扩展的机器指令,比如FPU、MMX、SSE等等等等,如果想要自己研发一款反汇编引擎,是一件非常困难的事情,需要研读大量的CPU指令文档。