2010年5月24日月曜日

WPFを難読化しよう ~ Obfuscator

.NETのアセンブリはIL化されているので、普通にコンパイルしただけではアセンブリから逆アセンブルしてコードの中身をそっくりそのまま見れるようになっている。それはもうReflectorなどのツールを使ってしまえばコードの隅々まで手に取るように分かってしまう。

これではコードの知的財産権を意図せずに放棄しているようなもので、重要なビジネスロジックを実装している場合や、ビジネス的に価値のある高度なプログラミングをしている場合などは危なっかしくてアセンブリを頒布することができない。

そのため.NETでは商用のアセンブリなどをリリースする際には、アセンブリを逆アセンブルされても良いように、ILのコードを意味不明な変数名などに置き換えるコード難読化ツール(英語では大体「ほにゃらら obfuscator」という名称が用いられている。obfuscate=分かりにくくする)が利用されてきた。

今回はWPFアプリ用のObfuscatorで良いなと思ったツールを紹介したい。

商用のObfuscatorは大体$100~$400ぐらいと、個人で開発している開発者にとっては結構な値をはるものが多いが機能は異常に豊富だ。フリーのツールでも充分用を足せるものがあるので、ガチガチにかためる必要がない場合は「.net obfuscate free」などでGoogleしてもらいたい。

実はWPFアプリの難読化には一つ問題があり、他の.NETアセンブリと同様に難読化を行うとアプリが起動しなくなる。というのはCode Behindのコードは難読化されるのにXAMLは通常無視されるので起動時にプロパティなりクラスなりが見つからずに例外が発生して終了してしまう。それなのでWPFアプリにはそれに対応したObfuscatorが必要になる。


で、いくつか評価したフリーのツールで一番のお勧めObfuscatorはcodefort.orgだ。実際には完全にフリーなわけではなく、Free版とProfessional版に分かれている。XAMLまで含めた完璧な難読化を行いたい場合はProfessional版を買い求める必要があるが、簡易な難読化でよい場合はFree版でことたりる。使い方もいたって簡単で、難読化したいdllなりexeなりを選択すれば勝手に依存しているアセンブリを探してきてくれて、Buildタブをクリックすると任意のフォルダへ必要最小構成でアプリをパッキングしてくれる。Build後のアセンブリを前述のReflectorなどで参照してみれば変数名等が変更されているのが分かると思う。

0 件のコメント:

コメントを投稿