2008-08-15 16 views
24

私は確かに多くの読者がLutz Roederの.NETリフレクターを使って.NETコードを逆コンパイルしています。 コンパイルされたアセンブリから私たちのソースコードをいかに正確に再現できるかは驚きました。.NETコードの難読化が心配すべきでしょうか?

難読化を使用する人の数や、どのような製品について聞いてみたいですか?

これは、特定のクライアントのために注文されたものとは対照的に、インターネット経由でダウンロードする.NETアプリケーションにとって、はるかに重要な問題であると確信しています。

答えて

19

に私はあまり心配していないでしょう。私は、あなたのコードを盗んだり、ソースを見ているユーザーの割合が最小限であることを心配するのではなく、すばらしい製品を出して、良いユーザーベースを手に入れ、顧客を適切に扱うことに重点を置いています。

+0

ソフトウェアに機密データが含まれている場合を除きます(プライベートキーやパスワードなど) – marcolopes

+2

@marcolopes:秘密鍵は決して​​アプリケーションと一緒に配信されるべきではありません。パスワードはハッシュされるべきで、クリアテキストではありません... –

+1

プライベートキーを保存するには他にどのような解決策がありますか?サーバーアクセス?インターネットに接続していない場合は? – marcolopes

3

あなたが知的財産を保護する必要がある場合 - obfuicate - もしそうでなければ。

適切なツールを使用すると簡単です。

2

私たちは私たちのすべてのIPを心配する必要があり、ある程度考える:)

良い質問をその何かのように私は(私は現在ない難読化を行う)についての詳細を知ることに熱心だけれども。

私のマネージャーと仕事中に議論していたが、彼は難読化していないと言っていたが、インストール時にはNGENを使ってReflectorがあなたのアセンブリで作業するのを止めるのに十分なはずだが、そしてどの程度なので、福音としてそれを服用しないでください:)

良い質問:) 1

+4

NGenは反射板に何らかの影響を与えません。 NGenツールを使用しても元のアセンブリはシステムから削除されません。 –

7

私たちは現在、少数のクライアントに専門のソフトウェアを販売する小さな衣装であっても、すべての出力を難読化しています。

この決定は、不満を感じた元従業員がバイナリを要求しているクライアントに近づいていることを発見したという単純な理由から、競合する機能を提供するために新しい機能をリバースエンジニアリングすることを心配していました。

もちろん、彼はソフトウェアを使用してもこれを行うことができますが、彼を簡単にする理由はありません。

5

ない新しい難読化が、例えば1.1

以来、コンパイラのトリックの多くあなたはかなりあいまいな名前でバックコンパイルあなたがILを得る匿名型を使用するたびに。 yieldを使うたびに、IEnumerableとIEnumeratorの両方を実装するまったく新しいクラスが得られます(賢明な最適化、判読不能なコード)。匿名の代理人を使うたびに、私が知っているすべての.Net言語で無効な名前の新しいメソッドを取得しますが、これはILでうまくいきます。 ストップリフレクター作業に十分なはず

4

@Robクーパーが

は仕事で私の マネージャーといくつかの議論を持っていた、彼は彼が 難読化しないと述べたが、インストールにNGENを行い、 apparantlyこの がtrueで、どの程度なので、 福音:)

これを行うと、それを服用しないでくださいする場合は、あなたの アセンブリに、私は考えています解体に対するあらゆる種類の保護を提供してはいけません。最初に、MSIファイルやCABファイルのようなインストールパッケージからrawファイルを抽出することは可能です。

さらに重要なことに、Ngenは、アセンブリがインストールされた後にクライアントマシンで実行されます。 NgenはJITを後で使用する代わりにアセンブリをコンパイルするように強制します。 Ngenはアセンブリ全体をコンパイルできない可能性があるため、元のアセンブリはそのまま残り、変更されずに残っていなければなりません。

Ngenはセキュリティではなく、パフォーマンスを目的としており、分解を防止したり、やや難しいことはありません。

+0

"MSIやCABファイルのようなインストールパッケージからrawファイルを抽出することは可能性が高いと思います。 - はい:http://superuser.com/questions/307678/how-to-extract-files-from-msi-package –

10

難読化は暗号化ではないことに注意してください。誰かがあなたのコードをリバースエンジニアリングすることで価値を認識したら、それを実行します。これは、管理されたコードやネイティブコードでは、難読化されているかどうかにかかわらず当てはまります。確かに、難読化はカジュアルオブザーバーを抑えるが、あなたのビジネスはそのような人々によって実際に脅かされているのだろうか?私が見たすべての.NET難読化メソッドは、開発者としてのあなたの人生をより困難にします。

MicrosoftからのSLPSなど、真の暗号化を提供するサービスがあります。 http://www.microsoft.com/slps/default.aspx

+1

開発を難しくすることについての良い点。 –

+0

素晴らしいコメント: '難読化はカジュアルなオブザーバーを阻止するが、あなたのビジネスは実際にそのような人々によって脅かされているのだろうか?' –

0

Obsfucationの有効性には限界があり、カジュアルな人間を遠ざける可能性があります。最も効果的なのは、ユーザーに利用可能なコードの量を最小限に抑えることです。可能であれば、あなたのアプリを太ったサーバーに大きく依存するようにしてください。

+0

...私たちがWinForms Appsについて話すなら、少し問題になるかもしれません。 – JRoppert

2

私たちは "非公開"アプリケーションには難読化を使用しませんが、公開アプリケーションには使用しています。難読化されたアプリには非常に洗練されたコードがたくさん含まれているため、書き留める時間が非常に長くなりました。それが、難読化が必須であると思うようになる理由です。

0

少しでもコードする方法を知っているほとんどの人は、あなたのコードを盗む必要はありません!

関連する問題