難読化コード(Obfuscated code)とは、人間が理解しにくいソースコードやマシンコードを指す用語です。
ソースコードを理解しにくいものにするのは実用性はないため、実用的な用途としては、マシンコードを難読化してリバースエンジニアリングを阻止することです。
実はとある実験で、実行モジュールを逆アセンブルすることで、C#のソースは簡単に取得できることが分かりました。
詳細は以下をご覧ください。
今回、ここでは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については、
に詳しく書かれています。
【スマートに難読化】
難読化とは逆コンパイルによって出力されたソースコードの解析を意図的に分かり難くする技術です。 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」
を押して起動します。
初回起動時のみ、使用許諾に同意する必要があります。
PreEmptive Dotfuscator and Analytics CE
はVisual Studioに同梱されているために、同意するだけで使用することが可能です。
PreEmptive Dotfuscator and Analytics CEの使い方
例えば、C#で以下のコードを書いてコンパイルしてDebug用の実行モジュールを作ったとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { String password = "123456"; AAA aaa = new AAA(); aaa.bbb(password); } class AAA { internal void bbb(string password) { System.Console.WriteLine(password); } } } } |
ビルド後に生成されたConsoleApplication1.exeをテキストエディターで開くと、AAAとかbbbとかが、見えてしまいます。
そこで、Visual Studio 2012からPreEmptive Dotfuscator and Analytics CEを起動します。
入力ファイルとして、ビルドして生成された実行ファイルConsoleApplication1.exeを指定します。
このままデフォルトのままでDotfuscatorでビルドを実行すると、Dotfuscatedというフォルダに難読化されたConsoleApplication1.exeが作成されます。
Dotfuscated/ConsoleApplication1.exeをテキストエディターで開くと、AAAとかbbbがなくなっていることがわかります。
この点は、「結果」タブを見てもなんとなく分かります。
ところが、無料版における最大の問題点がわかりました。
String password = "123456";
と書いた"123456"という文字列については、難読化した後でも容易に見つけることが出来ました。
文字列の暗号化は無料版では対応していないようです。
。。。結論、この無料版Dotfuscatorは、使えるようで使えないです。
まとめ
いかがでしたでしょうか。
商用のアプリケーションにおいては、難読化という作業はある程度想定しておくべきだと思います。
一方で、Dotfuscatorの有料版はちょっと高いので、ある程度、売れるソフトを想定しないと使うのは現実的ではないかもしれません。
難読化については以下の本に詳しいです。
プログラミングの無料レッスン体験
約8,000名の受講生と80社以上の導入実績のあるプログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp
<Codecampの特徴>
1 現役エンジニアによる指導
2オンラインでのマンツーマン形式の講義
3大手企業にも導入されている実践的なカリキュラム
↓無料体験レッスン実施中です。
コメント
[…] […]