web-dev-qa-db-ja.com

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

C#とMySQLを使用してクライアントサーバーアプリケーションを開発する予定です。他のソフトウェアユーティリティと同様に、製品を棚で販売する予定です。使いやすさとバンドルされた機能の点で、競合製品よりもある種のEdgeがある製品の逆コンパイルが心配です。

ソフトウェアの逆コンパイルを防止して、製品のビジネスロジックをそのままにするにはどうすればよいでしょうか。

コードをコピーに対して非常に脆弱にするReflectorおよびその他の逆コンパイラについて聞いたことがあります。

私たちの顧客ベースは企業ではなく、それ自体はできないかもしれない医療従事者ですが、競合他社はライセンスをコピー/無効化したり、コード/機能を複製したりして、製品の価値を市場で下げたいと思うかもしれません。

これを防ぐための提案は大歓迎です。

25
Kalpak

.NETアセンブリをクライアントマシンに配置する場合、リフレクターや同様のツールを使用すると、常に何らかの種類の逆コンパイルが可能になります。

ただし、この状況は、ネイティブC++でアプリケーションを作成した場合に発生する状況と実質的に変わりません。物事を逆コンパイルすることは常に可能です-不可能であった場合、プロセッサもそれを理解できませんでした。

あなたはエキスパートのクラッカーを倒すつもりはありません-彼らはあなたのセキュリティを、挑戦だけで解決される知的パズルとして扱います。

問題は、ライセンスの慣行と投資収益率を打ち負かすことがいかに難しいかに関係しています。

スプレッドシートに腰を下ろして、考えられるシナリオに目を通してください。おそらく、危険はあなたが思っているよりも少ないでしょう。

ソフトウェアには「使いやすさ」などの要素が表示され、すべてのユーザーが観察できます。したがって、コピーは簡単だと思います。しかし、ほとんどの開発者(私も含めて)は一般的なユーザーとは違うため、良いユーザーエクスペリエンスはめったにありません(そして、ほとんどコピーされません)。

私はあなたがクラッカーの仕事をより難しくすることに集中することを勧めます、あなたがそれを不可能にすることは決してできず、非営利になるだけだからです。

試す1つの可能性:インストールプロセスの一部として、アセンブリをネイティブコードにプリコンパイルすることが可能です。 Paint.NETは、パフォーマンス上の理由からこれを行います。これを実行したら、元のアセンブリを破棄して、最適化されたネイティブコードエディションを使用できると思います。

25
Bevan

Google for .NET Obfuscator。あなたはこれに役立つ多くの製品を見つけるでしょう。また、Stack Overflowで関連する質問が既にあります。

ここに幾つかあります:

[〜#〜] edit [〜#〜]:難読化解除ツールを検索しているときに、オープンソースツールに遭遇しました De4Dot 。このツールは、ほとんどの商用ツールで作成された難読化されたdllの逆コンパイルをサポートしており、かなり良い仕事をします。

6
Ganesh R.

それが私なら、難読化するつもりはありません。私は...するだろう:

  1. 心配することなく、継続的に改善し、最前線に立つことを目指します

しかし、第二に

  1. 「シークレット」サービスをWebで提供することを検討してください。これがどれほど重要であり可能かを判断するのはあなた次第です。しかし、エンドユーザーがコードさえ持っていないため、逆コンパイルは「防止」されます。
6
Noon Silk

検討したいかもしれません Remotesoft Salamander Protector これは、高級言語に逆コンパイルすることが不可能になるという点で、他の何よりもはるかに優れています。

もちろん、エキスパートであれば誰でもあなたのソフトウェアに十分な時間を費やしてそれを理解することができますが、それはいくつかを逆コンパイルしますが、すべてのセットと取得メソッドを隠します

だから、彼らはピークを得ることができますが、それはそれについてです。残りの部分を把握する必要があるため、クラッキングする可能性は低くなります。

お役に立てれば

0
Spencer

.netコードのC++ラッパーについての質問に答える。アプリケーションをデプロイすると、ビジネスロジックコードを含む最終的なc ++ dllと.net dllは別のエンティティになり、ビジネスロジックにアクセスしたいものは、引き続き、 .net dllと内部をのぞきます。

0
user20358

前回これを調べたとき、 Spices.Net Obfuscator は市場で最高のもののように見えました。

いいえ、私は彼らのために働きません。 :)

0
ine

smartassembly を使用します。使い方は簡単で、組み込みのクラッシュレポートを送信することもできます。

0
Geoff Appleford

他の人が言及した難読化ツールは、おそらく非常に優れています。

あなたが考慮しなかったかもしれない別のアプローチは、C++などの完全にマシンコードにコンパイルされた言語を使用して、コアビジネスロジックの一部をコーディングすることです。

これを行うことの利点は、誰かがあなたのコードを逆コンパイルすることをはるかに困難にすることです。これの欠点は、維持する2つの言語のコードがあることです。これは状況に最適な方法ではないかもしれませんが、コードの残りの部分がUIフラフであるのに、コードのごく一部だけを難読化する必要がある場合に役立ちます。

例として、医療ソフトウェアパッケージは、特定の腺のエッジ検出を実行して、その腺のサイズを医師に伝えることができます。ビットマップ画像から腺のサイズを計算するためのアルゴリズムは、C++で記述されたDLLに含まれます。

0
Charlie Salts

難読化ツールはコードを混乱させますが、プロテクターは保護します。 .Netプロテクターを使用できます: NetWinProtector

0
Anton Chernous

Intellilockは、難読化とライセンスに関して、私たちの目的を十分に果たしています。しかし、サポートがマークされていないので、私は製品をお勧めしません。私たちが直面している問題に間に合うように返信することはありませんでした。いくつかの目標を達成するには、自分で検索して調査するか、ビジネス要件を変更する必要がありました。

この回答を通じて、私はソフトウェアを昇格または降格させるつもりはありませんが、私たちが使用している製品について人々に知らせて、彼らが賢明な決定を行えるようにしたいと思っています。

0
Kalpak

久々にこのスレッドに書いています。 Intellilock と呼ばれるソフトウェアを購入しました。これは、逆コンパイル、難読化の防止に役立ち、強力なライセンスモジュールも備えています。

Intellilockが私たちの目的を十分に果たしていたので、より多くの防止制御があったとしても、 。Net Reactor には行きませんでした。

0
Kalpak