.NETアプリのコードは簡単に解析されてしまう?
近年、アプリケーションの難読化(コードをわかりにくく変換すること)の必要性は徐々に認知されてきています。しかし実行可能ファイル(exe)から元のソースコードが簡単に逆コンパイルできてしまう事実を、まだ多くの開発者が認識していません1。
とくに.NETアプリの場合、コンパイル後のプログラムにはMSIL(中間言語)が含まれており、このMSILにはクラス名やメソッド名など豊富なメタデータ(付加情報)が保持されています。そのため、フリーの解析ツールを使えば、誰でも容易に実行ファイルからソースコードを再現できてしまうのです。
dnSpyを使った逆コンパイルのデモ
実際に、フリーの逆コンパイルツール「dnSpy」を用いて.NETアプリを解析してみましょう。.NET向けのサンプルアプリケーションをビルドし、dnSpyでexeファイルをドラッグ&ドロップすると、プログラム内部のクラスやメソッドがツリー状に表示され、コードを閲覧できてしまいます。
以下の図は、サンプルアプリ内のHelloWorldForm
クラスを展開し、メソッドのコードを表示させたものです。
(図1:dnSpyで.NETアプリを逆コンパイルし、コードを表示した例)
図中では、Converse
メソッドやConverseButton_Click
イベントハンドラが確認できます。コメントや余分な空行こそ削除されていますが、変数名やメソッド名、文字列リテラルはオリジナルのソースコードと同じまま再現されています。そのため、仮に解析対象アプリの開発者でなくとも、復元されたソースコードから多くの手がかりを得ることができ、プログラムの動作を容易に推測・解析できてしまいます。
逆コンパイル対策は必須
以上のように、.NETアプリの実行ファイルはそのままでは丸裸同然です。無料で入手可能なツールを使えば、誰でも手元のexeからソースコードを複製して中身を調べたり改変したりできてしまいます。
逆コンパイルによる知的財産の流出や脆弱性の露見を防ぐためには、アプリ側で適切な対策を施す必要があります。特に、難読化ツールの導入は.NETアプリ開発者にとって必須の防御策と言えるでしょう。1