C#アプリケーションのプロダクトキーを作成するにはどうすればよいですか?
毎年更新する製品(またはライセンス)キーを作成する必要があります。さらに、試用版用に1つ作成する必要があります。
関連:
C#アプリケーションのプロダクトキーを作成するにはどうすればよいですか?
毎年更新する製品(またはライセンス)キーを作成する必要があります。さらに、試用版用に1つ作成する必要があります。
関連:
回答:
アプリケーションに対して認証したいデータを含むレコードを作成するようなことができます。これには、必要なものをすべて含めることができます。たとえば、有効にするプログラム機能、有効期限、ユーザーの名前(ユーザーにバインドする場合)です。次に、固定鍵で暗号化アルゴリズムを使用して暗号化するか、ハッシュします。次に、プログラム内でそれを確認します。(Windowsで)ライセンスファイルを配布する1つの方法は、レジストリを更新するファイルとして提供することです(ユーザーが入力する手間を省きます)。
ただし、誤った安心感に注意してください。遅かれ早かれ、誰かがプログラムにパッチを適用してそのチェックをスキップし、パッチを適用したバージョンを配布します。または、すべてのチェックに合格して配布するキーを作成し、それを配布したり、時計をバックデートしたりします。どのように複雑に計画を立ててもかまいません。これを行うために行うことは、最終的にはあいまいであることによるセキュリティであり、常にこれができる。彼らができない場合でも、ハッキングされたバージョンを配布します。あなたがドングルを提供する場合でも同じことが当てはまります-誰かが望めば、彼らはそれについてもチェックをパッチすることができます。コードへのデジタル署名は役に立ちません。その署名を削除したり、再署名したりする可能性があります。
デバッガーなどでプログラムが実行されないようにする手法を使用すると、問題を少し複雑にすることができますが、これでも完全な証拠にはなりません。したがって、正直なユーザーが支払いを忘れないように十分に困難にする必要があります。また、スキームが有料ユーザーの邪魔にならないように十分に注意してください。有料の顧客が支払ったものを使用できないようにするよりも、一部を切り取ってコピーした方がよいです。
別のオプションは、オンラインチェックを行うことです。ユーザーに一意のIDを提供し、そのIDが持つべき機能をオンラインでチェックして、一定期間キャッシュします。ただし、同じ警告がすべて当てはまります。人々はこのようなものを回避できます。
キーを忘れたユーザーなどに対処するためのサポートコストも考慮してください。
編集:私は単に追加したいので、これにあまり時間をかけないでください。または、どういうわけかあなたの複雑なスキームは異なり、解読不可能だと思います。プログラムが動作するハードウェアとOSを人々が制御する限り、そうなることはありませんし、そうすることもできません。開発者はこれのためにこれまで以上に複雑なスキームを考え出そうとしており、それのために独自のシステムを開発すればそれは彼らだけに知られ、したがって「より安全」になると考えています。しかし、それは実際には永久運動機械を構築しようとするプログラミングと同等です。:-)
誰を信頼しますか?
この領域は、アプリケーションのランタイムセキュリティを管理するためにサードパーティを信頼するには非常に重要であると常に考えてきました。そのコンポーネントが1つのアプリケーションでクラックされると、すべてのアプリケーションでクラックされます。3ds Maxのサードパーティライセンスソリューションを数年前に使用してから、それは5分でDiscreetに起こりました。
真剣に、アルゴリズムを完全に制御するために独自にロールすることを検討してください。その場合は、次のようにキーでコンポーネントを使用することを検討してください。
次に、それらの全体をチェックサムし、解読を困難にするために、必要なすべての(可逆)暗号化を追加します。
試用版のライセンスキーを作成するには、上記の値を「試用版モード」に変換する値を設定するだけです。
そして、これはおそらくあなたのアプリケーション/会社でおそらく最も重要なコードなので、難読化に加えて/難読化の代わりに、ネイティブDLLファイルに復号化ルーチンを置き、単純にP / Invokeすることを検討してください。
私が働いてきたいくつかの会社はこれに対して一般化されたアプローチを採用しており、大きな成功を収めています。または多分製品はクラッキングの価値がなかった;)
Windowsプロダクトキーのように、入力できるキーについて尋ねる場合、それらはいくつかのチェックに基づいています。コピーして貼り付ける必要があるキーについて話している場合、それらはデジタル署名(秘密キーの暗号化)に基づいています。
簡単なプロダクトキーロジックは、プロダクトキーがのような4つの5桁のグループで構成されていると言うことから始めabcde-fghij-kljmo-pqrst
、次に、f + k + pがaに等しくなるように内部関係を指定します。つまり、2の最初の桁を意味します。 、3および4グループは合計でaになります。つまり、8xxxx-2xxxx-4xxxx-2xxxxが有効であり、8xxxx-1xxxx-0xxxx-7xxxxも有効です。もちろん、最初のグループの2桁目が奇数の場合、最後のグループの最後の桁も奇数でなければならないなど、複雑な関係を含む他の関係もあります。この方法では、プロダクトキーのジェネレーターが存在し、プロダクトキーの検証では、すべてのルールに一致するかどうかを確認します。
暗号化は通常、秘密鍵(==デジタル署名)を使用して暗号化され、Base64に変換されたライセンスに関する一連の情報です。公開鍵はアプリケーションとともに配布されます。Base64文字列が到着すると、公開鍵によって検証(==復号化)され、有効であることが判明した場合、製品がアクティブ化されます。
私はかなり異常なことをするだろうと認めなければなりません。
彼らがLicenseCheckを見つけて削除すると、DLLがセグメンテーション違反を開始するときにどのような楽しみが続きます。
マイクロソフトソフトウェアライセンスおよび保護(SLP)サービスのオプションもあります。それについて読んだ後、私は本当にそれが使えることを望みます。
ライセンスに基づいてコードの一部をブロックするというアイデアが本当に気に入っています。ホットなものであり、.NETにとって最も安全です。使わなくても面白い読み物!
Microsoft®ソフトウェアライセンスおよび保護(SLP)サービスは、ソフトウェアアクティベーションサービスであり、独立系ソフトウェアベンダー(ISV)が顧客に柔軟なライセンス条件を採用できるようにします。Microsoft SLP Servicesは独自の保護方法を採用しているため、アプリケーションとライセンス情報を保護し、顧客のコンプライアンスを高めながら、より迅速に市場に参入することができます。
注:これは、機密性の高いコード(貴重なアルゴリズムなど)を含む製品をリリースする唯一の方法です。
プロダクトキーとアクティベーションのためのもう1つの優れた安価なツールは、InstallKeyと呼ばれる製品です。見てくださいwww.lomacons.comを
簡単な方法の1つは、グローバル一意識別子(GUID)を使用することです。GUIDは通常128ビットの値として保存され、通常、などのグループがハイフンで区切られた32桁の16進数として表示され{21EC2020-3AEA-4069-A2DD-08002B30309D}
ます。
C#で次のコードを使用しますSystem.Guid.NewGuid()
。
getKey = System.Guid.NewGuid().ToString().Substring(0, 8).ToUpper(); //Will generate a random 8 digit hexadecimal string.
_key = Convert.ToString(Regex.Replace(getKey, ".{4}", "$0/")); // And use this to separate every four digits with a "/".
お役に立てば幸いです。
トリックは、あなただけが知っているアルゴリズムを持っていることです(反対側でデコードできるように)。
「素数を選び、それに魔法の数を加える」のような単純なものがあります
バイナリデータのセット(一意の識別子、バージョン番号などを含む可能性があります)の非対称暗号化を使用し、暗号化されたデータをキーとして配布するなど、より複雑なオプション。
またに対する応答を読む価値があるかもしれない、この質問にも
いくつかのツールとそれに利用できるAPIがあります。ただし、無料で入手できるとは思いません;)
たとえば、OLicenseスイートがあります:http ://www.olicense.de/index.php?lang=en
LicenseSpotを確認できます。それは提供します:
@frankodwyerの素晴らしい答えに少し触れて、オンラインベースのライセンスについてもう少し詳しく説明します。私は、開発者向けに作成されたライセンスREST API であるKeygenの創設者です。
アプリケーションに2つの「タイプ」のライセンス、つまり「フルバージョン」と「トライアルバージョン」が必要であるとおっしゃっていたので、これを簡略化して、アプリケーションの特定の機能をライセンスする機能ライセンスモデルを使用できます(この場合、 「完全な」機能セットと「試用」機能セットがあります)。
まず、2つのライセンスタイプ(Keygenではポリシーと呼ばれます)を作成し、ユーザーがアカウントを登録するたびに、「トライアル」ライセンスを生成して開始することができます(「トライアル」ライセンスは「トライアル」機能ポリシーを実装します)。 、アプリ内でさまざまなチェックを行うために使用できます。たとえば、ユーザーはTrial-Feature-AおよびTrial-Feature-Bを使用できます。
さらに、ユーザーがアプリを購入するたびに(PayPal、Stripeなどを使用しているかどうかにかかわらず)、「フル」機能ポリシーを実装するライセンスを生成し、それをユーザーのアカウントに関連付けることができます。これで、アプリ内で、ユーザーがPro-Feature-XおよびPro-Feature-Yを実行できる「フル」ライセンスを持っているかどうかを確認できます(などの方法でuser.HasLicenseFor(FEATURE_POLICY_ID)
)。
ユーザーがユーザーアカウントを作成できるようにしたが、それはどういう意味ですか。他のいくつかの回答でこれについて詳しく説明しましたが、ユーザーを認証および識別するための優れた方法であると私が考える理由について簡単に説明します。
あなたがいない場合はもちろん、したいユーザーアカウントを処理するために、あなたがしたい入力ライセンスキーにユーザーを、それは完全に罰金です(とkeygenのの支持体は、同様ということをやって)。私は、ライセンスのその側面を処理する別の方法を提供しており、うまくいけば、顧客に素晴らしいUXを提供できます。
最後に、これらのライセンスを毎年更新することも述べたので、ポリシーに期間を設定して、「フル」ライセンスが1年後に期限切れになり、「トライアル」ライセンスが最後に2週間になるとユーザーが新しい有効期限後のライセンス。
私はさらに掘り下げて、マシンをユーザーとそのようなものに関連付けることに取り掛かることができましたが、私はこの答えを短くして、ユーザーに機能をライセンスするだけに集中しようと思いました。
この回答を確認してください:https : //stackoverflow.com/a/38598174/1275924
ライセンスサーバーとしてCryptolensを使用するのが目的です。以下は、ステップバイステップの例です(C#およびVB.NETの場合)。以下のキー検証用のコードスニペットも添付しました(C#の場合):
var licenseKey = "GEBNC-WZZJD-VJIHG-GCMVD";
var RSAPubKey = "{enter the RSA Public key here}";
var auth = "{access token with permission to access the activate method}";
var result = Key.Activate(token: auth, parameters: new ActivateModel()
{
Key = licenseKey,
ProductId = 3349,
Sign = true,
MachineCode = Helpers.GetMachineCode()
});
if (result == null || result.Result == ResultType.Error ||
!result.LicenseKey.HasValidSignature(RSAPubKey).IsValid())
{
// an error occurred or the key is invalid or it cannot be activated
// (eg. the limit of activated devices was achieved)
Console.WriteLine("The license does not work.");
}
else
{
// everything went fine if we are here!
Console.WriteLine("The license is valid!");
}
Console.ReadLine();