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静态分析相结合来决定逻辑实现。
总结
这工具相当好用,不管是第三方的增量还是自己开发的程序,找不同点都非常容易。
工作任务中,经常有这个版本好使,下个版本不好使了,那到底哪的代码实现被改挫了呢,一目了然。不用去一步一步的单步了.
- use bindiff to diff patch
- diff & patch
- diff patch
- diff + patch
- Patch/Diff
- diff & patch
- diff & patch
- diff patch
- diff & patch
- diff&&patch
- diff patch
- diff&&patch
- Use the thunderbird to send patch
- The Ten Minute Guide to diff and patch
- The Ten Minute Guide to diff and patch
- diff和patch
- diff和patch使用指南
- diff/patch补充
- autojump——一步到位
- windows下安装composer,纯手工,绝对有效
- JavaScript 面向对象之一 —— 对象(对象与JSON的区别)
- 文件描述符与文件指针
- Effective Java读书笔记十三(Java Tips.Day.13)
- use bindiff to diff patch
- Qt_log2000_事件的传递
- 32位的Ubuntu16.04安装QT5.8,并编译实现window环境下的代码
- [C++ 从入门到放弃-02]C++STL之string
- uniq命令
- IBatis——初步总结
- 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针的理解
- centos7下面创建自定义开机启动服务
- 第二行代码第一章笔记