0

多くの最新のソフトウェア会社と同様に、私の会社ではプロダクトキーを使用して、ユーザーがソフトウェアに対してどのような契約を結んでいるかを確認しています。プロダクトキーを解析するときに、誰かが持っている製品の種類(試用版/フルバージョンなど)を確認できます。ユーザーがコードライブラリの無料バージョンから有料バージョンにアップグレードできるようにし、プロダクトキーが有効かどうかを確認する試用版が必要です。

試用版には、フルバージョンのすべてのコードが含まれているわけではありません。プロダクトキーはアルゴリズムを使用してチェックされるため(Webサービスなどは使用されません)、非常に高速に実行できます。

ここには2つのサブ問題があります。

  • 試用版からフルバージョンへの移行。MSIアップグレードでこれを解決することを考えていますが、これをどのように達成できるかわかりません。(WIXを使用)
  • 試用版かどうかを確認するための追加コードを含む試用版ビルドを作成します。これは#ifステートメントを使用して可能であることは知っていますが、DLLを変更することも可能かどうか疑問に思っています。より正確には、試用版をチェックするすべての型に静的コンストラクターを追加します。

私の質問は次のとおりです。これはこれを行う正しい方法ですか?もしそうなら、この種の機能を実現するための標準的な方法(またはツール)はありますか?そうでない場合、これを行うための最良の方法は何ですか?

アップデート

これまでのすべての素晴らしい答えに感謝します。答えから判断して、コンテキストの詳細を説明するときが来たと思います。幸い、私たちは多かれ少なかれ正しい方向に進んでいるようです。

私たちの製品では、プライベート(インターネットに接続されていない)VLANにインストールするのが理にかなっているので、プロダクトキーを使用することができます...そして私は本当に「電話のアクティベーション」のようなトラブルに行きたくありませんマイクロソフトはそうしました:-)。したがって、提案されているように、私は現在、データのビットを暗号化するプロダクトキーを使用しています。このキーは、特定の製品に対してキーが有効かどうかを確認するために復号化されます。確かに、私はソフトウェアの著作権侵害の被害者になる可能性がありますが、今のところそれを「マーケティング手段」と見なすと思います。

回答の1つで示唆されているように、私は現在、複数のMSIファイルを生成しています。1つはx64用で、もう1つはx86用です。そして、試用版、フルバージョン、ブループリントバージョン用に1つ。これにより、合計6つのMSIファイル(pfff)が作成されます。プロセスの難読化中に、強力な命名とコード署名が行われます。ブループリントバージョンには、完全なソースコードが含まれています。

私はトライアルビルドについてかなり心配しています。もちろん、あちこちにチェックを追加することはできますが、すべてのクラスに自動的にチェックを入れたいと思います...すべてのCSファイルをコピーし、静的なc'torを追加/変更することを考えました(f.ex. cecilまたはnrefactoryを使用する..またはいくつかの正規表現を使用する...)。これを望んでいるのは私だけではないように思えます。もっと良い方法が必要ですよね?

さらに、MSIホイールを再発明しているように見えるので、更新やアップグレードについては本当に考えたくありません。試用版からフルバージョンへの移行は、MSIアップグレードのように思えます。フルバージョンからブループリントバージョンへの移行は、MSIアップグレードのように感じられます。しかし、通常のアップグレードと組み合わせると、これが可能かどうか心配ですか?

4

4 に答える 4

1

Rhinoライセンスをお試しください(オープンソース)

コンピューターSID、HDDシリアル番号、CPU識別子などのマシン固有の識別子を使用して、生成されたライセンスを個人のマシンに関連付けます。フロートライセンスを使用し、実行時にサーバーでライセンスが利用可能かどうかを確認します。Rhino Licensingは、これを実現するために必要なインフラストラクチャを提供します。Rhino Licensingは、ライセンスファイルにカスタムデータを含めることもできるため、顧客情報をライセンスファイルに簡単に保存できます。これらすべてを言っても、アプリケーションにライセンススキームがあるからといって、完全に安全であるとは限りません。ハッカーやクラッカーは、アプリケーションコードをリバースエンジニアリングして、ライセンスがどのように行われるかを確認しようとします。そのため、他のセキュリティ上の懸念事項を調べて、悪意のあるユーザーにとってこれを困難にするために難読化ツールを使用することをお勧めします。

于 2013-02-04T17:17:12.400 に答える
0

フルバージョンをリリースして、試用版の一部の機能を無効にすることができます。ユーザーがライセンスをアップグレードするとき、何もダウンロードする必要はありません。クラックやkeygenについてはあまり心配しないでください。誰かがあなたのソフトウェアにひびを入れた場合、それはあなたが成功していることを意味し、あなたはすでにたくさんのお金を稼いでいます。

于 2013-02-04T17:21:56.203 に答える
0

アプリケーションでこの問題を解決するために、Guidを使用し、Guidで設定値を選択して、使用しているバージョンを通知しました。その後、システム全体をインストールし、ソフトウェアの起動時にブール値を使用しました。

于 2013-02-04T17:25:05.810 に答える
-1

試用環境と本番環境を混在させると、混乱する可能性があります。可能であれば、それぞれに2つの別々のインストーラーを作成します。

保護を可能な限り強力にするためのいくつかの前提条件があります。

  • 購入できる最高の難読化ツールでコードを難読化します。
  • 有効な署名のチェックをコードのいくつかの重要な場所に広げます。起動時に一度だけチェックしないでください。
  • 非対称暗号化や署名などの.NET暗号化APIについて学ぶ
  • 生成されたプロダクトキーはリバースエンジニアリングされる可能性があることに注意してください。主に、アプリが大量または高価値である場合に懸念されます。

アクティベーションのシナリオ:

インストール時またはインストール後しばらくすると、ユーザーに製品の「アクティブ化」を要求できます。アクティブ化すると、システムを識別するいくつかのコンポーネント(CPU ID、HDD ID、ドメイン名、ユーザー名など)を含むプレーンテキストXMLファイルを生成できます。そのXMLをWebサービスに送信します。

次に、サービスはランダムタグを追加し、データをハッシュして秘密鍵で署名し、署名とランダムタグを返すことができます。

クライアントソフトウェアには、一致する公開鍵が組み込まれており、ランダムタグと署名がローカルに保存されます。

ライセンスファイルが有効かどうかを確認するために、アプリはプレーンテキストデータとランダムタグを一緒にハッシュし、署名がそのハッシュと一致するかどうかを確認します。

これにより、クライアントが実行しているインスタンスが購入されているかどうかを判断するための非常に信頼性の高い方法が提供され、XML自体を変更できないことがほぼ保証されます。

アクティベーションなしのシナリオ:

購入時に、名前、電子メール、電話番号などの顧客データを含むファイルを送信します。ユーザーが自分のライセンスファイルを共有することを躊躇するように、ファイルをある程度個人的なものにします。

ランダムタグを含め、すべてのデータを一緒にハッシュします。ハッシュに署名し、ファイルにも保存します。

ユーザーは、ファイルを所定の場所に保存するか、アプリのテキストボックス内に貼り付ける必要があります。

于 2013-02-04T17:27:56.797 に答える