.NETアプリケーションは.NET ReflectorやILSpyのような逆コンパイラを
使用すると、簡単にソースコードを見ることができてしまいます。
リバースエンジニアリングを防ぐためにソースコードを読みにくくすることを
難読化と言い、.NETの開発元のMicrosoftもここやここで
難読化が必要であると言っています。
しかし、Visual Studioに付属の難読化ツール
Dotfuscator Community Edition (CE)は無料で使えるものの
文字列の暗号化や制御フローの難読化に対応しておらず
機能的に十分とは言えません。
詳細はDotfuscatorのエディション比較ページへ。
そこでこの記事では、フリーでオープンソースの難読化ツール
ConfuserExを使ってプログラムを難読化する手順を紹介します。
テストプログラム
難読化テスト用に簡単なプログラムを作ってみました。
入力した10進数をインクリメントしながら16進数に変換するプログラムです。
逆コンパイルしてみる
テストプログラムをILSpyで逆コンパイルしてみます。
関数名から変数名、日本語の文字列までしっかり見えていることが分かります。
丸見えどころか、冗長なコードが整理されて見やすくなってすらいます。
ConfuserExで難読化する
ダウンロード
ConfuserExのバイナリをGitHubからダウンロードします。
難読化する
ダウンロードしたファイルを解凍してConfuserExを起動します。
難読化するプログラムを設定します。
Drag input modules hereの部分にプログラムをドラッグ&ドロップします。
難読化の設定をします。
Settingsタブを開き、<Global settings>を選択して+ボタンを押します。
右側のペンのボタンを押すと
難読化ルールの編集画面が開きます。
PresetをNormalに設定し、Doneボタンを押します。
これで難読化の設定が完了しました。
難読化を実行します。
Protect!タブを開き、Protect!ボタンを押します。
Finishedが表示されたら難読化は完了です。
プログラムのあるフォルダにConfusedフォルダが作成され
難読化されたプログラムが出力されています。
難読化できているか確認する
難読化したプログラムをILSpyで逆コンパイルしてみます。
しっかり難読化されていることが分かります。
クラス名、関数名、変数名は跡形もなく、文字列も暗号化されています。
for文もどこかへ消し飛んでしまいました。
以上、ConfuserExで.NETアプリケーションを難読化する方法を紹介しました。