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

反编译的C代码无需完全可读。例如,如果混淆了变量和函数名,那就可以了。

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

PS:如果无法编译为C或将其编译为不容易,尽管对汇编源进行调整对我来说非常困难,但我愿意考虑将其反编译为汇编语言。

更新:您可能会假设我正在使用以下C程序来获取a.out ELF。现在,进一步假设我已经失去了这个原始的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;
}

最佳答案

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

objdump --disassemble <elf file>

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

07-24 09:45
查看更多