0

私がGPLの下でリリースしたプロジェクトがあり、ソースは誰でも利用できるとしましょう。後で私は非常によく似た製品を見つけましたが、クローズドソースとして、他の誰かによってのみバイナリで配布されました。

彼らが彼らの製品で私のソースコードを使用していることを知る良い方法はありますか?

解決策がバイナリを何らかの方法でリバースエンジニアリングすることである場合、それを何らかの方法で自動化することは可能ですか?

編集:明確化。バグハントは1つのオプションですが、特にプロジェクトがライブラリであり、バイナリが独自のGUIを追加している場合は特に、決定的なものではありません。私が興味を持っている状況は、コードが解除されたことを露骨に明らかにしていないときです。

4

8 に答える 8

5

バグ。

クローズドソースリリースがそのバグのほとんどをプロジェクトと共有している場合、それはおそらく「解除」されています。

クローズドソースバイナリの逆コンパイルバージョンを使用して、独自のバイナリを逆コンパイルしてみることもできます...これはおそらく信頼できないでしょう。

于 2008-12-04T08:05:30.353 に答える
3

明らかに、疑わしいバイナリがではない場合はstripped、コードと同じ名前を共有するシンボルを探すことができます。

于 2008-12-04T08:11:07.283 に答える
2

明らかな方法は、文字列を検索することです。UNIX文字列ツールを実行し、バイナリにコードのリテラル文字列が含まれているかどうかを確認します。主にエラーメッセージやメッセージボックス内のテキストなどです。

于 2008-12-04T09:17:39.503 に答える
2

バイナリコードの逆コンパイルとリバースエンジニアリングには多くの作業があります。世界の専門家はおそらくクリスティーナシフエンテスです。彼女は逆コンパイルで多くのことをしました。Alex Aikenに手紙を書いて、ソフトウェアの類似性を測定するための彼のツールをバイナリコードに適合させることができるかどうかを尋ねることも興味深いでしょう。

于 2008-12-04T08:11:30.123 に答える
2

ソフトウェアのあざを探します。この方法では、バイナリ コードまたは動的動作に基づいてソフトウェア間のリンクを確立しようとします。Christian Collberg はソフトウェア ウォーターマークの専門家であり、そこからバースマークが派生しました。これはすべてまだ研究地にあります。

于 2008-12-07T10:59:13.040 に答える
1

両方のプログラムを逆アセンブルしてアセンブリを比較することもできますが、それらが異なるコンパイラを使用している場合、それらのプログラムにはわずかな違いがある可能性があります。無料の逆アセンブラがいくつかあるか、デバッガがアセンブリをステップスルーすることもできます。

それ以外に、そのようなことを見つける簡単な方法は本当にありません。

于 2008-12-04T08:05:46.950 に答える
0

私が考えることができる最も確実な方法は、オックスフォード辞書の「Esquivalience」という言葉に似ています.
コードのどこかに一意のコンテンツを含むバイナリ配列を追加するだけで、リンカーが最適化して削除しないように、それを簡単に使用することを忘れないでください。ふだんの読者に冗長であることが明らかにならないように、多少難読化する必要があります。
次に、コンパイルされたバイナリを 16 進エディタで開き、探します。

于 2008-12-05T00:23:00.317 に答える
0

nmを使って記号表を見てみませんか?

$ nm a.out
...
于 2008-12-05T00:36:42.800 に答える