2016-09-29 1 views
-1

.NETアセンブリ(exe、dll)を暗号化する方法やアンチ・デバッグ・テクニックを適用する方法を探しています。アセンブリにはネイティブのバイトコードでなくCILコードが含まれていないので、簡単にデコンパイルすることができます。
正直言って、私は.NETには全く新しいと言わざるを得ない。私はWeb開発者のバックグラウンドを持ち、C#はちょっと趣味なので、実行ファイルを暗号化する必要はありませんが、どのようにしてdotfuscatorのようなソリューションが機能するのか疑問に思っていました。
ファイルを実行するためにファイルをメモリ内で復号化する必要があることも知っていますが、これはネイティブコードを含むアセンブリと同じです。
.NET実行ファイルを暗号化するのが有効かどうかは、私が望まないことです。私は、暗号化やアンチ・デバッグのテクニック(例えば、制御フロー・難読化)を適用するために取ることができる理論的アプローチに興味を持っています。 以下の例と関連する質問からわかるように、私の知識はゼロ以下です。私は、コードがコンパイルされ実行されていれば満足している典型的なアプリケーションコーダーですが、もっと深く掘り下げたいと思います。暗号化.netアセンブリ/アンチ・デバッグ・テクニック

using System; 
namespace HelloWorld 
{ 
    class Hello 
    { 
     static void Main() 
     { 
      if(1 < 2) 
      { 
       if(3 == 3) 
       { 
        if ("a" != "b") 
        { 
         if(0 != 1) 
         { 
          Console.WriteLine("Hello World!"); 
         } 
        } 
       } 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

制御フローの難読化として無用な条件を付けることができますか?
あなたの提案、興味深いリンクやおすすめのリンクをお知らせください。

+0

難読化コードは、開発者にとってコードが複雑になるため、通常はより曖昧なバグになります。開発者が目指すべき重要なことは、一般的にバグの減少と保守性の向上につながる、分かりやすいクリーンなコードです。 – zaph

+0

重要な点は、これは「暗号化」ではないということでしょう。あなたが求めているのは難読化です。あなたはdllとしてコードを暗号化してから、アセンブリ化したデータをassembly.loadし、あなたのアプリで暗号化されたごみを効果的に展開することができます。しかし、これが成功の少なくとも希望を持っているためには、マネージコードを解読して実行する、高いエントロピーを持つアンマネージラッパー(C++アプリ)を書く必要があります。全体として、遅延は疑わしい利益のために重要であるかもしれない。 – zaitsman

答えて

1

Dotfuscatorのようなコードを難読化するのに役立つ商用ツールがあります。別のオプションは、ngenを使用してMSILをネイティブコードにコンパイルすることです。

私はあなたのカスタム 'コントロールフロー難読化'がリリースでビルドするときに最適化されると思います。

+0

私はngenを見ていきます。また、ビルド時の最適化についてはわかりませんでした。私は今夜​​これをテストし、逆コンパイルされたコードを見てみましょう。 – Seppel

+0

Visual Studioでは、プロジェクト設定でコード最適化オプションを見つけることができます。これはJITコンパイル時ほどではないMSIL最適化だけです。しかし、あなたが使ったif条件は定数に基づいているので、常に真実であると判断するのは簡単です。したがって、私の推測では、それらは最適化されますが、常にチェックするのは良いことです。 –

+0

あなたが正しいと条件は最適化されました。 – Seppel