0

C#でプログラムを開発しています。インターネットに接続して、このコピーが有効かどうかを確認します。

現在、ライセンス キーを送信し、キーが有効な場合は応答 (0 または 1) を取得しています。

問題は、一部のユーザーがパケット キャプチャ ツールを使用してデータを偽装し、それを再生することです。そのため、アプリケーションは非常に簡単にクラックできます。どうすればこれを防ぐことができますか?

これが私が本質的に防ぎたいことです:

  • ネットワーク リプレイ攻撃
  • 認証「エミュレーター」

どのデータが送信されたかを知ることは不可能であるべきです。たぶん、現在の時刻を追加してから、パケットを暗号化する必要がありますか? だからいつも違うの?

注意: アプリケーション自体を変更することで簡単にクラックできるという警告はしないでください。そんなこと知ってる。この質問は、ネットワーク部分のみに関するものです。

4

2 に答える 2

3

SSL または HTTPS を使用する場合、ユーザーがデータ パケットを解読することを心配する必要はありません。ライブラリが既に存在し、実装が簡単なので、これは簡単です。たとえば、C# と II では、証明書をインストールして、いくつかの構成項目を変更するだけです。(コードを少し変更して再コンパイルするかもしれません)。

于 2012-07-11T03:00:51.603 に答える
0

実際にライセンスの乱用を防ぎたいと仮定すると、これを行うためのはるかに優れた方法があります。「家に電話する」アプローチは簡単にできますが、お気付きのように穴だらけです。

免責事項: 私は、これらのライセンス管理とコピー防止の問題を解決するための商用ツールを作成する会社で働いています。さまざまなベンダーから入手可能な他の同様の製品があります。

これは、アプリケーションのセットアップ方法を考えるのと大差ありません。選択肢は、自分で作成するか、既存のサードパーティ ツールセットを購入するかです。一見したところ、独自のものを作成するのは安っぽく見えますが、それはおそらく、堅牢で信頼性の高いものを作成するための真の要件をすべて発見していないためです. サード パーティのツール ベンダーは自社製品に対して料金を請求する必要がありますが、彼らは何年もかけて特定の問題セットに関するすべての問題を発見し、問題を解決してきました。そのため、作業が不要になり、アプリケーションが付加価値を提供できる場所に自由に集中できます。

違いは、設定を間違えるとユーザーがイライラすることです。コピープロテクトを間違えると、製品が海賊版になります。

いずれにせよ、ライセンス検証チェックをバイナリの「どちらかまたは両方」の状態に減らすことは非常に簡単にクラックできます。ネット上でそのチェックを行うと、10 倍簡単になります (記録再生攻撃)。最新のアプローチでは、実行可能ファイルを暗号化し、それを復号化するためのキーにライセンスが含まれています (実際の方法論には、回避することが実質的に不可能なほど複雑な手順が含まれているため、これは単純化されすぎています)。有効なライセンスを持っている場合にのみ、プログラムのロード時に実行可能ファイルを復号化して実行できます。

あなたが説明した方法でそれを行いたい場合は、これを考慮してください: アプリに予測可能な変化する値 (時間などの外部値と組み合わせた乱数のテーブルからのルックアップなど) を使用させて、ある種のハッシュを作成します。 . サーバーに同じコードを実装させます。サーバーはハッシュをアプリに送信し、アプリはそれを独自のハッシュと比較します。それらが一致する場合、アプリの実行が許可されます。そうでない場合は、エラーになります。ハッシュは起動のたびに異なるため、ネットワーク経由でハッシュを記録しても、ユーザーは次回の起動時にハッシュを実行できません。

于 2012-07-11T15:53:57.307 に答える