web-dev-qa-db-ja.com

.NETアセンブリを逆コンパイルから保護するにはどうすればよいですか?

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

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

編集:

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

65
TalkingCode

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

著作権侵害の防止?その目標は達成できません。ネイティブコードでさえ、逆コンパイルまたはクラックされる可能性があります。オンラインで利用できる多数のウェアーズ(WindowsやPhotoshopのような製品でも)は、意欲的なハッカーがいつでもアクセスできることを証明しています。

著作権侵害を防ぐことができない場合、単にそれを減らすのはどうですか?これも見当違いです。誰でもコードを利用できるようになるには、たった1人でコードを解読するだけです。毎回幸運でなければなりません。海賊は一度だけ幸運である必要があります。

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

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

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

101
Joel Coehoorn

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

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

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

そして、小企業にとってはそれほど高価ではないことが判明しました。彼らは中小企業のための特別な価格を持っています。

(いいえ、私はPreEmptiveで働いていません;-))

もちろん、 フリーウェア の選択肢があります。

16
Rhapsody

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

13
David Fox

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

状況全体をほぼ説明しています。

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

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

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

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

10
kervin

難読化ツールはアプリケーションを保護できません。ここで説明したものはどれも保護できません。このリンクをご覧ください。これは、ほとんどすべての難読化ツールの難読化を解除できる難読化解除ツールです。

https://github.com/0xd4d/de4dot

あなたを助けることができる最良の方法(しかし、彼らは完全な教授でもないことを覚えておいてください)は、混合コードを使用し、アンマネージ言語で重要なコードをコーディングし、CまたはC++のようにDLL Themidaはすべてのクラッカーに対応しているわけではなく、市場で最高のプロテクターの1つであり、.NETソフトウェアも保護できます。

6

難読化したくないことは承知していますが、多分あなたは dotfuscator をチェックアウトする必要があります。コンパイル済みのアセンブリを受け取り、難読化してくれます。暗号化もできると思います。

5
Muad'Dib

ILをネイティブコードに直接コンパイルするプロジェクトについて聞いたことがあります。この投稿から追加情報を入手できます。 。NET ILコードをマシンコードにコンパイルすることは可能ですか?

3

{SmartAssembly} を使用して、エンタープライズレベルの分散アプリケーションの.NET保護を実現しました。

3
Dana Holt

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

-編集また、ソリューションとしてネイティブコードにコンパイルするよう注意してください...ネイティブコード用の逆コンパイラもあります。

2
Michael Brown

APIを使用しますか?

すべての顧客のデバイス上の製品の1つのddlファイルを保護する代わりに、貴重な製品機能用のAPIサービスを作成してみませんか?デバイスに保存されている実際の製品にそのAPIを使用させて、必要な製品を提供します。

このようにすると、開発者/ハッカーがあなたのAPIを望まない方法で消費しないように、コードが逆コンパイルされておらず、APIに独自の制限を設定していることを100%確信していると思います。

確かにもう少し作業がありますが、最終的にはあなたが管理します。

1
CularBytes

誰かがあなたのコードを盗む必要がある場合、それはおそらくあなたのビジネスモデルが機能していないことを意味します。それはどういう意味ですか?たとえば、私はあなたの製品を購入し、サポートを求めます。忙しすぎるか、私のリクエストが無効で時間の無駄だと思っています。相対的なビジネスをサポートするために、製品をデコードします。あなたの製品は私にとってより価値のあるものとなり、私はあなたの製品を活用するためのビジネスモデルを解決する方法で私の時間を優先します。私はあなたの製品のコードを書き直し、ブランドを変更してから、外に出て、あなたがテーブルに残すことにしたお金を稼ぎます。コードを保護する理由はありますが、問題を間違った観点から見ている可能性が高いです。もちろんそうですね。あなたは「コーダー」であり、私はビジネスマンです。 ;-)乾杯!

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

0
Adam Cox

ここにリストされているサードパーティ製品の他に、別の製品があります:NetLib Encryptionizer。ただし、難読化ツールとは異なる方法で機能します。難読化ツールは、難読化「エンジン」が組み込まれたアセンブリ自体を変更します。 Encryptionizerは、ファイルレベルでDLL(管理対象または管理対象外)を暗号化します。そのため、DLLを暗号化する以外は変更しません。この場合の「エンジン」は、アプリケーションとオペレーティングシステムの間にあるカーネルモードドライバーです。(免責事項:私は- NetLibセキュリティ

0
Neil Weicher

私はこれが古いことを知っていますが、 Themida は私が今まで使用した中で最も先進的なアンチクラッキングソフトウェアです。
ただし、無料ではありません。

0
sh4dowb