CTF-All-In-One

5.10 基于二进制比对的漏洞分析

基本原理

软件开发商为了修补软件系统的各种漏洞或缺陷所提供的修补程序被称为软件补丁。对于开源软件,补丁本身就是程序源代码,打补丁的过程就是用补丁中的源代码替换原有的代码。而对于闭源软件,厂商只提供修改后的二进制代码,例如微软的Windows系统补丁。这时就需要使用二进制代码比对技术,定位补丁所修补的软件漏洞。

二进制代码比对的根本目的是寻找补丁前后程序的差异。这里所说的差异是指语义上的差异,即程序在执行时所表现出的不同的逻辑行为。通过二进制代码比对定位出有差异的函数,再经过进一步的人工分析,可以确定出二进制补丁对程序执行逻辑上的修改,从而推测漏洞位置及成因,辅助漏洞挖掘工作。

主要的实现原理有如下几种:

方法实现

基于文本的比对

基于二进制文件的文本比对仅适用于查找文件中极少量字节差异。过程如下:

基于反汇编代码的文本比对实际上是一种指令级别的比对方法,研究指令之间的相似性和差异性:

基于图同构的比对

在构造可执行文件的图的时候,做出如下假设:

基于同构图比对的技术可分为两种: