さまざまな情報を含む C++ バイナリに「透かし」を入れようとしています。私はビルド プロセスを制御していないため、ビルド時にこの情報を含めることは困難です。これまでのところ、私がここから得た心に近い唯一のアイデアは、c++ バイナリを指定すると、以下のような Bash スクリプトを生成するスクリプトです。
つまり、元のバイナリに bash if-else を追加します。これは、最初の引数が「--version」(この場合、何らかの情報をエコーする) であるかどうか (この場合、それ自体をファイル「originalBinary」に単純にデコードする) をチェックします。 " 次に、./originalBinary を実行します)。
これは明らかに理想的ではありません:
- 現在、バイナリのコピーが 2 つあり (大きなバイナリの場合は問題になる可能性があります)、
- 実行中のプロセスは、
./originalBinary
何が起こっているのかわからない人にとって混乱を招くことによって開始されました
私が疑問に思っているのは、./originalBinary
呼び出しをある種の特別なものに置き換えるようなことができるかどうかです.execexec $0
に最初からファイルを読み取らないように指示することもできますが、オフセットは100文字です(または先頭の Bash ビットの長さは ) です。
もう 1 つのアイデアは、Bash スクリプト自体を編集させることでした。つまり、最初の 21 行を sed で削除し、それ自体を呼び出して、コマンドが返さ./$0
れたときに if-else を追加します。./$0
ただし、これは脆弱に思えます (呼び出しが戻る前にマシンがクラッシュした場合はどうなるでしょうか?)。
最後に、バイナリが共有リソースである場合、これは失敗するという印象を受けます.
あるいは、ビルド後の C++ バイナリに注釈を付ける他の方法を提案できますか?
特定のバイナリにリンクするのではなく、必要な情報を含むオブジェクトファイルを準備することを検討しましたが、これには、ELFを何らかの形でオブジェクトファイルに変換し、オブジェクトファイルをリストに追加してから再リンクする必要があります(ここから、これで実行できるという印象を受けますobjcopy
が、まだこれを機能させることができていません)。また、このアプローチの問題は、"--version" を指定してバイナリを呼び出すなど、情報を元に戻す良い方法がないことです。
私がやろうとしていることは不可能ですか?物事を明確に説明したことを願っています。
ありがとう。
#!/bin/bash
function PrintInformation()
{
echo "various bits of information"
}
if [[ $# -eq 1 && "$1" == "--version" ]]; then
PrintInformation
exit 0
else
uudecode $0
./originalBinary
exit 0
fi
begin 755 originalBinary
M?T5,1@(!`0````````````(`/@`!````X`9```````!``````````'`1````
M`````````$``.``)`$``'@`;``8````%````0`````````!``$```````$``
M0```````^`$```````#X`0````````@``````````P````0````X`@``````
M`#@"0```````.`)````````<`````````!P``````````0`````````!````
M!0````````````````!``````````$```````*0*````````I`H`````````
M`"````````$````&````\`T```````#P#6```````/`-8```````6`(`````
M``"8`P``````````(````````@````8````@#@```````"`.8```````(`Y@
M``````#``0```````,`!````````"``````````$````!````%0"````````
M5`)```````!4`D```````$0`````````1``````````$`````````%#E=&0$
M````L`D```````"P"4```````+`)0```````-``````````T``````````0`
M````````4>5T9`8`````````````````````````````````````````````
M````````````"`````````!2Y71D!````/`-````````\`U@``````#P#6``
...............// my uuencode'd binary here
end