我有一个已编译的可执行(二进制)文件 -
mybin
- 其中 grep
表示包含与给定文本字符串的正匹配 - Cats
。
grep “Cats” mybin
Binary file mybin matches
如果我将
-a
标志与 grep
一起使用,我现在可以看到实际的匹配:
grep -a “File” mybin
<lots of text> (QString)Cats <lots of text>
需要明确的是,这不是二进制文件中的纯文本字符串,即如果我使用文本编辑器打开文件,我将看不到它。
我想要做的是将二进制文件中出现的字符串
Cats
替换为字符串Bear
,并将可执行文件保留为工作可执行文件。
如何在不更改源代码并重新编译二进制文件的情况下执行此操作?在不损坏可执行文件及其操作的情况下,这样的操作是否可能?
如果可以的话:
Cats
-> Bear
可以,但 Cats
-> Dragons
则不行) .任何帮助将不胜感激。
也许,只需使用 perl,它可以很好地处理二进制文件:
perl -pi -e 's/Cats/Dragons/g' mybin
或
perl -pi -e 's/Cats/Dragons/' mybin
或
sed 's/43617473/447261676f6e/g' original_binary > patched_binary
在此命令中,“43617473”是“Cats”的十六进制表示,“447261676f6e”是“Dragon”的十六进制表示。根据您的具体情况调整这些值。
perl -pi -e 's/Cats/Dragons/s' original_binary > patched_binary