質問

Java でソフトウェアをコーディングしていて、ほぼ完成しました。いくつかの企業に送る予定なので、たとえば 30 日間使用できる試用版を作成するにはどうすればよいかを知りたいです。

では、シェアウェアやトライアルウェアのようにするにはどうすればよいでしょうか。また、jar ファイル内の .class へのアクセスをブロックできますか?

ありがとう

役に立ちましたか?

解決

Rampartという製品があり、Javaアプリ用の試用版を作成できます。数分しかかかりませんが、かなりうまく機能します。

で見つけることができます http://rampartlicensing.com

他のヒント

これがアイデアです:

  1. Webで公開されているデータベース(SQL Serverデータベースなど)を作成します。 「トライアルバージョン」ライセンスキーのリストを保持します。製品が購入されたときに、フルバージョンライセンスキーに同じシステムを使用できます。

  2. Javaソフトウェアが最初に実行されると、データベースに保存されるトライアルライセンスが作成されます。

  3. Javaソフトウェアは、実行されるたびに有効なライセンスをチェックします。ライセンスが作成された日付はデータベースに保存されているため、クライアントのクロックが設定されているものは関係ありません。

  4. ライセンスの有効期限が切れると、ソフトウェアは機能を停止します

標準のWindowsソフトウェアは、CPU IDを検索し、ライセンスの一部として使用することで、各コンピューターがトライアルソフトウェアを1回しか実行できません。 この目的のために使用できるある種の「JVM ID」があるかどうかは誰もが知っていますか?

たぶん、すでにそこに無料またはオープンソースのライセンス関連コードがありますか?

トライアルプログラムへの有効期限をハードコードするだけで、それをサポートし続ける必要がないのはなぜですか?これをmain()に置くことができます。

// Die after October 1, 2010
Calendar expireDate = Calendar.getInstance();
// January is 0 (y, m, d)
expireDate.set(2010, 9, 1);
// Get current date and compare
if (Calendar.getInstance().after(expireDate)) {
  // Die
  System.exit(0);
}

これが、Microsoftが大規模なベータソフトウェアを配布する方法です。彼らはそれに有効期限を与えるだけです。

リバースエンジニアリングの防止やコードの変更について話している場合は、できません。コンパイルされたプログラムを難読化することはできますが、これはとにかくコードをリバースエンジニアリングする人々を止めません。

非プログラマーがそれを理解することができないように、私は本当にシンプルで、十分に一生懸命何かをするでしょう。

プログラムがファイルにバイナリの64ビットの長さで最初にインストールされたときに、ミリ秒数をファイルに書き込むようなものです。メインクラスにチェックして時間制限を強制します。はい、人々は時計を変更してこれを回避することができますが、本当にそれらの人々に売りたくありません。また、現在の時刻がインストールから30日以内に厳密になっていることを確認してください。ほとんどのユーザーは時計を1年に戻すだけで、差チェックよりも単純な少ないことをしたため、ほとんどのプログラムで動作します。また、現在からインストールまでの日数の差も0を超えることを確認する必要があります。

それよりも多くの保護が必要だと思う場合は、ソフトウェアの問題よりもビジネスモデルの問題があります。特にクラスファイルを抽出して分解することができるため、それをハッキング不可能にすることは基本的に不可能です。

日付を制限しようとする問題は、人がシステムクロックを設定した場合、日付をチェックするだけの素朴な解決策が簡単にだまされることです。私は、実行時間限定ソフトウェアのためだけにVMware仮想ボックスを保持している男と仕事をしました。より良いアプローチは、それが最後に実行された時間の時間を記録することであり、その時より前に時間がかかる場合、あなたは時計が後退し、あなたが中止できることを知っています。問題は、ユーザーがそれを上書きしない場所にそのファイルをどこかに置く方法を考え出すことです。繰り返しますが、VMwareまたはVirtualBox環境では、ユーザーは以前のスナップショットに戻るだけです。

言い換えれば、あなたはいつかすべての人々を制限することができますが、常にすべての人々ではありません。

私は商用Javaソフトウェアに取り組んでおり、保護されています。

あなたの場合、インターネット接続を義務付けることは受け入れられますか?私たちの場合、私たちのソフトウェアは、インターネット接続がある場合にのみ理にかなっているため、このマントラに従うだけでリバースエンジニアリングを不可能にすることができます。

計算の十分な部分をサーバー側で発生させる

あります なし これに対して、攻撃者は以下にできます。

  • サーバー側で起こっているソフトウェアの部分を書き直します

  • サーバーの海賊

当社の潜在的なユーザーが、ソフトウェアが常にインターネット接続を義務付けているという事実に満足していない場合、競合他社の劣等製品の1つを購入または海賊版にすることができます。

このように考えてみてください。偽物/生成されたライセンスキーを使用して、BlizzardのBattle.Netでプレイすることに成功したことはありません。

確かに、海賊はbattle.net全体を偽造しようとすることができますが、海賊版版は、人々が本物のすごい経済にプレーすることも、本物のスタークラフトのはしごなどで競争することもできません。

なぜ誰もそれをしなかったのですか: ブリザードが計算の十分な部分を作ったので、サーバー側で起こる.

サーバー側で起こっている計算の十分な部分は、効果的に次のことを意味します。 「グッドゲームパイレーツ」.

常に接続された世界に移動すればするほど、アプリを著作権侵害から保護しやすくなります。コンテンツ(DRM)についても、良くも悪くも。

Atomic Timeサーバーがコードの最初に送信するものから日付を確認します。次に、その日付を特定の日付と比較します。原子時間が短い場合は、system.exit(0)。

public static GregorianCalendar getAtomicTime() throws IOException {
    BufferedReader in = null;

    try {
        URLConnection conn = new URL("http://64.90.182.55:13").openConnection();
        GregorianCalendar calendar = new GregorianCalendar();
        conn.setConnectTimeout(1000);
        in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String atomicTime;
        while (true) {
            if ((atomicTime = in.readLine()).indexOf("*") > -1) {
                break;
            }
        }
        //System.out.println("DEBUG : " + atomicTime);
        String[] fields = atomicTime.split(" ");

        String[] date = fields[1].split("-");
        calendar.set(Calendar.YEAR, 2000 + Integer.parseInt(date[0]));
        calendar.set(Calendar.MONTH, Integer.parseInt(date[1]) - 1);
        calendar.set(Calendar.DATE, Integer.parseInt(date[2]));

        // deals with the timezone and the daylight-saving-time
        TimeZone tz = TimeZone.getDefault();
        int gmt = (tz.getRawOffset() + tz.getDSTSavings()) / 3600000;
        //System.out.println("DEBUG : " + gmt);

        String[] time = fields[2].split(":");
        calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time[0]) + gmt);
        calendar.set(Calendar.MINUTE, Integer.parseInt(time[1]));
        calendar.set(Calendar.SECOND, Integer.parseInt(time[2]));
        return calendar;
    } catch (IOException e) {
        throw e;
    } finally {
        if (in != null) {
            in.close();
        }
    }
}

クラスファイルに関しては、それらへのアクセスをブロックすることはできませんが、デスコンパイルされたバージョンをまったく読み取れないようにすることができます 難読化.

を使用して成功しました 真のライセンス 過去に。お試し期間のサポートもございます。のような難読化ツールと組み合わせて使用​​します。 プロガード そして確かに、クラックするのは簡単ではありません。

機能的な制限をお勧めします。投稿プログラムがほとんどありません。プログラムは完全に機能しますが、未登録モードで10ノートのみを作成できます。だから私はユーザーに親切になろうとしています。日付の制限、ナグスクリーン、またはその他の悪の悪はありません。制限テキストと登録ボタンを持つ小さなステータスラインのみ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top