use bindiff to diff patch

来源:互联网 发布:软件检测 编辑:程序博客网 时间:2024/06/14 02:55

看到google开源的一款2进制代码比较工具bindiff, 这软件以前还是商业版,google收购了人家的公司,现在变成免费版本了.

这工具主要用来比较增量的可执行文件里面汇编代码的差异, 软件的原始设计目的是比较MS的patch文件.

下载点

google-bindiff420-win-x86.zip

初级使用方法

软件是java写的,先安装jre-8u131-windows-x64.exe
将java_home和path设置好。

JAVA_HOME=D:\Program Files\Java\jre1.8.0_131\
path += %JAVA_HOME%\bin

软件要比对的是IDA的idb文件,先安装IDA6.8.

安装bindiff, 安装文件为bindiff420-win-x86.msi
将bindiff420-win-pluginsonly.zip和bindiff-license-key.zip中的文件释放到bindiff420安装目录下的bin目录.

假设要分析的代码(假设这工程是第三方的)如下

// testcase0510a.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdlib.h>#include <stdio.h>void fnTest(int iIn);int main(){    fnTest(rand());    printf("END\n");    system("pause");    return 0;}void fnTest(int iIn){    // if ((iIn > 0x100) && (0 == (iIn % 2))) // v1    if ((iIn > 90) && (iIn <= 100) && (0 == (iIn % 2))) { // v2 这行算法升级了, 这里是增量的修改        printf("luck\n");    }    else {        printf("oh, no\n");    }}

用IDA打开2个增量的exe, 分析完后,形成2个idb
testcase0510a_v1.exe => testcase0510a_v1.idb
testcase0510a_v2.exe => testcase0510a_v2.idb

运行bindiff.cmd,启动UI.

建立工作区

这里写图片描述
这里写图片描述

增加新比较

这里写图片描述
这里写图片描述

找增量的函数

这里写图片描述
这里写图片描述
对于本实验,只找相似度高,但是不一样的函数,不勾选”Show identical”, 马上就找到了, 就一个函数。

打开图形模式看代码增量的反汇编

这里写图片描述
当找到增量的函数时,函数地址已经知道了。这时,如果用打开2个IDA直接看反汇编,也是可以的。但是bindiff更专业,看完bindiff的分析,再去用IDA分析,思路更清晰。
这里写图片描述
bindiff将增量的代码用黄框围起,说明是不同的代码。
绿色的代码框内是相同的代码。
比较黄色代码和上下文逻辑可以看出增量的代码功能。
v1版本:当入参<=0x100时,走失败流程。
v2版本 : 失败流程判断与v1不同,具体由调试器动态分析和IDA静态分析相结合来决定逻辑实现。

总结

这工具相当好用,不管是第三方的增量还是自己开发的程序,找不同点都非常容易。
工作任务中,经常有这个版本好使,下个版本不好使了,那到底哪的代码实现被改挫了呢,一目了然。不用去一步一步的单步了.

0 0
原创粉丝点击