Reflector が私のソースコードを反映するのを防ぐ方法 (信頼でき、できれば商業的ではない) はありますか?
ありがとう、アディ
いいえ。Reflector は、実行するネイティブ コードを生成するために、.NET ランタイムと同じようにアセンブリを調べます。あなたが望むことができる最善の方法は、コードを難読化し、読者が理解するのを (やや) 難しくすることです。
難読化を実行することの長所と短所については、商用の .Net アプリケーションを難読化する必要がありますか?に記載されています。
.net コードの逆コンパイルを防ぐ方法はありません。適切な難読化ツールを使用すると、リフレクトされたコードが読みにくくなります。dotfuscator のように、リフレクターに C# コードが表示されないようにするものもあります。ただし、IL は常に表示されます。
Dotfuscator のオプションの 1 つは、印刷できない名前を使用することです (Reflect on Reflector)。これにより、逆コンパイルが非常に困難になります。
Microsoft は、IL を暗号化し、従来のツールを使用したリフレクションを防止する暗号化キーに関連付けられたカスタム VM を使用するソフトウェア保護およびライセンス サービスを販売していました。これには大きなパフォーマンス コストがかかりますが、重要なアルゴリズムやライセンス コードなどを保護したい場合には有効でした。
dotfuscator を試してください。2005/2008 にはコミュニティ エディションが付属しています。コードの再構築に失敗すると (苦痛)、.NET コンポーネント (パブリック) によって呼び出される ATL/COM オブジェクト (プライベート) が失敗します。
選択はあなた次第です。
XheoCodeveilも素晴らしい製品です。また、ライセンスソリューション(シリアル番号などを作成し、独自のアクティベーションサーバーを介してアクティベートするため)もあります0
オプションで、ネイティブ C++ アプリケーションを使用して .Net アプリケーションをブートストラップできます。次に、すべての .net dll ファイルを難読化して暗号化できます。
ブートストラップ C++ アプリケーションを使用して、すべてのファイルをメモリ ベースのバイト配列 (物理的な自己の正確なコピー) に復号化します。
私が行った方法は、すべての .net ファイルを .DAT 拡張子を持つ 1 つの暗号化ファイルに保持することでした。C++ コードはファイルをメモリ マップ ファイルに取り込み、CLR ホスティング API を使用してネイティブ C++ アプリを .net アプリに変換します。
Assembly.Load(バイト[]...)
したがって、私のアプリでは、.net EXE の作成を避け、C++ アプリを EXE にして、すべてのフォーム、コントロールなどを .Net Dll に配置しました。
少し前までは、.NET リフレクターが 1 つの特定の IL 命令を C# コードに変換できなかったために効果的だったアンチ リフレクター トリックがありましたが、パッチがリリースされ、楽しみは終わりました。
優れた難読化ツールを探している場合は、RemoteSoftを試してみてください。
免責事項: 私は SmartAssembly のメーカーである RedGate で働いていません。私は、優れた手頃な価格のソリューションを見つけた非常に満足している顧客です.
選択は非常に簡単です。SmartAssembly を選択してください。市場の他の難読化ツールで時間やお金を無駄にしないでください。競合製品を評価する請求対象外時間に関して、より多くのお金を費やしました。それらにはすべて致命的な欠陥があり、デバッグはほぼ不可能でした。SmartAssembly は、優れたサポートを備えた、使いやすく、十分に文書化された洗練されたアプリケーションです。彼らのフォーラムに質問を投稿して、実際の開発者によるかなり迅速な回答を期待してください。
SmartAssembly は単なる難読化ツールではありません。顧客が自動的に電子メールで送信できる、高度にカスタマイズ可能な組み込みのクラッシュ レポート ジェネレーターなど、多数の機能があります。これらのレポートは、独自のサーバーまたは red-gates サーバーで表示できます。製品をベータ テストしたり、顧客にリリースしたりするときに、これがどれほど役立つかはわかりません。また、難読化された製品で発生する可能性のあるリリース後の問題をデバッグできるように、デバッガー ファイルも生成されます。
商用アプリケーションを配信している場合は、まともな難読化ツールにお金を使うのが理にかなっています。ここでの選択を誤ると、知的財産が危険にさらされたり、さらに悪いことに何日にもわたる恐ろしいデバッグにつながる可能性があります。SmartAssembly のコストと比較すると、このコストはいくらになるでしょうか?
Reflector は Reflection を使用してソース コードを表示しません。これを行うには、.Net メタデータ (よく知られている公開形式) を使用します。
これを防ぐ方法はありませんが、アセンブリを難読化することで無意味にします。難読化後、クラス/メソッド/フィールドの名前が変更され、メソッド内のインライン文字列が暗号化され、メソッド呼び出しが非表示になり、メソッド制御フローがスクランブルされます。そのため、Reflector を使用する人は誰でも大量のゴミを目にし、そのほとんどを理解することができなくなります。
免責事項: 私は、 Crypto Obfuscatorの開発者である LogicNP Software で働いています。