逆コンパイラと難読化ツール

コンパイラ

ここでは、 .NET 用と Java 用の逆コンパイラを紹介します。逆コンパイラは、ソースコードデバッグを行うときや、コンパイルされた後の構造を調べるときなどに役立つ場合があります。 *1

.NET (C#VB など) で記述されたプログラムを逆コンパイルする場合は、 Reflector for .NET が便利です。簡単な GUI の操作で逆コンパイル後のソースコードを調べることができます。

Java で記述されたプログラム (.class) を逆コンパイルする場合は、 Jad が有名です。コマンドライン用のツールですが、 Eclipse などを使うことで GUI から操作することができます。

上記の逆コンパイラを使うと、 .NETJava で記述されたプログラム (.exe や .class) からほぼオリジナルと同等のソースコードを復元することができます。

難読化

前述のように、 .NETJava のプログラムは、逆コンパイラによってソースコードを容易に取得することができます。何らかの理由でこの動作を回避したい場合、難読化と呼ばれる手法によって逆コンパイラの動作を制限することができます。 *2

.NET で難読化を行う場合、 Visual Studio に付属している Dotfuscator Community Edition が有名です。また、 NanDoKu という無料で高機能なツールもあります。これらのツールを使う場合、リフレクション機能などが悪影響を受けないように注意する必要があります。

難読化を抑制したい部分 (アセンブリ単位、クラス単位、メソッド単位) がある場合、 .NET では難読化のヒントを与える属性が用意されています。 ObfuscateAssemblyAttribute クラスObfuscationAttribute クラスを難読化したくないアセンブリやクラス、メソッドに属性として指定することで、部分的に難読化を抑制することができます。

ここでは .NET 用のツールを紹介しました。そのほかの言語用難読化ツールは、「成分解析」研究室や Goolge などで調べてみてください。

*1:コンパイラの利用は、リバースエンジニアリング禁止条項などに抵触するおそれがあります。利用の際には、各ソフトウェアの利用規約などをよくお読みください。

*2:ただし、完全に防ぐことはできません。少なくともアセンブリや IL レベルのコードまでは復元されます。