如何将ELF可执行文件转换为C代码?生成的C代码不需要是人类可读的

我有一个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>

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

上一篇:如何获取指向动态库(Linux ELF)特定部分的指针?


下一篇:c – ELF格式操作