ELF x86_64ファイルで文字列リテラルを変更する

ELF x86_64ファイルで文字列リテラルを変更する

ELF x86_64(デフォルトでは実行可能ファイル)があり、ファイルの文字列リテラルを変更したい(ただし実行可能ファイルを壊さずに)... Linux bash / shスクリプト操作を使用してプログラムでこれを行う必要がありますか? 。

どのような方法が最も簡単ですか?

sedプレーンテキストファイルのようにどこかで使用できますが、新しい文字列は前の文字列より長くてはならず、0で終わらなければならないという制限があることを読んでいます。長い文字列置換を使用しますか?

ありがとうございます。

答え1

これにより、短い置換項目をNULで埋め、長い置換項目を切り捨てて、誤ってファイルが破損するのを防ぎます。

もしあなたなら本物より長い文字列に置き換える必要があり、再コンパイルする以外に他の方法はありません(またはファイル内の別の長い文字列をハイジャックし、以前の文字列へのすべての参照をThereを指すように変更するなど、即座にハッキング技術を使用します) 。 ELFファイルはAndroid APKのようなアーカイブではありません。

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

必要なすべてを変更しPATTERNて変更してください。 ()でNULREPLACEMENTと一致しないように注意してください。\0PATTERN

これはおそらくより簡単になります。

例:

$ 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

関連情報