バイナリのみの製品でソースコードを検索する[終了]
-
19-08-2019 - |
質問
GPLの下でリリースしたプロジェクトがあり、誰でも利用できるソースがあるとします。後で私は非常に似た製品を見つけましたが、クローズドソースとして、他の誰かによってバイナリのみが配布されました。
彼らが彼らの製品で私のソースコードを使用していることを知る良い方法はありますか?
ソリューションが何らかの方法でバイナリをリバースエンジニアリングすることである場合、何らかの方法でそれを自動化することは可能ですか?
編集:明確化。バグハントは1つのオプションですが、決定的なものではありません。特にプロジェクトがライブラリであり、バイナリが独自のGUIを追加した場合などは特にそうです。私が興味を持っている状況は、コードが持ち上げられていることを露骨に明らかにしていないときです。
解決
ソフトウェアのあざを探してください。このメソッドは、バイナリコードまたは動的な動作に基づいてソフトウェア間のリンクを確立しようとします。 Christian Collbergは、あざの元となったソフトウェア透かしの専門家です。これはすべて研究用地に残っています。
他のヒント
バグ。
クローズドソースリリースがそのバグのほとんどをプロジェクトと共有している場合、おそらく「解除」されています。
クローズドソースバイナリの逆コンパイルバージョンを使用して独自のバイナリを逆コンパイルすることもできますが、これはおそらく信頼性が低いでしょう。
明らかに、疑わしいバイナリがstripped
でない場合は、コードの名前と同じ名前を共有するシンボルを探すことができます。
バイナリコードの逆コンパイルとリバースエンジニアリングには多くの作業があります。世界の専門家はおそらく Cristina Cifuentes です。彼女は逆コンパイルで多くのことをしました。 Alex Aiken に書き込み、ソフトウェアの類似性の測定は、バイナリコードに適合させることができます。
明白な方法は、文字列を検索することです。 UNIX文字列ツールを実行し、バイナリにコードのリテラル文字列が含まれているかどうかを確認します。主にエラーメッセージやメッセージボックス内のテキストなどです。
両方のプログラムを逆アセンブルしてアセンブリを比較することもできますが、異なるコンパイラを使用している場合、プログラムによってわずかな違いが生じる可能性があります。いくつかの無料の逆アセンブラーがあるか、デバッガーがアセンブリをステップスルーすることもできます。
それ以外には、そのようなことを見つける簡単な方法はありません。
私が考える最も確実な方法は、 'Esquivalience' オックスフォード辞書。
コードのどこかに一意のコンテンツを含むバイナリ配列を追加するだけで、リンカが最適化しないように単純に使用することを忘れないでください。それが冗長であることをカジュアルな読者に明らかにしないように、おそらくそれをいくらか難読化する必要があります。
次に、コンパイル済みのバイナリを16進エディタで開き、探します。
nmを使用してシンボルテーブルを見てみませんか?
$ nm a.out
...