私は、保護されたJava ソフトウェアを販売する会社で働いています。
ユーザー認証のスキームについてはコメントしませんが、オンライン ライセンス チェックについてはコメントできます。
「2日間動作」することさえしないでください:それが私がほとんどのソフトウェアを海賊版にする方法です...仮想マシンは「時間に戻って」設定され、外部でファイアウォールされているため、もう「電話をかける」ことはありません(つまり、許可のみ一度サーバーに接続して試用キーを取得する必要があります)、常にソフトウェアを新しくインストールしてビンゴになった時点から再イメージ化されるため、30 日間の試用版 (または 2 日間の試用版) は生涯試用版になっています。なぜ私はこれを行うのですか?もちろん、アプリをより適切に保護する方法を学ぶためです ;) (わかりました、わかりました、私も楽しみのためにやっています)
私たちが商用 Java ソフトウェアで行っていることは、起動するたびにライセンスをチェックすることです。
私たちは何百人もの顧客を抱えていますが、誰もそれについて愚痴をこぼしたことはありません. 一度もありません。実行ごとに一意のクラスを生成します。これは実行ごとに異なります。これは、クライアント側でその起動に固有のものと、サーバー側で一度生成されたものの両方に依存します。
それに加えて、アプリを起動するたびにサーバーに接続することは、分析を収集するための優れた方法です。試用版のダウンロード率、試用版あたりの nb 平均起動数などです。そして、各 Web ページに Urchin/Google JavaScript トラッカーを配置するよりも厄介なことではありません。厄介です。
ソフトウェアがオンライン ライセンス チェックを実行することを人々に明確にするだけです。「オンライン ライセンス検証: OK/失敗」という巨大なチェックボックスがオンまたはオフになっています。以上です。人々は小切手があることを知っています。気に入らない場合は、劣った競合他社の製品を使用し、生活は良好です。
人々は有線の世界で生活することに慣れています。
インターネット接続がダウンしているため、GMail にアクセスできない頻度はどのくらいですか? インターネット接続がダウンしているため、FaceBook や SO にアクセスできない頻度はどのくらいですか?
ポイントは、サーバー側に応じてできるだけ多くの計算を行うことです。
- ライセンスチェック
- ユーザー設定を保存する
- アプリによって生成されたデータのバックアップ
- 等
誰も文句を言いません。ユーザーの 0.1% が不満を言うことになりますが、いずれにせよ、これらのユーザーを望んでいません。彼らは、他のことについて不平を言い、アプリについてオンラインで否定的なフィードバックを投稿するユーザーです。実際にソフトウェアを使用してもらうよりも、ソフトウェアをまったく使用せず、常時接続のインターネット接続が必要であるという事実について不平を言うべきです (これはターゲット層の 99.99% であり、したがって彼らは不平を気にしません)。アプリに関連する他のことについて不平を言う。
逆コンパイルに関しては、有効なバイトコードを生成するコード フロー難読化ツールを使用しているが、.java ファイルから生成できない場合を除き、.class は通常、逆コンパイルして .java に戻すことができます (したがって、有効な .java ファイルを取得することはできません)。 )。
文字列の難読化ツールは、把握を困難にするのに役立ちます。
ソースコードの難読化ツールは、理解を困難にするのに役立ちます。
無料の Proguard のようなバイトコード難読化ツールを使用すると、把握するのが難しくなります (そして、より高速なコードが生成されます。特にモバイルの世界では顕著です)。
Windows/Linux のみを出荷する場合は、Excelsior Jet のような Java からネイティブへのコンバーターを使用できます (無料ではなく、スタートアップには少し高価ですが、.java ファイルを見つけることができないネイティブ コードを生成します)。
おもしろいことに、あなたのオンライン サーバーをいじろうとする人がいます... 約 30 人のベータ テスターの時点で、オンライン サーバーを海賊版にしようとしている人がいました (トライアルの一部であることがわかっています)。