1 前言
上一章节我们成功实现利用动态分析技术来爆破软件登录功能的目的。
而本章则是使用另一个同样非常常用的技术来分析爆破软件:静态分析。
使用高级语言编程的程序有两种形式,第一种就是我们现在所见的,使用c++编译生成的机器语言在CPU上执行。
这种机器语言与汇编语言是一一对应的,所以我们就可以依靠一些软件将其翻译为汇编代码,即反汇编,然后再对汇编代码进行分析。
而另一种则是边解释边执行的程序,称之为解释性语言,比如Python、Java等,它们编译后的程序可以直接被还原为高级语言的原始结构,这个过程被称为反编译,一般比汇编要简单。
而所谓的静态分析,就是通过反汇编、反编译的手段来获得程序汇编代码或源代码,进一步分析程序的运行流程,了解模块所完成的功能等目的。
2 文件类型分析
正如上面所说,由不同语言生成的程序逆向方式是不一样的。
所以我们第一步,一般都是要先分析这个程序是什么类型的,这同样有工具可以帮我们做到这一点。
常见的工具有PEiD
、Exeinfo PE
这两个,我使用的后者,可以直接下载:Exeinfo PE 0.0.8.1.exe
这个工具的使用是很简单的,直接点击启动之后,将你想要分析的程序拖进去就行了:
上面从上面箭头所指向的位置,就会显示出来这个可执行文件的信息,这个程序就是用vc++
编译生成的,它已经分析出来了。
除此之外,它还能得到很多别的信息,也就是上面:程序入口、文件偏移等等等等。
这些其实就是根据windows系统上的可执行文件exe
文件格式分析出来的,也就是前面提到过的 PE文件格式。
它之所以能够分析出这是由什么编译的,依靠的是一个叫做特征码的东西。说白了,也就是一段固定的二进制数据。
不同开发语言都有其固定的启动代码,利用这一点就能分析,只不过过程比较繁琐而已,但现在已经有人将其写好了程序,我们直接用即可。
3 反汇编引擎
对于分析exe
可执行文件来说,我们需要将其二进制翻译为汇编代码。
而实现这一功能的就是一个叫做反汇编引擎的程序。
别听起来好像很高大上的样子,其实也就是一段c/c++程序而已,它的输入就是二进制串,输出就是汇编代码,我们完全是可以将其集成到自己的程序中的。
由于不同CPU支持的指令集(也就是实现某一功能的机器码)并不完全相同,所以还有很多扩展的机器指令,比如FPU、MMX、SSE等等等等,如果想要自己研发一款反汇编引擎,是一件非常困难的事情,需要研读大量的CPU指令文档。
反汇编引擎有很多,比如下面这些:
ODDisasm
:以前OD动态调试软件所使用的反汇编引擎,目前已经过时了。BeaEngine
:强大、没有明显缺点,性能不错,但编程风格杂乱。Udis86
:非常受欢迎,代码风格简洁,几乎是解码速度最快的反汇编引擎。Capstone
:几乎是所有反汇编引擎的集大成者,支持的CPU架构、扩展指令集是最全的,不过速度较慢、使用繁琐,用于动态调试的x64dbg
就是使用的它。AsmJit
:这个不同于前面的引擎,它是一个汇编器,可以让你通过C++类操作的方式来生成对应的汇编代码,常用于代码混淆器、远程注入代码等方向。Keystone
:它和上面的Capstone
是同一系列的引擎,由统一维护者主导开发,只不过Capsone
负责跨平台多指令集的反汇编工作,而Keystone
则负责跨平台多指令集的汇编工作,但不能像上面的AsnJit
那样进行函数式编程。
对于反汇编引擎Udis86
、BeaEngine
、Capstone
有以下几项分析比较,可以参考:
- 性能:
Udis86
>BeaEngine
>Capstone
- 解码能力:
Capstone
>BeaEngine
>Udis86
- 平台支持:
Capstone
>BeaEngine
=Udis86
- x86扩展指令集:
Capstone
>BeaEngine
=Udis86
如果需要在x86-x64
下性能好,解码能力强的反汇编引擎。不需要寄存器分析之类的特性,Udis86
更合适。
如果需要寄存器分析,则Capstone
与BeaEngine
更合适。
如果需要支持ARM架构,则Capstone
更合适。
而对于汇编引擎来说,如果对指令集、多平台要求极高,则Keystone
比较合适。
而如果实现函数式编程、或者不希望暴露汇编过程,可以使用AsmJit
。
4 IDA静态分析
一般来说,在进行静态分析之前,我们还需要判断目标程序是否加壳,如果加了壳,还要进行脱壳才行。
这个后面会讲到,简单来说,加壳就是用一些算法将原本规则的可执行文件格式进行打乱、混淆,让你难以对其进行分析。
由于本程序并没有进行加壳,所以可以直接进行分析。
而IDA这款软件就是静态分析最常用的工具,它非常的强大、复杂,想要彻底掌握它需要学习大量的知识。
它不仅仅只是分析windows上的可执行文件,Mac
、Java
、.NET
等平台文件格式也同样可以进行分析。
首先我们需要下载IDA这款软件。
4.1 IDA下载使用
但它免费的版本的功能较少,而付费版本的价格比较昂贵,所以我这里提供一份绿化版:IDA_Pro_v8.3_Portable.7z
下载解压后,可以看到如下文件:
进入文件夹,这两个程序即为我们的ida启动文件,上面的ida为32位的,下面的ida64则为64位的,看情况启动。
由于我们这里是32位的,所以直接启动上面的32位即可:
然后会有一个启动面板,点击Go
,直接进入。
进入主页面之后,将我们前面的那个TraceMe32.exe
程序拖进来:
此时就会弹出一个面板让你选择按照哪种格式进行反汇编,这个一般默认即可,IDA软件非常的强大,会自动帮我们识别的,所以可以直接点击下面的Ok
。
由于vs即使在release
模式下编译依旧会产生调试文件,所以这里是在询问是否加载调试文件,但我也没有将调试文件发给你,所以直接填No
即可。
然后它就开始反汇编、分析了,一般需要几分钟的时间。