3

特定の Windows 実行可能ファイルをコンパイルおよびビルドするために使用されたコンパイラを検出する信頼できる方法はありますか?

これだけではトピックが広すぎるので、次のように絞り込みます。

  • C ファミリーの言語 (C、C++、C#) にしか興味がない
  • この情報を隠す目的で実行可能ファイルが改ざんされていないと仮定しましょう。
  • Visual Studio と最も有名な gnu コンパイラで十分なので、非常に古い、または広く使用されていないコンパイラを処理する必要はありません。

C# の場合、Visual Studio に同梱されているコンパイラが使用されていることは明らかですが、この場合、Studio のバージョン (年) と型 (express など) を取得できますか?

編集:

ヒューリスティックを使用する必要があるため、答えから判断するのは難しく、常に信頼できるとは限りません。では、実行可能ファイルにある種の「透かし」を意図的に挿入するコンパイラはありますか? もしあれば、Visual Studioはそのようなコンパイラである可能性があると推測していました(他に何もなければ、誰かが無料の高速版を使用したのか、それとも公式に購入したものとは別のバージョンを使用したのかを知るためだけにそれを行っていると想像できます)。しかし、Googleで決定的な答えを見つけることができませんでした。

4

5 に答える 5

1

ネイティブ コードの場合は、「ライブラリ フィンガープリンティング」を使用します。ftp://ftp.cs.wisc.edu/paradyn/papers/Jacobson11Unstrip.pdfを参照してください。

ここで利用可能な多くの署名: http://code.google.com/p/flairdatabase/

http://www.hex-rays.com/products/ida/tech/flirt/in_depth.shtmlを参照してください。

于 2012-06-27T19:17:14.733 に答える
1

C/C++ と C# はまったく異なるため、これは実際には 2 つの質問です。C# の質問に答えようとします。

AC# アセンブリは、常に特定の .NET Framework バージョン用にビルドされます。アセンブリのバージョンを調べることで、使用されたコンパイラのバージョンを特定できます。フレームワークの各バージョンには、独自のコンパイラがあります。

コンパイラは VS の一部ではないため、コンパイルされたアセンブリから Visual Studio に関する詳細を調べる方法はありません。.NET 4 アセンブリが VS 2010 でビルドされたと想定できますが、それだけです。私たちが知っている限り、それはメモ帳で書かれた可能性があります。

csc以外のコンパイラが使われている可能性もありますが、Mono以外では滅多にないので無視します。

母国語に関しては:

どのコンパイラが使用されたかを確実に知る方法はありません。どの言語が使用されたかを判断する方法さえありません。操作する必要があるのはマシン コードとバイナリ データだけなので、コンパイラの既知のパターンに基づいて知識に基づいた推測を行う必要があります。

于 2012-06-27T19:25:31.050 に答える
1

静的にコンパイルされたコンパイラの標準ライブラリを識別できる IDA 逆アセンブラ:

http://www.hex-rays.com/products/ida/index.shtml

http://www.hex-rays.com/products/ida/tech/flirt/in_depth.shtml

MSVC についてだけ話すと、このポインターが ECX レジスターに渡されるため、これが表示される場合、コードはおそらく C++ (C ではない) であり、オブジェクトを使用しています。詳細はこちら: http://en.wikipedia.org/wiki/X86_calling_conventions

C# のコードは非常に異なっているため、逆アセンブラーで識別する必要さえありません。

于 2012-06-27T20:30:54.000 に答える
0

dumpbin ツールを試すことができます (これを dumpbin /HEADERS と呼びます)。OPTIONAL HEADERS にリンカーのバージョンがリストされ、そこから、使用された可能性が高いコンパイラのバージョンを確認できます。ダンプビンのヘルプページを見る

于 2012-06-27T20:22:05.970 に答える
0

バイナリまたは実行可能オブジェクトを作成するために使用されるツールを特定する公式または標準的な方法はありません。Windows 実行可能形式では、ツールに関する情報は必要ありません。使用する言語でもありません。

コードパターンを識別することでツールを区別できるかもしれませんが、これは非常に困難です。人々がさまざまなツールを使用してソフトウェアを書き直すことは、非常に困難で時間がかかります。

ところで、Visual Studio と GNU 以外にもツールがあります。

于 2012-06-27T19:18:16.573 に答える