10

我有一个 ELF 文件,我想将其反编译为C代码,并对生成的C代码进行简单的更改并将其重建为 ELF。

反编译的C代码不需要完全是人类可读的。例如,如果变量和函数名称被混淆,那没关系。

我可以使用哪些工具在 Linux 上完成此任务?

PS:如果C无法反编译成或者不容易,我愿意考虑反编译成汇编语言,尽管调整汇编源代码对我来说非常困难。

更新:您可能会假设我正在使用以下C程序来获取我的a.outELF。现在,进一步假设我已经丢失了这个原始C来源。所以,我现在想将它反编译为(可能是混淆的)C源代码,在其中我至少能够更改字符串"world"、、"Hello"和等小东西"Bye",或者能够反转if语句的含义等。

#include <stdio.h>
#include <string.h>

char buf[256];

const char *Hello = "Hello";
const char *Bye = "Bye";
const char *Who = "world";

char * greet(const char *greeting, const char *str) {
    strcpy(buf, greeting);
    strcat(buf, ", ");
    strcat(buf, str);
    strcat(buf, "!");
    return buf;
}

int main(int argc, char *argv[]) {
    int sayHello = 0;

    if(sayHello) {
        printf("%s\n", greet(Hello, Who));
    } else {
        printf("%s\n", greet(Bye, Who));
    }
    return 0;   
}
4

2 回答 2

10

这将为您(几乎)提供汇编代码翻译:

objdump --disassemble <elf file>

我说几乎是因为输出包含一些注释,如二进制文件位置标记,不能直接作为汇编程序的输入,但它很接近。

于 2013-06-22T05:14:57.537 回答
3

你为处理器编写一个模拟器,然后通过你的模拟处理器运行精灵指令。这通常不是一项太多的任务,因为即使是 CISC 处理器也有相对较小的包含指令集来执行简单的操作。

当您完成这项工作时,请查看更有效的解决方案,例如输出 C 代码以匹配指令。

于 2016-12-26T15:07:49.670 回答