81

C# を使い始めて最初に学んだことは、最も重要なことでした。Reflector またはその他のツールを使用して、任意の .NET アセンブリを逆コンパイルできます。多くの開発者はこの事実を認識しておらず、私がソース コードを見せるとほとんどの開発者はショックを受けます。

逆コンパイルに対する保護は、依然として困難な作業です。私はまだそれを行うための迅速で簡単で安全な方法を探しています. コードを難読化したくないので、メソッド名は a、b、c などになります。Reflector またはその他のツールは、アプリケーションを .NET アセンブリとしてまったく認識できないはずです。私はすでにいくつかのツールについて知っていますが、それらは非常に高価です。アプリケーションを保護する他の方法はありますか?

編集:

私の質問の理由は、著作権侵害を防止するためではありません。競合他社が私のコードを読むのを止めたいだけです。私は彼らがそうすることを知っています、そして彼らはすでにそうしました。彼らは私にそうさえ言った。私は少し偏執的かもしれませんが、ビジネス上のライバルが私のコードを読んでいても気分が良くありません。

4

13 に答える 13

110

心に留めておくべきことの 1 つは、ビジネス上意味のある方法でこれを行いたいということです。そのためには、目標を定義する必要があります。では、正確にあなたの目標は何ですか?

海賊行為防止?その目標は達成できません。ネイティブ コードでさえ、逆コンパイルまたはクラックできます。オンラインで入手可能な多数のウェアーズ (Windows や Photoshop などの製品であっても) は、ハッカーがいつでもアクセスできることを証明しています。

海賊版を防げないなら、ただ減らすだけでは?これも見当違いです。1 人がコードをクラックするだけで、誰もがコードを利用できるようになります。あなたはいつも幸運でなければなりません。海賊は一度だけ運が良ければいいのです。

目標は利益を最大化することであるべきです。この取り組みには著作権侵害を阻止することが必要であると考えているようです。そうではない。利益は単純に収益から費用を差し引いたものです。著作権侵害を阻止すると、コストが増加します。それには労力がかかります。つまり、プロセスのどこかにコストが追加されるため、方程式のその側が減少します。製品を保護しても、収益は増加しません。私はあなたがそれらすべての海賊版を見て、彼らが代わりにあなたのライセンス料を支払うだけであなたが稼ぐことができるすべてのお金を見ていることを知っていますが、現実にはこれは決してありません.起こる。ここには誇張がありますが、一般に、セキュリティを破ることができない海賊は、破ることができる類似の製品を見つけるか、それなしで済むと考えられています。代わりに購入することは決してないため、販売の損失にはなりません。

さらに、製品を保護すると、実際には収益が減少します。これには 2 つの理由があります。1 つは、アクティベーションまたはセキュリティに問題があり、そのために再度購入しないか、返金を求める顧客のごく一部です。もう 1 つは、ソフトウェアの海賊版を実際に試して、購入する前に動作することを確認する少数のユーザーです。製品の海賊版配布を制限することで (何らかの方法でこれに成功することができれば)、これらの人々があなたの製品を試すことを防ぎ、購入することはありません。さらに、著作権侵害は、あなたの製品をより多くの人に広めるのにも役立ちます。

より良い戦略は、製品が海賊版になると想定し、その状況を利用する方法を考えることです。トピックに関するいくつかのリンク:
コードが盗まれるのを防ぐにはどうすればよいですか?
.NET アプリケーションの保護

于 2010-03-19T15:30:31.930 に答える
16

ここでの作業では、PreEmptive Solutions のDotfuscatorを使用しています。

.NET アセンブリを 100% 保護することは不可能ですが、Dotfuscator はそれを十分に難しくしていると思います。多くの難読化手法が付属しています。

アセンブリ間の名前変更 名前
変更スキーム
名前変更プレフィックス
強化されたオーバーロード誘導
増分難読化
HTML 名前変更 レポート
制御フロー
文字列暗号化

そして、小規模な企業にとってはそれほど高価ではないことが判明しました。中小企業向けの特別価格があります。

(いいえ、私は PreEmptive のために働いているわけではありません ;-))

もちろん、フリーウェアの代替品もあります。

于 2010-03-19T15:02:46.927 に答える
13

任意のクラウド サービス プロバイダーでサービスをホストします。

于 2010-03-19T14:59:31.853 に答える
10

C# アプリケーションの逆コンパイルを防ぐ方法

全体の状況をかなり説明しています。

ある時点で、コードを VM バイトコードに変換する必要があり、ユーザーはそれを取得できます。

マシンコードもそれほど違いはありません。IDA Proのような優れたインタラクティブな逆アセンブラー/デバッガー は、ほぼすべてのネイティブ アプリケーションを透過的にします。デバッガーは、AI を使用して一般的な API やコンパイラーの最適化などを識別するのに十分なほどスマートです。これにより、ユーザーは、マシン コードから生成されたアセンブリから、より高いレベルの構造を細心の注意を払って再構築できます。

また、IDA Pro は .Net もある程度サポートしています。

正直なところ、(互換性のための) リバース エンジニアリング プロジェクトに数年間取り組んだ後、私の経験から得た主なことは、人々が私のコードを盗むことについてあまり心配する必要はないということです。誰かがそれを望むなら、私がどのようなスキームを実装しても、それを手に入れるのは決して難しくありません.

于 2010-03-19T14:59:05.927 に答える
5

難読化したくないことはわかっていますが、dotfuscatorを確認する必要があるかもしれません。コンパイルされたアセンブリを取得して難読化します。暗号化もできると思います。

于 2010-03-19T15:02:35.723 に答える
3

エンタープライズ レベルの分散アプリケーションの .NET 保護に{SmartAssembly}を使用していますが、非常にうまく機能しています。

于 2010-03-19T15:01:55.460 に答える
3

IL をネイティブ コードに直接コンパイルするプロジェクトについて聞いたことがあります。この投稿から追加情報を得ることができます: Is it possible to compile .NET IL code to machine code?

于 2010-03-19T14:59:38.547 に答える
2

アプリを逆コンパイルから完全に保護したい場合は、Aladdin's Hasp を参照してください。アプリケーションのみがアクセスできる暗号化されたシェルでアセンブリをラップできます。もちろん、どうやってこれを行うことができるのか疑問に思いますが、うまくいきます。ただし、Crack.NET が実行できる実行時の添付ファイル/反射からアプリを保護するかどうかはわかりません。

-- 編集 解決策としてネイティブ コードへのコンパイルにも注意してください...ネイティブ コード用の逆コンパイラもあります。

于 2010-03-19T15:00:55.603 に答える
0

誰かがあなたのコードを盗まなければならない場合、それはおそらくあなたのビジネス モデルが機能していないことを意味します。それはどういう意味ですか?たとえば、私はあなたの製品を購入し、サポートを求めます。あなたは忙しすぎるか、私の要求が有効ではなく、時間の無駄であると信じています. 私の関連するビジネスをサポートするために、あなたの製品を解読します。あなたの製品は私にとってより価値のあるものになり、私はあなたの製品を活用するためのビジネスモデルを解決するために私の時間を優先します. 私はあなたの製品を再コーディングして再ブランド化し、外に出て、あなたがテーブルに残すことにしたお金を稼ぎます. コードを保護する理由はいくつかありますが、問題を間違った視点から見ている可能性が高いです。もちろんそうですね。あなたは「コーダー」で、私はビジネスマンです。;-) 乾杯!

ps。私も開発者です。つまり「コーダー」

于 2013-06-19T13:58:14.427 に答える