ソフトウェアライセンスキーを生成および検証する方法


236

私は現在、C#で開発された製品の開発に携わっており、無料でダウンロードしてインストールできますが、非常に限定されたバージョンです。すべての機能にアクセスするには、ユーザーはライセンス料を支払い、キーを受け取る必要があります。次に、そのキーをアプリケーションに入力して、完全版を「ロック解除」します。

そのようなライセンスキーを使用するのは普通のことなので、私は思っています:

  1. それは通常どのように解決されますか?
  2. どうすればキーを生成でき、アプリケーションでどのように検証できますか?
  3. キーをインターネットで公開して、ライセンスを支払っていない他の人(基本的に「自分」ではないキー)が使用するのを避けるにはどうすればよいですか。

どういうわけか、キーをアプリケーションのバージョンに関連付けて、機能バージョンの新しいキーに課金できるようにする必要があると思います。

このシナリオで他に考慮すべきことはありますか?

回答:


126

警告:ユーザーが海賊行為をするのを防ぐことはできませんが、正直なユーザーが正しいことを簡単に行えるようにするだけです。

ユーザーごとに特別なビルドを行いたくないとすると、次のようになります。

  • 製品の秘密鍵を自分で生成する
  • ユーザーの名前を取る
  • ユーザー名と秘密鍵を連結し、(たとえば)SHA1でハッシュする
  • SHA1ハッシュを英数字の文字列として解凍します。個人ユーザーの「プロダクトキー」です
  • プログラム内で、同じハッシュを実行し、プロダクトキーと比較します。等しい場合、OK。

しかし、私は繰り返します:これは海賊行為を防止しません


私は最近、このアプローチが暗号的に非常に健全ではないことを読みました。しかし、このソリューションはすでに弱いため(ソフトウェア自体がどこかに秘密鍵を含める必要があるため)、この発見がソリューションを無効にすることはないと思います。

しかし、私がこれを本当に言及すべきだと思っただけです。これから何か他のものを引き出すつもりなら、用心してください。


13
プログラムに秘密鍵が含まれている場合(上記の手順で暗示されているように)、解読するのは簡単です
Steven A. Lowe

2
より明確になるように編集。基本的なものを過度に強調することはできません;-)
Steven A. Lowe

23
コードに秘密情報を埋め込まないようにするために、プロダクトキーの生成とデコードに非対称暗号化方式(RSAなど)を使用します。
Amir Moghimi 2012年

6
誰かがあなたのコードをハッキングして(おそらくアセンブリレベルで)秘密鍵を見つけたときには、おそらくチェックを完全にバイパスできるレベルにあると思います。ローカルでプログラムを実行している優れたハッカーを生き残ることができるほど安全な登録方法はないと思います。元のコメントで述べたように、ファイルを単にコピーするよりも、一歩難しいものは何でもすべてです。最近の多くのゲームは、コピー防止をあきらめて、単にゲームコンテンツをオンラインにするだけです。その場合、コードはハッカーの手に届きません。
JamieB

1
ライセンスキーに制限を含めることは一般的ですか?たとえば、時間制限、同時ユーザー数、インストールするモジュールなど。
Carlo

97

ライセンスキーを生成する方法はたくさんありますが、本当に安全な方法はほとんどありません。企業にとって、ライセンスキーは実際の現金とほぼ同じ価値があるため、残念です。

理想的には、ライセンスキーに次のプロパティが必要です。

  1. たとえ誰かがあなたの製品を完全にリバースエンジニアリングしたとしても、あなたの会社だけがあなたの製品のライセンスキーを生成することができます(それは起こります、私は経験から話します)。ライセンスの制御に真剣に取り組んでいる場合、アルゴリズムを難読化したり、ソフトウェア内の暗号化キーを非表示にしたりすることは、本当に問題外です。製品が成功した場合、誰かがリリースから数日でキージェネレーターを作成します。

  2. ライセンスキーは1台のコンピューターでのみ使用できる必要があります(または、少なくともこれを非常に厳密に制御できる必要があります)

  3. ライセンスキーは短く、簡単に入力したり、電話で指示したりする必要があります。キーに「l」または「1」が含まれているかどうかがわからないため、すべての顧客がテクニカルサポートに電話をかけることは望ましくありません。サポート部門はこれを感謝し、この領域でのコストが削減されます。

では、これらの課題をどのように解決しますか?

  1. 答えは簡単ですが、技術的に困難です。公開鍵暗号を使用したデジタル署名です。ライセンスキーは、実際には、会社の秘密キーで署名された、いくつかの有用なデータを含む署名された「ドキュメント」である必要があります。署名はライセンスキーの一部である必要があります。製品は、対応する公開キーでライセンスキーを検証する必要があります。これにより、誰かが製品のロジックに完全にアクセスできる場合でも、秘密キーがないため、ライセンスキーを生成できません。ライセンスキーは次のようになります。BASE32(CONCAT(DATA、PRIVATE_KEY_ENCRYPTED(HASH(DATA))))ここでの最大の課題は、従来の公開鍵アルゴリズムの署名サイズが大きいことです。RSA512には1024ビットの署名があります。ライセンスキーに数百の文字を含める必要はありません。最も強力なアプローチの1つは、楕円曲線暗号を使用することです(既存の特許を回避するために慎重に実装します)。同じ強度の場合、ECCキーはRSAキーより6倍短いです。Schnorrデジタル署名アルゴリズムなどのアルゴリズムを使用して、署名のサイズをさらに減らすことができます(2008年に期限切れの特許-良い:))

  2. これは、製品のライセンス認証によって実現できます(Windowsが良い例です)。基本的に、有効なライセンスキーをお持ちのお客様は、コンピューターのハードウェアIDを署名済みデータとして埋め込んだ署名付きメッセージである「アクティベーションデータ」を生成する必要があります。これは通常インターネット経由で行われますが、ONCEのみです。製品はライセンスキーとコンピューターのハードウェアIDをアクティベーションサーバーに送信し、アクティベーションサーバーは署名付きメッセージを返信します(これは短く簡単に指示することもできます)電話)。その瞬間から、製品は起動時にライセンスキーをチェックしませんが、検証するためにコンピューターが同じである必要があるアクティベーションデータをチェックします(それ以外の場合、DATAは異なり、デジタル署名は検証されません)。

  3. まあ、「1」、「l」、「0」、「o」などの冗長な文字をキーから削除するだけです。ライセンスキー文字列を文字のグループに分割します。


8
チェックを完全にスキップするように、コードを追加/削除するソフトウェアを編集するだけではいいのではないでしょうか?
Pacerier 2014年

番号1への回答では、本質的にオンラインのアクティベーション/アクティベーション解除サービスが必要ですか?
Dan W

2
この答えが他のハッシーなものよりどれほど優れているかを指摘したいと思います。
Erik Aronesty

1
@Pacerierライセンスキーがソフトウェア会社を保護する多くのものがあります。exeの変更はそれらの1つではありません。
Erik Aronesty

1
非対称暗号化の秘密/公開鍵を使用しても、ソフトウェアに同梱されている公開鍵を別の公開鍵に置き換えるだけで、対応する秘密鍵を使用して偽のライセンスに署名することで、偽のライセンスを生成することが可能です。これが、公開鍵をIDにバインドする信頼できる認証局BTWが必要である理由です。したがって、これはジャンプするためのもう1つのフープを追加する可能性がありますが、それ自体では#1を保証しません。
Saeb Amini、

76

簡単な答え-使用するスキームに関係なく、解読される可能性があります。

ハッカーは関係なくクラックするため、ハッカーを防ぐためのシステムで正直な顧客を罰しないでください。

メールなどに関連付けられた単純なハッシュコードで十分でしょう。ユーザーがハードウェアを再インストールまたは更新する必要がある場合、ハードウェアベースのIDは常に問題になります。

問題の良いスレッド:http : //discuss.joelonsoftware.com/default.asp?biz.5.82298.34


2
あなたが実際にあなたの製品を購入しているユーザーを怒らせたくありません!(m $、アップルなどに注意してください)
Jason

2
MS、Appleなどは大きく、他の場所に行くのが難しい、または人々を強制するために使用できる大きな市場の影を持つコア製品を提供するため、それを回避できます。小さな開発者はできません。
スクーナー

1
パブ/秘密鍵署名スキームを「クラック」して、クラックされたソフトウェアではなく、発行元サイトからダウンロードした署名済みコードを実行したいユーザーに新しい有効なキーを生成することはできません。一方、ハッシュ/対称スキームを解読して、無効なものと区別がつかない新しい有効なライセンスキーを生成できます。大きな違い。
Erik Aronesty

リンク切れ....
stigzler

56

キーを生成するときは、ハッシュを計算する文字列にバージョンとビルド番号を連結することを忘れないでください。そうすれば、リリースしたすべてのものをロック解除する単一のキーはなくなります。

astalavista.box.skにいくつかのキーまたはパッチが浮かんでいるのを見つけたら、誰かがクラックするのに十分な人気のあるものを作成することに成功したことがわかります。喜んで!


8
「バージョンとビルド番号をハッシュを計算する文字列に連結することを忘れないでください」-しかし、ユーザーがマイナーパッチリリースに更新すると、キーが壊れてしまいますか?
thomthom 2015

1
@thomthomそれでは、最大バージョンをキーに関連付けるのはどうですか?バージョンのアイデア自体は説得力があり、セキュリティが強化されます
Marvin Thobejane、2015年

@MarvinThobejaneを使用して最大verを関連付け、許可された最大verに署名し、コードにバージョンを少し反復させることができます。ただし、> = opsはシグで許可されていません。
Erik Aronesty

22

すでに述べられていることに加えて...

中間言語の問題のため、.NETアプリケーションの使用は本質的に破壊可能です。.NETコードを単純に逆アセンブルすると、製品が誰にでも開かれます。その時点でライセンスコードを簡単にバイパスできます。

ハードウェア値を使用してキーを作成することもできなくなりました。仮想マシンにより、「ライセンスされた」マシンのイメージを作成し、選択した任意のプラットフォームで実行できるようになりました。

それが高価なソフトウェアであれば、他の解決策があります。そうでない場合は、カジュアルなハッカーにとって十分に困難にするだけです。そして、最終的には無許可のコピーが出てくるという事実を受け入れてください。

製品が複雑な場合、固有のサポート問題により、ある程度の保護が行われます。


9
+1は、仮想マシンによるハードウェア値の脆弱性を防ぎます。
ルーベンスマリウッゾ2012年

3
これが、.NETとPE署名用のAuthenticodeの厳密な名前付けの目的です。誰かがライブラリを逆コンパイル、変更、再構築した場合、ライブラリは署名されず、アプリケーションは実行されません。.NET仮想マシンはそれを許可しません。
スティーブンタニー2015

2
署名は、実行するプログラムの出所を検証するためのものです。ユーザーがオリジンが変更およびクラックされていることを知っているためにユーザーがオリジンを気にしない場合、クラッカーは署名を取り除くか、独自の署名で署名することさえあります。署名は、信頼できるアセンブリと信頼できないアセンブリの混合を停止します。
jesusduarte 2016

モバイルアプリは、高価なソフトウェアの陪審員のハードウェアドングルとして使用できます。アプリを使用して支払い、アプリの安全な要素に署名キーを埋め込むだけです。次に、デスクトップ+アプリを使用してアクティブ化できます...他のデスクトップを非アクティブ化します。アプリやオンライン準同型計算サービスに重要なセクションコード領域を配置すると、簡単な逆コンパイルを防ぐことができます。
Erik Aronesty

12

ライセンスキーの生成に使用するC#/ .NETエンジンは、オープンソースとして維持されるようになりました。

https://github.com/appsoftware/.NET-Licence-Key-Generator

これは、「部分的なキー検証」システムに基づいています。つまり、キーの生成に使用するキーのサブセットのみを配布物にコンパイルする必要があります。キーは自分で作成するため、ライセンスの実装はソフトウェアに固有です。

上記のように、コードを逆コンパイルできる場合、ほとんどのライセンスシステムを回避するのは比較的簡単です。


この製品を使用するためのチュートリアルを喜んで行いますか?私は彼らのウィキが少し足りないことに気づきました。
Anthony Ruffino 2014

プロジェクトは、GitHubでオープンソース化されています(回答がリンクで編集されている場合)。
gb2d 2015年

10

私はCryptolensソフトウェアライセンスプラットフォームの開発者の1人であり、14歳からライセンスシステムに取り組んできました。この回答では、長年の経験に基づいたいくつかのヒントを紹介しました。

これを解決する最良の方法は、アプリケーションの各インスタンスがライセンスキーを確認するために呼び出すライセンスキーサーバーを設定することです。

ライセンスキーサーバーの利点

ライセンスキーサーバーの利点は次のとおりです。

  1. ライセンスキーはいつでも更新またはブロックでき、すぐに有効になります。
  2. 各ライセンスキーは特定の数のマシンにロックできます(これにより、ユーザーが他のユーザーが使用できるようにライセンスキーをオンラインで公開するのを防ぐことができます)。

考慮事項

オンラインでライセンスを確認すると、アプリケーションの各インスタンスをより詳細に制御できますが、インターネット接続は常に存在するわけではないため(特に大企業を対象としている場合)、ライセンスキーの確認を実行する別の方法が必要です。

解決策は、RSAやECCなどの公開鍵暗号システムを使用して、サーバーからのライセンスキー応答に常に署名することです(組み込みシステムで実行する場合は、おそらくより適切です)。アプリケーションには、ライセンスキーの応答を確認するための公開鍵のみが必要です。

したがって、インターネット接続がない場合は、代わりに以前のライセンスキー応答を使用できます。日付マシンIDの両方を応答に格納し、古すぎないこと(たとえば、ユーザーが最大30日間オフラインになることを許可していることなど)と、ライセンスキーの応答が正しいデバイスに属していることを確認してください。

なお、これはまだ行われなければならない(あなたがインターネットに接続している場合でも、あなたはいつもそれがサーバーに残っているので、それが変更されていないことを保証するために、)、ライセンスキーレスポンスの証明書を確認する必要があります場合でもにあなたのAPIライセンスキーサーバーはhttpsを使用)

シークレットアルゴリズムの保護

ほとんどの.NETアプリケーションは非常に簡単にリバースエンジニアリングすることができます(ILコードを取得するためにMicrosoftから提供されるdiassemblerと、C#などのソースコードを取得できる商用製品もあります)。もちろん、コードはいつでも難読化できますが、100%安全ではありません。

ほとんどの場合、ソフトウェアライセンスソリューションの目的は、正直な人々が正直であることを支援することです(つまり、支払いを喜んで行う正直なユーザーは、試用期間が終了した後に支払いを忘れないでください)。

しかし、決して公に漏らしたくないコード(たとえば、株価を予測するアルゴリズムなど)がまだ残っている場合があります。この場合、実行する唯一の方法は、メソッドを実行するたびにアプリケーションが呼び出すAPIエンドポイントを作成することです。インターネット接続が必要ですが、クライアントマシンによってシークレットコードが実行されることはありません。

実装

すべてを自分で実装したくない場合は、このチュートリアルCryptolensの一部)を参照することをお勧めします


保存されたライセンスキーを古すぎないように制限することについての1つの質問:PCがインターネットに接続されていない可能性があるため、日付と時刻を常に変更して、同じ有効な日付に保つことができますか?
アミールマハディナッシリ

Windowsでループバックホストを定義することにより、ユーザーはオンラインライセンスサーバーをバイパスできませんか?多くのアプリケーションがそのように海賊版であるのを見てきました。ResharperとMatlabは私が覚えているものです。
Amir Mahdi Nassiri

1
@AmirMahdiNassiri質問1の場合:PCが永続的にオフラインの場合、リアルタイムクロック(RTC)ドングルを信頼できる時間のソースとして使用できます。質問2の場合:応答はベンダーの秘密鍵で署名されている(そしてアプリケーション内の公開鍵で検証されている)ため、攻撃者は、執筆時点では秘密鍵を知らずにファイルに再署名する必要があります。 2048ビットRSAキーでは使用できません。
アルテム

7

私は過去にCrypkeyを使用しました。それは利用可能な多くの1つです。

ソフトウェアを保護できるのは、ライセンススキームのある時点までです。


6

どんなに凝りたいのかわからない

しかし、.netはハードドライブのシリアル番号にアクセスできると思います。

あなたはプログラムにそれと何かの要素(nicのユーザー名とMACアドレスのような)を送信させることができます

これに基づいてコードを計算し、キーをメールで送り返します。

彼らは鍵を持った後、彼らがマシンを切り替えないようにします。


4
そして、彼らが他の犯罪の中で死んだHDを置き換えないようにして、欲求不満につながるのです。残念ながら簡単な答えはありません。信頼と基本的なライセンスのメカニズムとのバランスをとる必要があります。
スクーナー

hdのシリアル番号を使用する製品を使用してソフトウェアエンジニアとして長年働いていたため、更新方法を知っている人には完全に安全ではありませんでした。
おでん2016年

私はこの数字を他のもの(macアドレス、FQDN)で使用することを暗示していました。重要なのは、最初からソフトウェアをリバースエンジニアリングしてチェックを削除することよりも、これらすべてのデータのなりすましを少し難しくすることです。これは常にオプションであるためです。
Crash893

4

あなたが求めたすべてを行う唯一の方法は、インターネットアクセスとサーバーによる検証を要求することです。アプリケーションはキーを使用してサーバーにサインインする必要があり、次にIPアドレスなどのセッションの詳細を保存する必要があります。これにより、複数の異なるマシンでキーが使用されなくなります。これは通常、アプリケーションのユーザーにはあまり人気がなく、非常に高価で複雑なアプリケーションでない限り、それだけの価値はありません。

アプリケーションのライセンスキーを用意し、キーが適切かどうかをクライアント側で確認することもできますが、このキーを他のユーザーに配布するのは簡単で、逆コンパイラを使用して新しいキーを生成できます。


5
私はインターネットベースのライセンススキームを使用する会社で働いていました。プログラムを開始するたびに、検証のためにオンラインに移行したとき、ライセンスソリューションのインフラストラクチャと開発者は、著作権侵害から失ったよりも(ニッチな製品であった)より多くの$$を費やしたと思います。
Jason

3
さらに、技術サポートのコストは莫大でした。多くの場合、何回もユーザーは合法的に別のコンピューターを使用してソフトウェアを実行しようとしましたが、ハッシュが異なっていたため、膨大な量のテクニカルサポートにつながりました。要するに、スクーナーが言ったこと-正直なユーザーを罰しないでください。
Jason

1
毎回起動時に検証を必要とするため、あなたの会社は少し熱狂的だったようです。
jugg1es 2013年

@ジェイソン、まあ、彼らは製品の価格を上げる必要があります。
Pacerier 2014年

1
@Pacerier:間違った答え。
軌道上の軽さのレース

4

サーバーのデータベースに保存されているライセンスを参照するライセンスキーを必要とする会社のソフトウェア(C#.net)にインターネットベースのワンタイムアクティベーションを実装しました。ソフトウェアはサーバーにキーをヒットし、ライセンス情報が与えられます。ライセンス情報は、クライアントコンピューターのいくつかの変数(CPUIDと頻繁に変更されないその他のものの組み合わせ)から生成されたRSAキーを使用してローカルで暗号化され、次に保存されますレジストリ。

サーバー側のコーディングが必要ですが、私たちにとっては非常にうまく機能しており、ブラウザーベースのソフトウェアに拡張したときにも同じシステムを使用できました。また、ソフトウェアが誰に、どこで、いつ使用されているかについて、販売担当者に素晴らしい情報を提供します。ローカルでのみ処理されるすべてのライセンスシステムは、特に.NETでのリフレクションで、悪用に対して完全に脆弱です。しかし、他の誰もが言ったように、完全に安全なシステムはありません。

私の意見では、Webベースのライセンスを使用していない場合、ソフトウェアを保護することにはまったく意味がありません。DRMが引き起こす可能性のある頭痛により、DRMを実際に支払ったユーザーが苦しむことは公平ではありません。


1
しかし、Webライセンスの主な問題は、ライセンスサービスがDDoS攻撃の主要なターゲットになることです。これにより、サービスが麻痺するか、クラウドコストが増大します。
afk5min 2014

4
それは...それはDDoS攻撃に対して脆弱だから、ウェブサイトを持つにはポイントがありませんと言ってようなものだ
jugg1es

@ jugg1esコメントのどこにも彼は「意味がない」と言っていませんでした。彼はそれが考慮されるべき脆弱性であるという事実を単に指摘しました。
Dan Bechard、2014

また、チェックはクライアントで引き続き削除できます。チェックなし、Webベースのライセンス...
azarai

1
「必要な情報」を含む実際のアプリケーションコードを意味しますか?アプリを実行するために必要なコードは?それ以外の場合は、1のコードでisLicensedチェックメソッドを呼び出すことになります。
azarai 14

4

ライセンス生成に必要な重要な情報をソースコードに含める必要がないため、ここでは適切なアプローチは公開鍵暗号ベースのライセンスシステムだけであると強く信じています。

これまで、TreekのLicensing Libraryを何度も使用しました。これは、この要件を満たし、非常に優れた価格を提供するためです。エンドユーザーとそれ自体に同じライセンス保護を使用しており、今まで誰もそれを解読していませんでした。また、著作権侵害やクラッキングを回避するための良いヒントをWebサイトで見つけることができます。


公開キー暗号化では、オンラインのアクティベーションサービスを使用する必要がありますか?つまり、それがソースコードに含まれていない場合(実行可能ファイルも含まれていると思います)、他にどこにあるのでしょうか。
Dan W

いいえ、オンラインアクティベーションサービスを使用する必要はありません。完全にオフラインでライセンスファイルを生成できます。
panpernicek 2015年

キーは、コードへの公開キーのみを配置するという事実にあります。これは、ライセンス生成には使用できません。確認のためにのみ。
panpernicek 2015年

3

他のいくつかの人が述べたように、私はデフォルトで顧客に対して敵対的であるという大きな反対者です—ライセンス業界が悪名高いものです。したがって、私はあなたの問題に対する優れたソリューションを拡張して、優れた顧客UXも提供します

最初に、お客様がソフトウェアの「限定」バージョンを使用しており、顧客を追加機能の「アップグレード」に変換するために使用していると述べました。したがって、探しているのは製品の機能ライセンスです。たとえば、顧客は機能Xまたは機能Yのライセンスを購入できます。

私は、構築されたのkeygenを念頭に置いてライセンスこのタイプの。Keygenは、ユーザーアカウント、ライセンスを管理し、マシンの使用状況/関連付けを追跡できるライセンスREST APIです。

私が行うことは、2つのライセンスタイプ(Keygen内のポリシー)をセットアップすることです。1つは制限付きの無料バージョンの基本ポリシーで、もう1つは有料バージョンのポリシーです。

支払いに何を使用しているのかはわかりませんが、Stripe(最近の標準)でwebhookを提供しているものを使用しているとします。Keygenにはwebhookもあります(使用するかどうかに関係なく、これはすべて適用可能です)。Keygenを統合して、両側のWebhookを使用して支払いプロバイダーと対話できます(customer.created->顧客の基本ライセンスを作成、license.created->顧客に新しいライセンスを請求)と考えてください。

したがって、Webhookを利用することで、新規顧客のライセンス作成を自動化できます。では、アプリケーション自体の中でのライセンス検証についてはどうでしょうか?これはさまざまな方法で行うことができますが、最も一般的な方法は、顧客が入力フィールドに長いライセンスキーを入力するように要求することです。これは、アプリケーションでライセンス検証を処理するためのひどい方法だと思います。

なぜだと思いますか?まず最初に、マシンの消費を目的とした退屈な長いライセンスキーの入力を顧客に要求し、次に、この退屈な長いライセンスキーの追跡を要求する必要があります

さて、代替案は何ですか?最善の代替策は、すべての顧客が慣れていることを行うことだと思います。顧客がメール/パスワードを使用して製品のアカウントを作成できるようにします。次に、すべてのライセンスとそのマシンをそのアカウントに関連付けることができます。したがって、ライセンスキーを入力する代わりに、資格情報を使用してログインすることができます。

それはあなたにどのような利点をもたらしますか?1つ目は、ライセンスキーを追跡する必要性を排除することです。すべてがユーザーアカウント内で舞台裏で処理され、最も重要なのは、顧客にセルフサービスライセンスとマシンを提供できるようになるためです。活性化!つまり、すべてのライセンスとマシンはユーザーアカウントに関連付けられているので、認識されていないマシンでアプリケーションを起動したときに、ライセンスを購入するように求めることができます。

次に、ライセンスの検証について説明します。顧客がメール/パスワードを使用してアプリケーションにログインするときはいつでも、所有しているライセンスをユーザーアカウントに照会して、feature-Xまたはfeature-Yを使用できるかどうかを判断できます。アプリケーションがセルフサービスになっているため、顧客がアプリケーション内から直接追加機能を購入できるようにすることができます。

そのため、ライセンスシステムに大量の自動化を導入し、個々の機能(つまり、制限付きバージョンと完全バージョン)のライセンスを取得できます。お客様に素晴らしい UXを提供し、最大の理由の1つを軽減しましたサポートリクエスト:ライセンスキーの回復。

とにかく、これは長くなりましたが、うまくいけば誰かに役立つでしょう!


どのようなエンタープライズ開発状況においても、DLLがこのようにライセンスされているとは想像できません。たとえば、自動化されたビルドと展開のシナリオを考えてください。または、開発者のマシンをセットアップするために通常必要な多くのステップにこのステップを追加するだけです。私にとって、実用的にするには、ライセンスキーを事前に発行する必要があり、個々のマシンに基づく必要はありません
DvS

2

ソフトウェアの著作権侵害を完全に防止することはできません。偶発的な違法コピーを防ぐことができます。それが、すべてのライセンスソリューションが行っていることです。

ノード(マシン)ロックライセンスは、ライセンスキーの再利用を防ぐ場合に最適です。私は自分のソフトウェアにCryptlexを約1年使用しています。それは持っている無料の計画をあなたが自由のためにそれを使用することができますあまりにも多くの顧客を期待していないので、もし、また。


2

Quantum-Key.Netなどの無料のサードパーティソリューションを使用してこれを処理できます。無料で、PayPalを介して作成したウェブ販売ページを通じて支払いを処理し、メールでキーを発行し、特定のコンピューターへのキーの使用をロックします。海賊行為を防ぎます。

また、コードを難読化/暗号化するように注意する必要があります。そうしないと、De4dotや.NetReflectorなどのソフトウェアを使用して簡単にリバースエンジニアリングできます。優れた無料のコード難読化ツールは、ConfuserExであり、高速で簡単に使用でき、高価な代替品よりも効果的です。

De4Dotと.NetReflectorを使用して完成したソフトウェアを実行し、リバースエンジニアリングを行って、クラッカーが同じことを行った場合に何が表示されるかを確認し、重要なコードが公開されたり変装されていないことを確認する必要があります。

あなたのソフトウェアはまだクラッキング可能ですが、カジュアルなクラッカーにとってはそれを延期するのに十分であるかもしれません、そしてこれらの簡単なステップはあなたのコードが抽出され再利用されることも防ぎます。

https://quantum-key.net

ConfuserExの使用方法

https://github.com/0xd4d/de4dot

https://www.red-gate.com/dynamic/products/dotnet-development/reflector/download

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.