替换目标文件中的字符串

逆向工程 linux 字符串 目标代码
2021-06-26 10:30:34

我在 Linux 下有一个目标文件,里面有很多字符串。我想替换代表此对象中特定路径的所有字符串。

我可以使用该strings实用程序查看需要更改的所有字符串

有没有办法一次替换所有这些字符串?

我要更改的路径较短,因此应该相对容易,只需在字符串末尾添加终止零,使其在文件中保持相同的长度。

我可以编写一个执行此操作的简短程序,但我想知道是否已经有一个工具可以用于此目的。

2个回答

这是一种使用 Perl 做到这一点的方法:

perl -pi -e 's/pattern/replacement/g' binaryfile

例如,我创建了这个简单的 C++ 程序:

// silly.cpp
#include <iostream>
#include <string>

int main()
{
    std::string name("Mellowcandle");
    std::cout << "The name is " << name << std::endl;
    std::cout << "One could call this person " << name << std::endl;
    return 0;
}

编译和链接后,我在二进制文件上使用了它:

perl -pi -e 's/Mellowcandle/Edward\0\0\0\0\0\0/g' silly

这给出了预期的效果。请注意,未能将替换字符串填充到更长的字符串长度将导致这些字节被简单地省略,如果您尝试运行生成的二进制文件,则会导致段错误或更糟。

爱德华的 Perl 答案很棒,所以通常我不会发布另一个答案,但是为了回答您问题的另一部分...

我想知道是否已经有一个工具可以用于此目的。

是的,几乎每个像样的十六进制编辑器都有一个全局搜索和替换功能。010 Editor在 Linux 上运行并且绝对支持此功能。