主要方法与技术
软件逆向分析并不是一种单项技术,其涉及的技术和方法很多。按照分析方式的不同,可以将软件逆向分析分为静态和动态两大类。静态分析主要是直接对软件的可执行代码进行分析;而动态分析是通过直接运行软件,然后监测软件运行过程,实施分析。在实际分析过程中,主流的思路是以动态分析为主,一方面利用模糊测试等技术构造执行的不同路径,另一方面也利用静态分析手段弥补动态分析过程中的不足,优化和提升动态分析的能力。
反汇编与反编译
反汇编与反编译是软件逆向分析的第一步,将完全不可读的二进制可执行程序转变为用户基本可读、功能等价的汇编代码或其他高级语言代码。
程序调试
程序调试是通过实际运行软件,利用断点、单步执行等方式对软件执行过程进行细粒度分析的过程。一般性的应用软件调试借助于WinDbg等就可实现,对于操作系统驱动程序等内核代码的调试较为复杂,需要借助于SoftICE或者VMware+WinDbg等调试工具。
与传统的静态分析方法相比,程序调试的优点在于它可避免用户对指令的复杂推理分析过程,可以直接对每条指令的执行结果进行分析。
程序切片
程序切片通过分析程序代码之间的依赖关系来分析指令的相关性,从而帮助用户提取其所感兴趣的代码片段。
污点传播分析
污点传播分析将所感兴趣的数据做标记,然后通过分析对该污点数据的处理过程,根据每条指令的污点传播规则,分析数据的传递关系。
符号执行
符号执行的基本思想是用符号变量作为输入参数,对程序进行模拟执行,然后对程序的执行路径进行分析,并提取路径中的约束条件,通过对约束进行求解实现对程序安全性及路径可达性等分析。
模糊测试
模糊测试的基本思想是通过构造各种不同的输入参数,尽可能触发执行软件的各种路径,通过对执行结果的监测来实现相关的分析或检测目标。
应用
恶意软件分析
恶意软件的分析过程是不可能依赖源代码的,因此,对恶意软件的分析只能依赖于软件逆向分析。
网络协议逆向分析
当前网络空间中的绝大多数应用都要依赖于网络和网络协议,通过网络协议逆向分析可以提取出网络协议中数据包格式、关键字、协议状态机等信息,从而对僵尸网络设计抑制机制。
软件漏洞分析与利用
对于软件漏洞的发现方式有多种,比如模糊测试、预先筛选可疑代码等。