コンパイル済みの実行ファイルから、アセンブリコードやソースコードを生成するツールを一般に、リバース・エンジニアリング・ツールと呼びます。
リバース・エンジニアリング・ツールの利用価値
アプリケーションやクラス・ライブラリには、詳しい説明文書が存在することは、まれです。オープンソースプジェクトでは、ソースコードを読み、どのように利用するか理解する必要がある場合があります。
リバース・エンジニアリング・ツールは、ソースコードが公開されていない、あるいは、ソースコードが見つからない、あるいは、残っていない既存のアプリケーションの修正や機能追加するために使用されます。使用しているサードパーティ・ライブラリの自分が使っている部分にバグがありそうなのだが、ライブラリの提供元が、ソースコードも提示してくれないし、修正も行ってくれないというときにも使えるかもしれません。他の人が作成したプログラムの中身を理解し、考え、自分のプログラミングスキルを向上させるためにも使用されるようです。
また、他の誰かが作成した電卓アプリケーションなど、アプリケーション内の結果を取得し、自分で開発したアプリケーションで利用する方法で活用することができます。
各種リバース・エンジニアリング・ツール
リバースエンジニアリングツールでは、有料で販売されている製品の他に、無料で利用できるツールが存在します。一般に、ツールを持っているだけでは、何もできず、それを利用する方法を学ぶ必要があります。そして、利用する方法を学ぶために、多くの時間が必要です。
有料ツールに対しての考え
ツールの継続的な開発のために専属の人員で作業を継続するためには、有料化は不可欠です。そして、仕事でツールを使用する場合、無料のツールの使い方を試行錯誤するより、サポートが手厚い、あるは、豊富な学習資料が用意されている有料ツールが存在すれば、そのツールを使用するために必要な調査と試行錯誤の手間を大きく軽減することができます。
全く使い方がわからない状態から、問い合わせた内容で使用するための方法を提供してもらえるのであれば、あなたの知識や技能により異なるとはいえ、無料ツールを使って自分で試行錯誤するより、有料ツールを使用したほうが、総合的なコストは安くなり、結果を得るために必要な時間が少なくなることが期待できます。
ただ、それが可能であっても、次の問題は、言語の壁になります。直面した問題をどれだけ適切に伝えることができるか、サポートをどうやってうまく使うかという問題が立ちふさがることは、理解しておく必要はあります。
このような考えから、個人が趣味や学習のために使用する場合、有料ツールは、選択肢から外したほうがよいと言うのが個人的な考えです。有料ツールは、お金で、学習時間や作業時間を買えることができる点に価値の本質が存在します。個人が趣味や学習のために使用する場合、短期集中して、時間を投下しません。お金をは払っただけで使わない可能性が高くなります。もちろん、豊富な学習資料が用意されている場合や、そのツールが仕事自体が自分の価値を上げる場合は、検討の対象にしたほうがよいと思います。
デバッガ
Microsoftが無料で提供しているディバッガ。ことツールとは別に、Visual Studioにもディバッガは内蔵されています。
逆アセンブラ
逆コンパイラ
.NETアプリケーションを対象とした逆コンパイラは多くのものが存在します。自分の目的に適したもの、利用できるものを探すことが大切です。
dotPeek
JetBrains社が提供する無料で使える.Net言語デコンパイルツール。同社が提供する有料のVisual Studio拡張機能「JetBrains ReSharper」の一部の機能が提供されています。
また、日本語のヘルプ「dotPeek:オンラインドキュメント(日本語)」が用意されています。
JustDecompile
無料ツールです。 「.NET Reflector」が、有料になったことから、無料で利用できる選択肢として、「dotPeek」とともに、選択されるようになったツールです。
.NET Reflector
「.NET Reflector」は、.NETアプリケーションのリバースエンジニアリングツールとして、最も認知されているツールです。Reflector 7 以降は、有料ツールになりました。
ILSpyとdnSpy
ILSpyとdnSpyは、オープンソースの.NETアセンブリブラウザおよび逆コンパイラです。 自分で機能を拡張し、作り込みたい場合は、これらのプロジェクトを活用すると良いかもしれません。
ILSpy
オープンソースの.NETアセンブリブラウザおよび逆コンパイラです。 MIT ライセンスのツールです。無料で使えます。
dnSpy
デバッガーおよび.NETアセンブリエディターです。 逆コンパイルには、内部で、ILSpyエンジンを使用しています。GPLv3 ライセンスのツールです。
Spy++
Spy++は、Microsoftが提供するツールであり、Windowsアプリケーションが、Windows OSが提供するウインドウハンドル(HWND)を調べるために利用されます。
ウインドウハンドル(HWND)を使用することで、既存アプリケーションを変更することなく、アプリケーション上のフォームに表示されるデータを取り込んだり、書き込んだりすることができます。
Ghidra(ギドラ)
米国家安全保障局(NSA)が無償で公開した、組織内で10年以上使用してきたソフトウェアリバースエンジニアリングツール「Ghidra」