本质上,我想重写一个二进制文件以执行有关其实际任务的其他任务。关于二进制重写,过程似乎如下:
- 从现有二进制文件创建控制流图
- 以适当的格式创建具有所需更改的代码片段
- 从修改后的 CFG 创建一个二进制文件
我遇到了一些工具,它们要么无法在我的 ubuntu 12.04 上编译,要么无法下载,要么我找不到关于如何热补丁/重写二进制文件的像样的教程/howto。这些工具是:
ParseAPI, Code-Surfer/x86, EEL, LEEL, Jakstab, DynInst, Diablo + Lancet
更准确地说,我想分析给定二进制文件的最常用功能,并以在执行这些功能之前执行给定指令集的方式对其进行更改。这些指令包括加载存储的字节数组、读取某个位置的字节并将其与预定义的值进行比较。我想确保二进制文件在每次试验期间都绝对执行这些指令。
我遇到了 2 种替代方法,它们基本上改变了标准 c 函数(如memcpy()
、strcpy()
、printf()
等),因为我假设这些函数很有可能成为二进制文件的一部分:
LD_PRELOAD
: 定义我自己的库,让它们在普通库之前加载- 使用自己的标准函数版本编译二进制文件(给出源代码)
gcc -fno-builtin -o strcpy strcpy.c
这种方法的缺点是即使我替换了标准的 c 函数,它们也不一定要被调用,因此我的指令也不会被执行。
你们有二进制重写的经验吗,或者你们有完成这个相当奇特任务的线索吗?
此致!