程序切片
-
思想:程序切片主要通过分析程序代码之间的依赖关系来分析指令的相关性,从而帮助用户提取其所感兴趣的代码片段。
-
程序切片根据用户所关注的指令和指令相关的操作数,提取与该指令及操作数相关联的代码,从而在软件逆向分析中减少其他无关代码的干扰。
-
程序切片即可以应用于程序的源代码分析,也可以用于对可执行代码反汇编得到的汇编代码进行分析。
污点传播分析
-
基本思想:将所感兴趣的数据做标记,即标记为污点数据,然后通过分析对该污点数据的处理过程,根据每条指令的污点传播规则,分析数据的传递关系。
-
污点传播一般采取动态分析方式,是一种相对准确、高效的动态数据流分析方法。
-
主要实现方式:基于插桩、基于硬件、基于编译器扩展和基于硬件模拟器等方式。基于硬件模拟器的实现方案是目前应用最多的方案,该方案兼顾了性能和可扩展性问题。
-
面临的问题:在实际分析过程中的隐式污点传播问题,由于控制依赖、查表操作等引入的隐式污点传播无法简单地引入或去除,直接影响到了分析的准确性。
符号执行
-
符号执行是分析程序内部逻辑的一直基础方法。
-
符号执行在软件逆向分析过程中常用语路劲约束条件的分析。
-
基本思想:将目标程序代码中部分变量和运算符号化,通过对各种条件分支的符号化来形成路劲的约束条件。
-
作为数据流分析方法的基本思想:用符号变量作为输入参数,对程序进行模拟执行,然后对程序的执行路径进行分析,并提取路径中的约束条件,通过对约束进行求解实现对程序安全性及路径可达性等分析。
模糊测试
-
原本用途:通过构造各种畸形的数据输入来测试软件实现的正确性。
-
在逆向分析中的用途:尽可能多地触发软件的各种执行路径,它弥补了软件动态逆向分析的缺陷。
-
基本思想:通过构造各种不同的输入数据,尽可能地触发执行软件的各种路径,通过对执行结果的监测来实现相关的分析或监测目标。
-
总结:模糊测试本质上就是通过大规模的构造可能影响软件运行的数据,然后对每个数据进行动态验证,,正因为如此模糊测试主要缺点是效率较低。
处理器硬件架构基础
COU结构介绍
-
CPU是计算机中央处理器的简称,控制着计算机的操作和执行数据处理功能,其主要结构包括寄存器、ALU、控制器和内部总线。
-
CPU的4部分组成当中,寄存器记录了操作系统关键数据结构的入口,这些信息是软件漏洞与恶意代码分析的基础信息。
-
EIP寄存器是指令指针寄存器,存储了当前执行指令的地址。
-
通用数据寄存器包括EAX、ECX、EDX、EBX,,通常用于存储参与计算的数据与运算结果。
段寄存器包括代码段寄存器CS,数据段寄存器DS,堆栈段寄存器SS,附加段寄存器ES、FS、GS。
保护模式
-
IA-32架构的CPU具有两种工作模式:实模式和保护模式。工作模式收到CR0控制寄存器的PE标志位控制。
-
CPU刚开始初始化后工作在实模式下,PE标志位值为0,仅使用20位地址,寻址空间为1MB,当操作系统启动时,将CPU的PE标志位值1,开启保护模式,使用32位地址,内存寻址空间扩展到4GB。
-
实模式不支持多线程,不能实现权限分级;保护模式下引入内存的分页和分段管理机制,实现了内存分页和权限分级,并支持多线程多任务。
中断处理与异常处理
-
中断和异常是程序执行过程中的插曲,需要处理器强制暂停当前任务,转移到一个称为中断处理程序或者异常处理程序的特殊任务中。
-
关于异常和中断,都分为内部和外部两种情况,一般外部是有I/O或硬件产生,内部由软件产生。