web-dev-qa-db-ja.com

使用するプログラミング言語を見つける

アプリケーションがどのプログラミング言語で記述されているかを知る最も簡単な方法は何ですか?プログラムのexeファイルから、そのvbまたはc ++またはdelphiまたは.netなどを知りたいのですが。

34
veagles

試す PEiD

もちろん、パッカーを使用した場合は、最初にいくつかの解凍を行う必要があります:)

27
John T

それを起動し、Process Explorerで使用するランタイムDLLを確認します。

それでもすぐに明らかにならない場合は、WebでこれらのDLLへの参照を検索してください。

ほとんどの逆アセンブラー(私が思うOllyを含む)は、EXEまたはDLLに含まれるテキストを簡単に表示できます。 Delphi型には、TMyClassの場合のように、多くの場合Tが先頭に付きます。

それがDLL参照なしでテキストなしの小さな実行可能ファイルである場合、SOLである可能性があります。その時点で、特定のコンパイラのイディオムを探す必要があります。

11
Ed Guiness

プログラムがどの言語で書かれているかを検出する技術があります。それは可能ですが、厳格なルールはありません。それには多くの経験が必要です(そして、「どうして...」という質問につながりますが、ここでいくつかのアイデアを紹介します。

探しているのは「署名」です。署名は、コンパイラーに含まれる特定の文字列、使用されているプログラミングツールで非常に一般的なAPIへの参照、または使用されているツールに共通のプログラミングスタイルであり、含まれる文字列に表示されます。アプリケーションで。

さらに、アプリケーションのデプロイ方法にはスタイルがあります。デプロイメントディレクトリ、dll、アセンブリ、およびイメージ、ディレクトリ、アイコンにあるさまざまな構成ファイルです。

自己起動実行可能ファイルにラップされたJavaアプリケーションには、Java libsへの参照が含まれます。また、Javaであることを示す特定のライブラリまたはファイルが同じディレクトリに含まれている可能性があります。

他の回答に示されているように、管理アセンブリには特定の兆候も表示されます。Reflectorなどで開くことができます。c#とVBはコンパイル後に「交換可能」であることは正しいですが、 Reflector を使用してVBコードを逆アセンブルすると、アセンブリがMicrosoft.VisualBasic.dllアセンブリを参照していることがよくわかります。 Mono アプリケーションの違いを伝えることができます。これは、おそらくモノアセンブリへの参照が含まれているためです。

多くのコンパイラは、特定の方法でコードをアセンブルおよびリンクし、フットプリントを残します。たとえば、「strings:tab in Process Explorer 」を使用してウィンドウ実行可能ファイルを調べると、多くの文字列が表示されます。これらを使用して、プログラミングスタイル、呼び出されるメソッド、エラーまたはトレースメソッドを決定できる場合がありますexe内。

たとえば、コンパイラはローカライズにさまざまなメカニズムを使用します。Microsoftはローカライズされた文字列をXMLファイルまたはリソースファイルに保存します。他のコンパイラは異なる戦術を使用します。

別の例は、c ++ name mangling です。 CodeWarrior コンパイラは、異なるアルゴリズムを使用して、Visual Studioとは異なる呼び出しのメンバー変数と関数の名前をマングルします。

実行可能ファイルの系統を正確に判断することをテーマにした本を書くことができると思います。この主題はおそらく「プログラミング考古学」と呼ばれるでしょう。

8
Blue Toque

Depends を使用して、実行時の依存関係を確認してみてください。

3
Paul Dixon

最も簡単な方法は、プログラムの開発者に尋ねることです。知識やユーティリティプログラムは必要ありません。

2
HS.

コンパイルされた言語(これにより、スクリプト言語やJava、.NETなどは意味されません)はCPUアセンブリ命令にコンパイルされます。これは基本的に一方向の変換です。通常、プログラムが記述された言語を判別することはできません。ただし、依存関係ウォーカーを使用すると、プログラムがロードしているランタイムライブラリ(存在する場合)を判別できるため、使用する言語(MS Visual C++ 9など)を判別できますmsvcr90.dllを使用します)。

1
jgottula

ildasm.exeツールで開くことで、.netアセンブリかどうかを確認できます

1
Arsen Mkrtchyan
  • Delphiアプリケーションの決定
  • Eda_preview270.exe( here から)または他のスパイツールを使用して、ウィンドウクラス名を確認します。 TButtonやTfrmBlubbのように読めば、それはVCLアプリです。それらに「Afx」がある場合は、おそらくMFCです。
1
Uli Gerhardt

私が見つけた最も簡単な方法は(少なくともコンピューターゲームで)、ゲームのメインフォルダー内にネストされた「redist」フォルダーを調べることでした。プログラミングの経験が豊富な方にとっては明らかかもしれませんが、このフォルダー内のMSIの特定の目的は、setup.exeファイルがゲーム自体の前提条件を自動的にインストールできるようにすることです。例:Empire Total Warには、「vcredist_x86-sp1.exe」というMSIがあります。これは、ゲーム/プログラムが(通常).NET FrameworkのMicrosoftの「Visual C 2005」で作成されたことを示します。実際、MSI/EXEを開くと、インストーラーは、作成された言語とバージョンをすぐに示す必要があります。私がよく知っている理由は、.NET FrameworkでC#とVBでコーディングし、ビジネスアプリの前提条件を自動インストールするからです。これが役立つことを願っています!

0
ITGuyOU

一般的にはできません。

Reflector にロードできる場合、それは管理アセンブリです。

0
i_am_jorf

それは良い質問です。伝える一般的な方法はありませんが、ほとんどのコンパイラとライブラリは、結果のEXEファイルにマークを残すに違いありません。多くの時間を費やしたい場合は、既知の言語で書かれた多数のEXEを収集し、一般的な文字列をスキャンできます。きっと見つかると思います。

Dependancy Walker 、MSVCRTのバージョンなど、他の誰かが言及した依存関係を探すのに適した方法です

0
Chad Okere

正しく覚えている場合 PE Explorer Disassembler は、.netおよびJavaバイナリ、.Net使用の場合) Reflector または ILDAsm ツール

0
Arsen Mkrtchyan

ここに素晴らしい video があります。UPXでパックされている場合、.exeファイルをアンパックする方法を説明しています。これに必要なソフトウェア: PEiDOllyDbgImpREC

バイナリファイルを解凍した後、PEiDを使用して、バイナリに含まれるプログラミング言語を確認できます。

0
John Smith

さまざまなヒントを取得するために、「文字列」プログラムで.exeを実行してみます。

0
Scott Evernden