.NET TIPS

難読化したアプリケーションをClickOnceで配布するには?[2.0のみ、C#、VB]

デジタルアドバンテージ 一色 政彦
2006/12/01

 「TIPS:アプリケーションの難読化を自動化するには?」で説明したように、.NET Frameworkを使って開発したソフトウェアの逆コンパイルを防ぐ手段としては、「難読化」(Obfuscation)がよく用いられる。難読化とは、逆コンパイルにより生成されるソース・コードを読みにくくするためのもので、Visual Studio 2005(以降、VS 2005)には簡易な難読化ツールの「Dotfuscator Community Edition」(以降、Dotfuscator CE)が標準で含まれている(ただしVS 2005 Express Editionは除く)。ちなみにDotfuscatorにはCommunity Editionのほかに「Standard Edition」(以降、Dotfuscator SE)と「Professional Edition」(以降、Dotfuscator PE)がある(このうちDotfuscator SEは日本では受注停止のようだ)。

 本稿では、Dotfuscator CEで難読化したアプリケーションを、ClickOnceによって配布する際のちょっとした注意点を紹介しよう。

 なお、Dotfuscatorの内容や基本的な使い方については、「.NET逆コンパイラとコードを難読化するDotfuscator」をご一読いただきたい。

難読化されたアプリケーションをClickOnceで配布するには?(Dotfuscator CE編)

 まず「TIPS:アプリケーションの難読化を自動化するには?」で紹介したMSBuildファイル(VS 2005のプロジェクト・ファイル)を作成し、アプリケーションを難読化の自動実行に対応させる。

 ここで、VS 2005のIDEからClickOnceの発行を行おうとすると、Dotfuscator CEでは少しやっかいな問題が発生する。というのも、Dotfuscator CEでは難読化が完了したときに次のようなダイアログが表示され、このダイアログが原因でClickOnceの発行に失敗してしまう。

Dotfuscator CEで難読化が完了した際に表示されるダイアログ
このダイアログは難読化処理を完全に自動化できないようにするためにわざと表示しているようだ。Dotfuscator PE/SEでは表示されない。

 VS 2005のIDEでClickOnceの発行を行うと、最初にビルド処理が実行され、次に発行処理が行われるという2段階になっているが、第1段階のビルド処理の最中にUI(ここでは上記ダイアログ)が表示されてしまうと、第2段階の実際の発行処理の際に「構成」(DebugやReleaseなど)や「プラットフォーム」(AnyCPUなど)などの情報がおかしくなってしまい(具体的には「構成」がDebugに、「プラットフォーム」がAnyCPUに初期化されてしまい)、結果としてClickOnceの発行に失敗する(可能性がある。※構成とプラットフォームの設定が初期値と同じデバッグ・モードによる発行では問題にならず、無事に発行できる)。これはIDE自体の制限(バグ?)のようである。

 この構成が初期化される問題は、コマンドライン経由でClickOnceの発行を行うことにより(要するにMSBuildを使ってPublishターゲットを実行することで)回避できるようだ。コマンドラインによる発行方法については「TIPS:ClickOnceアプリをコマンドラインから発行するには?」で詳しく説明しているので、そちらをご一読いただきたい。

 いずれにせよPublishターゲットを実行する際には(前述したように)まずビルド処理が行われるので、上記のダイアログが表示される。従って、コマンドラインによる完全に自動化した(無人の)発行は難しい。なお、Dotfuscator CEでコマンドライン実行をする際には、VS 2005のIDEが起動していなければならない(起動していない場合エラーになる)。

Dotfuscator PE/SE編

 またDotfuscator PE/SEを使う場合、ClickOnceで発行するのは簡単だろう。筆者は実際には試していないが、これらのエディションでは上記ダイアログは表示されないようになっているということなので、VS 2005のIDEから直接発行しても前述の問題は発生しないはずである。特にDotfuscator PEは、MSBuildとの統合やサテライト・アセンブリ(=多言語対応アプリケーション)の難読化などを行う機能が搭載されているので、より高度な難読化が必要な場合は入手したいツールだ。End of Article

カテゴリ:開発環境&ツール 処理対象:ビルド
関連TIPS:アプリケーションの難読化を自動化するには?
関連TIPS:ClickOnceアプリをコマンドラインから発行するには?
 
この記事と関連性の高い別の.NET TIPS
アプリケーションの難読化を自動化するには?
ClickOnceアプリをコマンドラインから発行するには?
多言語対応アプリケーションをClickOnceで配布するには?
GACコンポーネントをClickOnceで配布するには?
ClickOnceアプリケーションをデバッグするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間