2

本质上,我想重写一个二进制文件以执行有关其实际任务的其他任务。关于二进制重写,过程似乎如下:

  1. 从现有二进制文件创建控制流图
  2. 以适当的格式创建具有所需更改的代码片段
  3. 从修改后的 CFG 创建一个二进制文件

我遇到了一些工具,它们要么无法在我的 ubuntu 12.04 上编译,要么无法下载,要么我找不到关于如何热补丁/重写二进制文件的像样的教程/howto。这些工具是:

ParseAPI, Code-Surfer/x86, EEL, LEEL, Jakstab, DynInst, Diablo + Lancet

更准确地说,我想分析给定二进制文件的最常用功能,并以在执行这些功能之前执行给定指令集的方式对其进行更改。这些指令包括加载存储的字节数组、读取某个位置的字节并将其与预定义的值进行比较。我想确保二进制文件在每次试验期间都绝对执行这些指令。

我遇到了 2 种替代方法,它们基本上改变了标准 c 函数(如memcpy()strcpy()printf()等),因为我假设这些函数很有可能成为二进制文件的一部分:

  1. LD_PRELOAD: 定义我自己的库,让它们在普通库之前加载
  2. 使用自己的标准函数版本编译二进制文件(给出源代码)gcc -fno-builtin -o strcpy strcpy.c

这种方法的缺点是即使我替换了标准的 c 函数,它们也不一定要被调用,因此我的指令也不会被执行。

你们有二进制重写的经验吗,或者你们有完成这个相当奇特任务的线索吗?

此致!

4

1 回答 1

1

BAP 和 Dyninst 会帮助你。您可以使用 BAP ( http://bap.ece.cmu.edu/ ) 来获取二进制文件的控制流图。它有一个非常易于使用的实用程序来从二进制文件创建控制流图。您可以使用 dyninst 来检测二进制文件并执行所需的操作。BAP 绝对可以在 ubuntu12.04 上运行。Dyninst 可能无法在 12.04 上编译(可能存在一些链接问题)。一个简单的操作是您在 10.04 上进行检测并在 12.04 上运行重写的二进制文件。这两种工具都是免费的。

于 2013-07-18T14:09:28.193 回答