2010年12月20日月曜日

XNAの難読化

XNAで作成したプログラムは、.NET Refrectorを使用すれば逆コンパイルされて、ソースやリソースが見放題になります。

ProjectK 作成時は、XNAで作成したWindows用ゲームは、デフォルトでは難読化されないため配布するのをためらっていましたが、今後はWindows版を、ある程度安心して配布できます。

.NET Refrector 適用前

いくつか難読化フリーソフトを試しましたが、国産のものは、Genericが使用できなかったり、変換に失敗したりとどれも使用できるものはありませんでした。実際にいろいろ試した結果

お勧めは、 Babel.NET です。

設定はすべてコマンドラインで行いますが、バッチファイルを一度作成するだけで済むし、必要な機能はすべて利用できました。

  • XNAアプリケーション(.exe)を難読化できる
  • XNAライブラリ(.dll)を難読化できる
  • 任意の関数やクラスのみ、難読化をからはずすことができる(リフレクション対策)
  • プログラムを書き換えて、プログラムを分かりにくくしてくれる
  • .NET Refrector対策がされている。.NET Refrectorでc#逆コンパイルしようとすると、.NET Refrectorがアプリケーションエラーを起こします。(ILでは逆アセンブルできる)
  • 名前のオーバーロード変換ができる

    注意点としては、XNAライブラリ(.dll)は、基本的に名前の難読化はしないほうが無難です。(XNAアプリケーションから、ライブラリを名前でリンクするので当然といえば当然)。ただし、「名前は変更しないが、コードは難読化して逆コンパイルだけはできないようにする」というのがベターだと思います。

     

    .NET Refrector 適用後

    これでも難読化を解析してソースがみれる人はいますが、その人達はソースをみても意味がことがおおいので、目的は果たせていることになります。今の私の設定を公開しておきますので、環境に合わせてご使用ください。ProjectK2で使用しているバッチファイルは、以下のようになっています。XNAアプリケーションの位置にコピーして、babel.batをダブルクリックして実行します。もしくは、Visual Studioのリリース版のビルドイベントとして登録するのも良い方法だと思います。

    なお、ライセンス関連は念のため各自でご確認ください。

    babel.bat のサンプル

       1: del /S /F /Q Nandoku
       2: mkdir Nandoku
       3: mkdir Nandoku\Content
       4:  
       5: xcopy /E ProjectK2\Bin\X86\Debug\Content  Nandoku\Content
       6: copy ProjectK2\Bin\X86\Debug\ProjectK2.exe Nandoku\ProjectK2_Org.exe
       7: copy ProjectK2\Bin\X86\Debug\ProjectK2Data.dll Nandoku\ProjectK2Data_Org.dll
       8:  
       9: cd Nandoku
      10: babel.exe --verbose 1 ProjectK2_Org.exe --overloaded --noflatns --keyfile ..\ProjectK2\ProjectK2.snk --output ProjectK2.exe
      11: babel.exe --verbose 1 ProjectK2Data_Org.dll --overloaded --properties --method  --noflatns --keyfile ..\ProjectK2Data\ProjectK2Data.snk --output ProjectK2Data.dll
      12: cd ..

  • 0 件のコメント:

    コメントを投稿