直接替换二进制文件中的文本

问题描述 投票:0回答:1

我有一个已编译的可执行(二进制)文件 -

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
,并将可执行文件保留为工作可执行文件。

如何在不更改源代码并重新编译二进制文件的情况下执行此操作?在不损坏可执行文件及其操作的情况下,这样的操作是否可能?

如果可以的话:

  1. 我该怎么做?
  2. 是否有任何我需要注意的陷阱,例如替换字符串必须与原始字符串的长度相同(例如
    Cats
    ->
    Bear
    可以,但
    Cats
    ->
    Dragons
    则不行) .

任何帮助将不胜感激。

string grep binary executable
1个回答
1
投票

也许,只需使用 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
© www.soinside.com 2019 - 2024. All rights reserved.