修改 ELF x86_64 文件中的字符串文字

修改 ELF x86_64 文件中的字符串文字

我有一个 ELF x86_64 (基本上是一个可执行文件),我想替换文件中的字符串文字(但是不会损坏可执行文件)...并且我应该使用 Linux bash/sh 脚本以编程方式执行此操作。 。

哪种方法最简单?

我读过sed可以使用的地方(比如在常规文本文件上),但有一个限制,即新字符串不得比旧字符串长,并且必须以零结尾......如果我想怎么办用更长的字符串替换?

谢谢。

答案1

这将用 NUL 填充较短的替换内容并截断较长的替换内容,从而防止您意外损坏文件。

如果你真的需要用更长的字符串替换它,除了重新编译之外没有其他方法(或者使用一些临时黑客技术,例如从文件中劫持另一个更长的字符串并将所有对旧字符串的引用更改为指向那里)。 ELF 文件不是像 android apk 那样的一种档案。

perl -0777 -pe 's/PATTERN/substr q{REPLACEMENT}."\0"x length$&,0,length$&/e or die "pattern not found"' -i file

更改PATTERNREPLACEMENT更改为您需要的任何内容。注意不要匹配\0中的 NUL () PATTERN

这或许可以变得更简单。

例子:

$ cp /bin/sh /tmp/sh
$ /tmp/sh -c 'exec 7</tmp/jeg'
/tmp/sh: 1: cannot open /tmp/jeg: No such file
$ perl -0777 -pe 's/No such file/substr q{BLA BLA WHATEVER}."\0"x length($&),0,length$&/e' -i /tmp/sh
$ /tmp/sh -c 'exec 7</tmp/jeg'
/tmp/sh: 1: cannot open /tmp/jeg: BLA BLA WHAT

相关内容