C#の実行プログラムの難読化(Obfuscation)

シェアする

  • このエントリーをはてなブックマークに追加

難読化コード(Obfuscated code)とは、人間が理解しにくいソースコードやマシンコードを指す用語です。

ソースコードを理解しにくいものにするのは実用性はないため、実用的な用途としては、マシンコードを難読化してリバースエンジニアリングを阻止することです。

 

実はとある実験で、実行モジュールを逆アセンブルすることで、C#のソースは簡単に取得できることが分かりました。
詳細は以下をご覧ください。

実行モジュール(exe)からソースコードへのデコード(Decode)、逆コンパイル
今回、ここではVisual Studio 2012に付属の難読化ツールPreEmptive Dotfuscator and Analytics CEを使ってみました。

 

スポンサードリンク

PreEmptive Dotfuscator and Analytics CEとは

Dotfuscatorは、.NET Frameworkで作成されたアプリケーションの難読化ツールです。
DotfuscatorにはVisual Studioに付属する無償版と有償の製品版があります。
無償版は機能の多くが制限されていたり Visual Studio が起動されていることが前提でないと使用できませんが、Visual Studioさえインストールすればだれでも使用することができます。
有償版には無償版にはない強力な難読化機能が多く存在しますが、かなり高価です。

 

製品名 バージョン 税抜きメーカー希望小売価格(円)
商品コード 価格
Dotfuscator Professional Edition
Build Machine License 4 PED1-06-1-01 630,000
Named User License 4 PED1-06-1-07 160,000

(http://www.agtech.co.jp/products/preemptive/dotfuscator/price.html)

 

 

Dotfuscatorについては、http://www.agtech.co.jp/products/preemptive/dotfuscator/ に詳しく書かれています。

【スマートに難読化】

難読化とは逆コンパイルによって出力されたソースコードの解析を意図的に分かり難くする技術です。 Dotfuscator は、特許技術である識別名の変更を始め、制御フローの難読化、文字列の暗号化などを用いてリバースエンジニアリングを非常に難しいものにし、プログラムの知的財産権を保護します。
難読化はコンパイル後のアセンブリに対して施されるため、ソースコードには一切影響を与えません。 また、難読化の過程において識別子名の短縮、不要なメタデータやコードの削除が行われます。その結果、プログラムサイズは縮小され、プログラムのロード時間やパフォーマンスが最適化されます。

 

.NETのアプリ実行ファイルは、すべてMSIL(Microsoft Intermediate Language)と呼ばれる中間コードで構成されており、実行時にCLR(Common Language Runtime)のJITコンパイラによりネイティブ・コードに変換されます。

.NETのMSILはテキストエディタで開くと容易に、クラス名や変数を知ることができるために、MSILを入力として直接難読化できるDotfuscatorは便利なツールです。
ただ、実際のところ無料版で出来ることは限られています。

 

スポンサードリンク

PreEmptive Dotfuscator and Analytics CEのインストール方法

Visual Studio 2012を起動し「PreEmptive Dotfuscator and Analytics」を押して起動します。

image

 

初回起動時のみ、使用許諾に同意する必要があります。

WS000067

PreEmptive Dotfuscator and Analytics CEはVisual Studioに同梱されているために、同意するだけで使用することが可能です。

 

スポンサードリンク

PreEmptive Dotfuscator and Analytics CEの使い方

例えば、C#で以下のコードを書いてコンパイルしてDebug用の実行モジュールを作ったとします。

ビルド後に生成されたConsoleApplication1.exeをテキストエディターで開くと、AAAとかbbbとかが、見えてしまいます。

そこで、Visual Studio 2012からPreEmptive Dotfuscator and Analytics CEを起動します。

WS000072

入力ファイルとして、ビルドして生成された実行ファイルConsoleApplication1.exeを指定します。

このままデフォルトのままでDotfuscatorでビルドを実行すると、Dotfuscatedというフォルダに難読化されたConsoleApplication1.exeが作成されます。

Dotfuscated/ConsoleApplication1.exeをテキストエディターで開くと、AAAとかbbbがなくなっていることがわかります。

この点は、「結果」タブを見てもなんとなく分かります。

 

WS000073

ところが、無料版における最大の問題点がわかりました。

String password = "123456";

と書いた"123456"という文字列については、難読化した後でも容易に見つけることが出来ました。

文字列の暗号化は無料版では対応していないようです。

。。。結論、この無料版Dotfuscatorは、使えるようで使えないです。

 

まとめ

いかがでしたでしょうか。

商用のアプリケーションにおいては、難読化という作業はある程度想定しておくべきだと思います。

一方で、Dotfuscatorの有料版はちょっと高いので、ある程度、売れるソフトを想定しないと使うのは現実的ではないかもしれません。

難読化については以下の本に詳しいです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です