巷にあふれるWindows用のフリーウェアやシェアウェアで、これ何で作ったんだろう?と思うことがありますが、何で作成されたか(DelphiとかVC++とか)を判定する方法はありませんか?EXEファイルを解析するとか・・・

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/05/28 13:25:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:hirotow No.1

回答回数131ベストアンサー獲得回数10

ポイント20pt

特定のライブラリに依存するもの(MFC/CLRなど)は、参照しているDLLを解析することで判別できます。

Dependency Walkerでこういった情報は見れるので、それを参考にできます。

http://www.altech-ads.com/product/10000783.htm

さらに.NETやVBはランタイムが必要なのでそこで判別できます。


他のアプローチとしては、

・ボタンにチェックマークなどのアイコンがあるものはDelphiである可能性が高い。

・メニューバーとツールバーがOffice2000風、2003風のものはそれぞれ.NET1.1、2.0である可能性が高い。

・高機能エディタはほとんどがDelphi(TEditorのシェアが非常に高いため)

・ボタンの大きさやコントロールの間隔が不自然なのはVBである可能性が高い。

・コントロールの癖からライブラリ⇒開発環境を推定する。


長々と書きましたが、結局のところ慣れというか各開発環境の知識が必要になります。

id:cg_121

ありがとうございます。試してみました。結局DDLがどの開発環境のものかの知識が必要ということですね。参考になります。

2008/05/22 09:14:55
id:ken33jp No.2

回答回数928ベストアンサー獲得回数13

ポイント20pt

EXEファイルに含まれてる文字列で予想する。

id:cg_121

下のfoobar_777 さんのstrings.exeで試してみます。

2008/05/22 09:16:13
id:foobar_777 No.3

回答回数78ベストアンサー獲得回数18

ポイント20pt

昔からある方法だとstringsというコマンドを使ってexeファイル中の文字列を探すという方法が知られています。

stringsは大昔からあるコマンドで、Win32にもいくつか移植されています。

たとえば、以下の物が有ります。

http://www.microsoft.com/technet/sysinternals/Miscellaneous/Stri...


コマンドプロンプトを開いて以下のように打ち込むと使用したライブラリ等がわかることが有ります。

(strings.exeをc:\toolsにおいた場合です。 適当にstrings.exeにパスを通してください。)

C:\>c:\tools\strings.exe 調べたい実行ファイル.exe | more



いくつかのプログラムを調べてみたら以下のような文字列が見あたりました。

SOFTWARE\Borland\Delphi\RTL

This application cannot run using the active version of the Microsoft .NET Runtime

Microsoft Visual C++ Runtime Library

id:cg_121

へぇ~これすごいですね!おもしろいのでいくつかやってみました。BitTorrent.exeはPythonできてるのか。

2008/05/21 23:18:30
id:EUKRANTE No.4

回答回数1ベストアンサー獲得回数0

ポイント30pt

PEiDというソフトを使えばアプリケーションが何で作られたのか簡単に知ることができます。

使い方はダウンロードしたファイルを解凍してPEiD.exeを実行し、Fileの横の...をクリックし、解析したいアプリケーションを読み込めば下の空欄に作成に使われたソフトが表示されるので(Microsoft Visual C++など)何で作られたのか知ることができます。

PEiDダウンロードURL http://www.peid.info/files/PEiD-0.94-20060510.zip

id:cg_121

これはすごい!ついにキターーって感じです。こんなのがあるんですね!

なるほどstrings.exeで調べた結果と大体おなじでした。

あと、解析結果で調べてASPackとかEXEを保護するソフトの存在を知りました。

EXEを解析できないようにするってのもあるのか・・・そりゃそうですよね。勉強になります。

2008/05/26 00:01:43
  • id:cx20
    VC++ の場合ですが、
    Dependency Walker の表示結果で「Linker Ver」のところを見るとコンパイラのバージョンが推測できます。
    6.0 … VC++6.0(Visual Studio 6.0)
    7.0 … VC++7.0(Visual Studio .NET 2002)
    7.1 … VC++7.1(Visual Studio .NET 2003)
    8.0 … VC++8.0(Visual Studio 2005)
  • id:cg_121
    PEiDが楽に判定できますがEXEがプロテクトされているせいかわからないものもありますね。そういう場合はstringsを併用するといけそうです。
    hirotowさんの回答のようなGUIの特徴などでもいいですが他にないでしょうか?

この質問への反応(ブックマークコメント)

トラックバック

  • VBScript から EXE/OCX/DLL 作成時のコンパイラのバージョンが取得できないか?と思い、 PE ヘッダの読み込み方法について調査してみました。 ADO Stream にてファイル読み込み IMAGE_DOS_HEADER の e_lfa
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません