.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();
}
}
}
制御フローの難読化として無用な条件を付けることができますか?
あなたの提案、興味深いリンクやおすすめのリンクをお知らせください。
難読化コードは、開発者にとってコードが複雑になるため、通常はより曖昧なバグになります。開発者が目指すべき重要なことは、一般的にバグの減少と保守性の向上につながる、分かりやすいクリーンなコードです。 – zaph
重要な点は、これは「暗号化」ではないということでしょう。あなたが求めているのは難読化です。あなたはdllとしてコードを暗号化してから、アセンブリ化したデータをassembly.loadし、あなたのアプリで暗号化されたごみを効果的に展開することができます。しかし、これが成功の少なくとも希望を持っているためには、マネージコードを解読して実行する、高いエントロピーを持つアンマネージラッパー(C++アプリ)を書く必要があります。全体として、遅延は疑わしい利益のために重要であるかもしれない。 – zaitsman