C#の実行プログラムの難読化(Obfuscation) PreEmptive Dotfuscator and Analytics CE

プログラミング
スポンサーリンク

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

 

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

 

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

 

詳細は以下をご覧ください。

exe からソースコードへ逆コンパイル (デコンパイル) 、解析、デコード(Decode) リバースエンジニアリングのやり方
このたび、訳があってある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については、

.NET用の難読化ツール | Microsoft Visual Studioに無料版がバンドル!
.NETやMAUI(Xamarin)といったプラットフォーム向けのアセンブリに対して難読化を実行できるのが、難読化ツールのパッケージ製品「PreEmptive Protection」のひとつである「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の有料版はちょっと高いので、ある程度、売れるソフトを想定しないと使うのは現実的ではないかもしれません。

 

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

 

 

プログラミングの無料レッスン体験

 

約8,000名の受講生と80社以上の導入実績のあるプログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp

<Codecampの特徴>

1 現役エンジニアによる指導

2オンラインでのマンツーマン形式の講義

3大手企業にも導入されている実践的なカリキュラム

↓無料体験レッスン実施中です。

プログラミングのオンラインスクールCodeCamp

 

 

 

コメント

  1. […] […]

タイトルとURLをコピーしました