6

暗号化/コピー防止に関する質問があります。

ドングルを使用する会社のアプリケーションを書いています。ソフトウェア保護は役に立たないとか、ただ放っておけばいいとか、これに費やした時間は無駄だなどと言わないでください。これは、ソフトウェア保護の有効性に関する哲学的な問題ではなく、ハウツーのようなものです。

私が理解しているように、ドングルで保護されたソフトウェアをクラックする最初のステップは、コードからドングルへのすべての呼び出しを削除することです (つまり、実行可能ファイルにパッチを適用します)。また、この MSDN の記事で説明されているように、アプリケーションとアセンブリを保護するために、.NET で「厳密な名前」を作成することもできます。

アプリケーションに簡単にパッチを適用できないようにするには、厳密な名前付けで十分ですか? または、ある種の暗号化ライブラリを使用する必要がありますか? ライブラリを使用する必要がある場合、どのライブラリを使用するか、またはこれを設定するための情報をどこで入手できますか?

もちろん、次のステップは重要なアルゴリズムをドングルに搭載することです。これらは専用のクラッカーへのスピード バンプに過ぎないことは理解していますが、市場シェアが拡大するにつれて、スピード バンプは、著作権侵害の痛みがそれほど強く感じられなくなるポイントに到達するのに役立ちます (願っています)。

ありがとう!

4

5 に答える 5

8

アセンブリの厳密な名前付けは、マシンを制御している攻撃者から保護するようには設計されていません。遅延署名に関する msdn エントリから:

次の例では、myAssembly.dll というアセンブリの検証をオフにします。

sn –Vr myAssembly.dll

厳密な名前の設計目標は、名前の一意性を提供し、攻撃者から (発行者ではなく)ユーザーを保護することです。ユーザーがすべての厳密な名前チェックを無効にしたい場合、または署名を削除して独自のキーでアセンブリに再署名したい場合、技術的に言えば、それを妨げるものは何もありません。

暗号化されたファイルからアセンブリをロードするだけでは、解読コード自体を暗号化できないため、リバース エンジニアリングの標的になりやすいため、あまり役に立ちません。

他のポスターで述べたように、探しているのは難読化です。おそらく、既にそのようなツールをお持ちでしょう。Visual Studio (少なくとも 2005 および 2008) には、PreEmptive Solutions のDotfuscator のコミュニティ エディションが付属しています。Microsoft には、独自の " Software Licensing and Protection Services " 製品もあります。

ただし、難読化にはいくつかの技術的な欠点があります。

  • ビルド プロセスが複雑になる場合があります。後者はデバッグできないため、難読化されていないビルドと難読化されたビルドが必要です。
  • ユーザーが「詳細をコピー」をクリックして、スタック トレースなどの技術情報をメールで送信できる、予期しない例外のエラー ダイアログを表示したいです。ただし、難読化を使用すると、 Exception.StackTraceから有用なものを取得することを忘れることができます。
  • コードでリフレクションを使用している場合、内部型とメンバー名が保持されないため、難読化されたビルドで問題が発生する可能性が高くなります。
于 2009-01-30T02:55:14.597 に答える
4

アセンブリに署名すると、署名を変更せずにアセンブリを変更することは不可能になり、したがってその参照が変更されます。この結果、アセンブリへの (厳密な名前の) 参照は、変更されたバージョンに対して解決されません。そして、それはばかげたオッズに対して保証されています.

ただし、それで問題は解決しません。とにかく、完全ではありません。たとえば、ドングル呼び出しを厳密な名前のアセンブリにパックし、アプリケーションからそのアセンブリを参照すると、変更されていないアセンブリがなければアプリケーションは機能しないため、ドングルがないと機能しません。ただし、アプリケーション自体は変更できます。

利用可能な別の手段は、難読化です。Visual Studio に同梱されている難読化ツールの無料バージョンがあり、これを産業用の強度にアップグレードできます。難読化は、コードの動作を変更せずにコードを理解できないものにするため、リバース エンジニアリングに対する真の障壁となります。

解決策は、これら 2 つの手法の巧妙な組み合わせにあると思います。

そして、それは私の知識の範囲です、私は恐れています. 他の誰かがここで実際の答えを提供する必要があります (そして、おそらく私のものよりも恥ずかしいほどずっと短いです ;-)

于 2009-01-30T02:04:33.233 に答える
2

彼らが実行可能ファイルにパッチを当てている場合、厳密な名前は役に立ちません。ただし、参照する dll が正しいバージョンであり、改ざんされていないことを確認するのに役立ちます。難読化のためにサラマンダーまたはプリエンプティブ
を チェックすることができます 。Assembly Lockbox 、CodeVeil、またはThinAppで 確認できる暗号化

于 2009-01-30T02:06:16.770 に答える
1

ドングルを使用してプログラムを暗号化したい場合は、次の記事が役に立つかもしれません: http://www.gironsec.com/blog/2012/02/dongles-how-do-they-work/

以下は、その記事からの適切な引用です。

ドングルを実装するには 2 つの方法があります。正しい方法と間違った方法。正しい方法は、プログラムを暗号化し、暗号化キーをドングルに保存し、デバイスが接続されているかどうかに応じて実行時に復号化することです。

于 2013-03-25T04:19:42.853 に答える