web-dev-qa-db-ja.com

Javaソフトウェアのライセンスを作成するには?

私は非常に大きな問題を抱えています。それが「私のソフトウェアのライセンスを作成する方法」です。

OK、これが私のライセンスキーであると考えてください-12345YW

ユーザーがこのライセンスキーを入力すると、ソフトウェアでユーザーがソフトウェアを使用できるようになります。ユーザーがライセンスキーを入力したら、ソフトウェアは有効なキーを入力したことを覚えておく必要がありますよね(次回以降、ライセンスダイアログを表示する必要がないため)。ユーザーがライセンスを入力したことを記憶するソフトウェア? Windowsベースのアプリでは、ほとんどの場合、Windowsレジストリへのエントリを入力します。同じことはできますか? (では、UbuntuとMacはどうですか?)

ソフトウェアがそれを読み取り、ライセンスが入力されているかどうかを確認できるように、.txtファイルを書き込むことを考えました。しかし、それは私が考えることができる最も安全なシステムです。

したがって、上記のライセンスキーを入力した場合、ソフトウェアにそれを記憶させるにはどうすればよいですか?コード例も教えていただければ本当にうれしいです(つまり、Windowsレジストリの場合など、レジストリを編集する方法がわかりません)。私を助けてください...

21
Lemon Juice

ライセンスソフトウェアはまだ解決された問題ではありません-または、少なくとも、ユーザーに不便をかけずに、そして主要なインフラストラクチャに投資することなく、安全にそうすることは解決されません。

ライセンスステータスを保存する場所/メカニズムはほとんど関係ありません-レジストリはテキストファイルほど安全ではありません-コンテンツへのアクセスに数秒かかり、レジストリのリモートバックウォーターのエントリを「非表示」にします手伝うことはあまりありません。

おそらく、あなたのソフトウェアは何らかの永続性を持っています(データベース?ファイルシステム?)。同じ永続メカニズムを使用して、登録ステータスを保存できます。

もちろん、ソフトウェアが読み取り/書き込みできるものはすべて、ソフトウェアへの不正アクセスを試みようとしているユーザーがアクセスできます。したがって、レコードを暗号化できます。次に、その暗号化メカニズムのキーを管理する問題があります。現時点では、これに対する堅牢なソリューションはありません。

したがって、インターネット上に「ライセンスサーバー」があるかもしれません。ソフトウェアがマシンの一意の識別子 (MACアドレス など)を読み取り、それをライセンスサーバーに送信し、サーバーにライセンスステータスを返させる場合があります。繰り返しになりますが、これは回避するのが非常に簡単です。ソフトウェアを使用するには、ユーザーがオンラインになっている必要があります。

ソフトウェアがリモートでユーザーにとって魅力的なものである場合、ハッカーは数日でライセンスキーの保護を破り、詳細な手順をインターネットに投稿します。 Apple Iphone/Ipad上のソフトウェアを保護するために非常に長い時間をかけてください。それでも脱獄アプリはそれらをアンロックします。

私の意見では、あなたのソフトウェアが数千万ドルの収益に値しない限り、あなたはユーザーにとって可能な限り簡単にする必要があり、セキュリティの側面についてあまり心配しないでください-既成のものを使用してください(@buntingが推奨するように) 、またはテキストファイルで解決します。

具体的には、私は:

  • アプリケーションの起動時に有効なライセンスファイルの存在を確認する
  • ライセンスファイルが存在しない場合は、ユーザーにライセンスキーの入力を依頼します
  • そのキーをライセンスキーと比較します
  • 「有効な」ファイルをファイルシステムのアプリディレクトリに書き込みます。または、既存の構成ファイルを変更します。

これは簡単に破ることができます。あなたは一歩先に進むことができます。

まず、Javaアプリは簡単に逆コンパイルでき、攻撃者は「ライセンス」定数を簡単に読み取ることができます。これを困難にするために難読化ツールを使用する必要があります(不可能ではありません))。

次に、ローカルライセンスデータを暗号化できます。これも完全にカジュアルなハッカーにとっては難しくなるでしょう。暗号化スキームにローカルデータを含めることができるため、ハッカーは、有効なライセンスキーを使用してアプリケーションを再配布することはできません(たとえば、ライセンスキーにマシンのMACアドレスを掛けることにより)。

どちらの場合も、ライセンスをアプリに「ハードワイヤリング」しています。ハッカーがアプリケーションのライセンスキーを投稿する掲示板があり、新しいキーを使用してアプリの新しいバージョンを発行する以外は応答できません。

24
Neville Kuyt

見落とされている可能性があることに驚いています。信頼できないクライアントからデータを保護する最も簡単な方法は、クライアントにデータを絶対に公開させないことです。これを可能にするいくつかのアプリケーションアーキテクチャ:Webアプリケーション、リモートサーバーへのRPCを実行するデスクトップクライアント、またはリモートサーバー上の仮想デスクトップに接続する高性能シンクライアント。 Webアプリは、インストール、データのバックアップ、メンテナンスの面でメリットがあるため、すでに人気があります。

したがって、悪意のあるクライアントに会社のセキュリティポリシーを適用するソフトウェアを作成して、名誉あるComp Sci Ph.Dを取得しようとするのではなく...

(非常にありそうもない)

...知的財産を信頼されたサーバーに置くだけで、クライアントにはユーザーインターフェイス(および非機密ロジック)のみが提供されます。この戦略には独自の落とし穴があります。ただし、その実績はクライアントのコピー防止機能よりもはるかに優れています。

注:おまけとして、クライアントのソフトウェアを「管理」することで、安定した収益を得ることができます。

7
Nick P