2011年10月17日月曜日

XNA難読化ソフト変えました。あと良いおまけ情報

Babel.netですが、Free Editionがなくなってしまいましたね…。一応ダウンロードして評価用バージョンとして使えるようにはなっているのですが、それを使って難読化すると、2週間後にexpireされるという仕様なので実質評価用としてしか使えないようになりました。

最新の他の無料難読化ソフトを調べてみたところ、個人的に一番よさそうなのは、Eazfuscator.NETでした。他のソフトは変換中にアプリケーションが落ちたりとうまくいくものはありませんでした。

あと既知の内容かもしれませんが、XNAの難読化関連で良い情報がありましたので良かったら最後まで読んでみてください。

まず、Eazuscator.Net ですが、最新版の個人的な評価はBabel.netと同じかそれ以上かもしれません。基本的にGUI設定できるものはないのですが、ソースにObfuscation属性を記述するタイプで色々設定ができるようになっています。

コマンドラインからも実行できますので、これも評価ポイントです。インストーラを作成する場合など、コマンドラインかバッチ的に使用できるので嬉しいところです。

Eazuscator.Netおすすめポイントを列挙しておきます。

  • 無料で使用できます。
    (かなり出来が良いので、将来有償化されるのではないかとは思います。現バージョンを残しておいたほうが良いかもしれません。)
  • コマンドラインから使用できます。
  • 挙動がすごく安定しています。また、Windows7 64bit環境でも使用できます。
  • EXE,DLL問わず難読化できます。
  • アセンブリマージできます。(後述します。)
  • プログラム中のリフレクションなども理解して、難読化してはいけないクラスなどを自動検出して、うまい具合に勝手に難読化してくれます。(検出は賢く、ProjectK2の場合では、設定なしに難読化してくれました。当然Obfuscation属性で細かく指定することもできます。)

 


XNAでEXEとDLLを使用するプロジェクトでの難読化について

あと良い情報ですが、XNAでのDLLを使った時の難読化についてです。通常XNAでプログラムを作成すると、実行用のEXEと、デシリアライズ用のDLLを作成する必要があり(一応使わなくても出来ます…)、DLL側のpublicメンバー名が難読化できないという問題がありました。(有償製品ならできるそうです…。)

Eazuscator.NETのマニュアル参照中に見つけたのですが、 ILMerge という、マイクロソフト製の便利ツールがあるそうです。かなり前から存在していたらしいのですが、全く知りませんでした。ILASM.EXE以上に使えるツールなのに、なぜ標準ツールから外れているのか謎です。

これを使うと、EXEとDLLをマージして、1つのEXEに変換できてしまうというイケてるツールです。これを行うことで、DLLを意識することなくEXEとDLLのすべてを難読化することができます。XNA4.0環境下での簡単な使用例を書いておきます。

ILMerge.exe /out:ProjectK2Merge.exe
/Lib:"C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86" /Lib:"C:\Program Files (x86)\Reference
Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client" /t:exe /v4 ProjectK2.exe ProjectK2Data.dll

この例では、 ProjectK2.exe と ProjectK2Data.dll をマージして、 ProjectK2Merge.exe にまとめることができます。マージした後は、ProjectK2.exeとProjectK2Data.dll は削除しても構いません。すべてのプログラムはProjectK2Merge.exeに含まれています。心配な方は、ILSpyやRefrectorでEXEの中身を覗いてみましょう。

また、Eazuscator.NETは、ILMerge.exe にもに対応済み!で、EXE側のAssemblyInfo.csに次の行を追加しておくことで、Eazuscator.NETで難読化実行前に、EXEとDLLをマージしてから難読化を行なってくれます。

[assembly: Obfuscation(Feature = "merge with ProjectK2Data.dll", Exclude = false)]

他にも、デバッグ用の機能や、難読化の詳細設定などもObfuscation属性で設定できるようになっています。詳しくは、Eazuscator.NETのドキュメントを参照してみてください。

以下は、配布用のzipファイルを作成するためのバッチファイルになります。アセンブリマージ、難読化、配布用zipの作成をバッチ的に行います。何かのサンプルになるかもしれませんので、とりあえずアップしてみます。

0 件のコメント:

コメントを投稿