SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

不正な解析から知的財産を守る
.NETアプリ「難読化」再入門

.NETアプリケーション難読化ツール「Dotfuscator」

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

難読化による防御

 .NET Frameworkが利便性のために実装している仕組みによって、逆コンパイルされやすくなること、そのことが知的財産やセキュリティ上の問題になることは当初から認識されていました。このため、.NET Frameworkが初めてリリースされた2002年の翌年から、Visual Studioのすべての製品版にはDotfuscatorという難読化ツールが提供されてきたのです (注2)。

 聞き慣れないかもしれませんが、「難読化」は英語ではobfuscateと言い、「意図的に分かりにくくする」という意味を持つ古くからある言葉です。

注2

 Visual Studio .NET 2003以降。無償版など、一部のエディションを除きます。

 解析の手掛かりになるのは、まずシンボル名です。図1では、ScoreRankという名前空間やProgramというクラス名、CalcRankという関数名がそのまま表示されています。クラスやメソッドに意味のある名前を付けてプログラミングしている限り、それらがプログラムを理解する大きな手掛かりとなります。Visual Studioに付属のDotfuscatorはこうしたシンボルを意味のない短い名前に置き換えます。

 しかし、逆コンパイルでソースコードが得られれば、そこで.NET Frameworkの機能が呼び出されたり、「Login」や「パスワード」といった重要な文字列が見つかることで、センシティブな情報を扱う部分であることが突き止められてしまう恐れがあります。

 製品版のDotfuscatorは、より実用的な難読化処理を施します。まず、生成された実行コードを論理的に同等な異なる制御フローに置き換えます。通常、コンパイラが生成しないコードになるため、逆コンパイルができなくなるか、できたとしても元の制御フローよりもわかりにくいものになります。上記のサンプルを製品版Dotfuscatorで難読化して、.NET Reflectorで逆コンパイルしたのが図2です。

図2 難読化後の逆コンパイル
図2 難読化後の逆コンパイル

 ここでは、関数内部が逆コンパイルできず、「難読化されたため変換できない」という意味のコメントだけが表示されています。これにより、ソースコードレベルでの理解は難しくなります。

 一方、このような難読化を施しても、IL(中間言語)への逆アセンブルを抑止することはできません。前述のような重要な文字列が使われている場所を見つけられてしまうかもしれません。そこで、製品版Dotfuscatorには、文字列の暗号化という機能があります。文字列を暗号化すれば、実行ファイルから元の文字列を検索して見つけだすことはできなくなります(注3)。

注3

 文字列が暗号化されたアセンブリは、実行時に文字列復号のためのオーバーヘッドが発生します。そのため、この機能はデフォルトでオフになっています。暗号化が必要なモジュールだけを選択して暗号化してください。

SilverlightやClickOnceへの対応

 Dotfuscator製品版では、Silverlightアプリケーションも難読化できます。Silverlightアプリケーション(.xap)の実体は、.NETベースのアセンブリとマニフェストがZIP形式で圧縮されたファイルです。Silverlightでは、ユーザーインターフェイスの定義がXAML形式でリソースに埋め込まれていますが、DotfuscatorではXAPファイルを直接入力ソースとして使用することで、XAML側の定義も自動的に難読化されたアセンブリと一致した名称に加工されます。

 アプリケーションの配布を容易にする.NET Frameworkの技術であるClickOnceアプリケーションも難読化できます。配置マニフェストファイル(.application)を指定し、そのプロパティとしてClickOnceを生成する際に使用した証明書ファイル(および証明書パスワード)を設定すれば、自動的に難読化して再署名されたClickOnceアプリケーションが生成されます。

 この他、アセンブリの再署名対応、改ざんの検出など、.NET Frameworkの最新技術に対応した難読化を提供しています。

開発プロジェクトへの責任

 逆コンパイルなどの解析技術は日々進歩しています。ソースコードを厳重に管理する必要を感じているなら、バイナリからの解析に無防備であってはなりません。「自分のソフトウェアが狙われることはない」という保証はどこにもありません。いったん問題が発生したら、後からこれを回復することは困難であり、結果として企業の信頼を揺るがすことにもなります。アプリケーションに対して十分な難読化を施すことによって、はじめて知的財産の保護や情報セキュリティに対する責任を果たせるのです。

 .NETアプリケーション難読化ツール「Dotfuscator」の詳細や最新情報については、エージ―テックのWebサイトを参照してください。また、難読化を体験できる無料評価版をご用意しておりますので、ぜひお試しください。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

株式会社エージーテック(エージーテック)

弊社エージーテックは、豊富なノウハウと卓越した先見性で、企業のITソリューションをトータルにサポート。世界中で高い評価を集めるソフトウェアやITプロダクツを厳選し提供しています。豊富な経験と実績に裏付けられたローカライズやカスタマーサポート、さらには開発者支援プログラムの充実など積極多彩な事業を展開。ホームページ:http://www.agtech.co.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5444 2010/09/30 17:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング