SOの多くの読者は、LutzRoederの.NETリフレクターを使用して.NETコードを逆コンパイルしたと確信しています。コンパイルされたアセンブリからソースコードをどれだけ正確に再構築できるかに驚かされました。
何人の人が難読化を使用し、どのような製品に使用しているのか知りたいのですが。
これは、たとえば、特定のクライアント向けに作成されたものではなく、インターネット経由でダウンロードするために提供する.NETアプリケーションにとってはるかに重要な問題であると確信しています。
SOの多くの読者は、LutzRoederの.NETリフレクターを使用して.NETコードを逆コンパイルしたと確信しています。コンパイルされたアセンブリからソースコードをどれだけ正確に再構築できるかに驚かされました。
何人の人が難読化を使用し、どのような製品に使用しているのか知りたいのですが。
これは、たとえば、特定のクライアント向けに作成されたものではなく、インターネット経由でダウンロードするために提供する.NETアプリケーションにとってはるかに重要な問題であると確信しています。
あまり気になりません。コードを盗んだりソースを見たりすることに関心を持つユーザーの割合が最小限になることを心配するよりも、すばらしい製品を出し、優れたユーザーベースを獲得し、顧客を正しく扱うことに焦点を当てたいと思います。
難読化は暗号化ではないことに注意してください。私見ですが、誰かがあなたのコードをリバース エンジニアリングすることに価値を感じたら、彼らはそれを実行します。これは、難読化されているかどうかに関係なく、マネージ コードまたはネイティブ コードに当てはまります。確かに、難読化は何気ない観察者を思いとどまらせますが、あなたのビジネスは実際にそのような人々によって脅かされていますか? 私が見たすべての .NET 難読化手法は、開発者としてのあなたの人生を困難にします。
Microsoft の SLPS など、真の暗号化を提供するサービスがあります。http://www.microsoft.com/slps/default.aspxを参照してください。
私たちは、少数のクライアントに専門的なソフトウェアを販売している小さな衣装ですが、現在、すべての出力を難読化しています。
この決定を下した理由は1つあります。不満を持った元従業員が、バイナリを要求しているクライアントに積極的にアプローチしていることを発見しました。競合する機能を提供するために、新しい機能をリバースエンジニアリングしようとしているという懸念がありました。
もちろん、彼がソフトウェアを使用すれば、彼はまだこれを行うことができますが、彼にとってそれを簡単にする理由はありません。
新しい難読化はありませんが、1.1以降のコンパイラのトリックはたくさんあります
たとえば、匿名タイプを使用するたびに、かなりあいまいな名前でコンパイルされるILが取得されます。歩留まりを使用するたびに、IEnumerableとIEnumeratorの両方を実装するまったく新しいクラスを取得します(巧妙な最適化、読み取り不可能なコード)。匿名のデリゲートを使用するたびに、私が知っているすべての.Net言語では無効な名前の新しいメソッドを取得しますが、ILでは問題ありません。
@ロブ・クーパー
職場でマネージャーと話し合ったところ、難読化はしていないが、インストール時に NGEN を実行しているとのことでした。明らかに、これでアセンブリに対する Reflector の動作を停止するのに十分なはずですが、これが本当かどうか、どの程度かはわかりません。ですから、それを福音と見なさないでください :)
これは分解に対するいかなる種類の保護も提供しません。まず、MSI や CAB ファイルなどのインストール パッケージから未加工のファイルを抽出することはかなり可能だと思います。
しかし、もっと重要なことは、アセンブリがインストールされた後、Ngen がクライアント コンピューター上で実行されることです。Ngen は、後で JIT を使用する代わりに、アセンブリを強制的にコンパイルするだけです。Ngen はアセンブリ全体をコンパイルできない可能性があるため、元のアセンブリは変更されずに残ります。
Ngen はパフォーマンスのためのものであり、セキュリティのためのものではなく、逆アセンブルを防いだり、少しでも難しくしたりするものではありません。
私にとっては簡単です-知的財産を保護する必要がある場合-難解です-そうでない場合。
適切なツールで簡単に実行できます。
「非公開」アプリケーションには難読化を使用しませんが、公開アプリケーションには使用します。難読化されたアプリには非常に洗練されたコードがたくさん含まれているため、作成に膨大な時間がかかりました。そのため、少なくともその場合は、難読化が必須であると考えさせられます。
私たちはある程度、私たち全員が私たちのIPについて心配する必要があると思います:)
良い質問ですが、それについてはもっと知りたいと思っています(現在、難読化はしていません)。
職場のマネージャーと話し合ったところ、彼は難読化していないと言いましたが、インストール時にNGENを実行します。明らかに、Reflectorがアセンブリで動作するのを止めるのに十分なはずですが、これが真実かどうか、またどの程度かはわかりません。 、だから福音として受け取らないでください:)
良い質問:)+1
同意します。少しでもコーディング方法を知っているほとんどの人は、コードを盗む必要はありません。
難読化の効果は限定的であり、カジュアルな人を遠ざける可能性があります。最も効果的な難読化は、最小限のコードのみをユーザーが利用できるようにすることです。可能であれば、ファット サーバーに大きく依存するアプリを実行してください。