我正在Java上编码一个软件,我几乎完成了,我想知道如何创建一个可以使用30天的试用版,因为我将其发送给某些公司

那么,如何使其像共享软件或试用器一样,也可以阻止对JAR文件中的.LASS访问?

谢谢

有帮助吗?

解决方案

有一个名为Rampart的产品,可让您为Java应用程序制作试用版。它只需要几分钟,而且效果很好。

你可以在 http://rampartlicensing.com

其他提示

这是一个想法:

  1. 创建网络上公开可用的数据库(例如SQL Server数据库)。它将保留“试用版”许可键的列表。购买产品时,您可以将同一系统用于全面许可键。

  2. 当您的Java软件首次运行时,它将导致创建试用许可证,该许可将存储在数据库中

  3. Java软件每次运行时都会检查有效的许可证。创建许可证的日期存储在数据库中,因此设置了客户时钟的设置都无关紧要。

  4. 许可证过期时,该软件停止运行

标准Windows软件可以查找CPU ID并将其用作许可证的一部分,因此每台计算机只能运行一次试用软件。 有人知道是否有某种可以用于此目的的“ 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分发其大型Beta软件的方式。他们只是给它一个到期日期。

如果您谈论的是防止反向工程或修改代码,则不能。您可以混淆编译的程序,但这不会阻止那些会反向工程代码的人。

我只会做一些非常简单的事情,只是足够努力,以至于非程序员无法弄清楚。

当该程序首次以64位长度为二进制的文件到文件时,我会喜欢写入文件的毫秒数。并进行主班检查并执行时间限制。是的,人们可以更改时钟来解决这个问题,但实际上您不想向这些人出售。还要确保当前时间严格在安装后的30天内。大多数用户只会将时钟设置为一年,并且可以与大多数程序一起使用,因为他们的作用比差异检查少。您还应该检查从当前到安装的天数的差异也大于0。

如果您觉得自己需要更多的保护,那么您比软件更需要业务模型问题。基本上不可能使其不可用,尤其是因为您可以提取和拆卸类文件。

试图限制日期的问题在于,如果人们设置了系统时钟,则很容易检查日期的幼稚解决方案。我与一个保留了一个仅用于运行时间有限软件的VMware虚拟盒的家伙。一种更好的方法是记录最后一次运行的时间,如果时间到那时的时间到了,您就会知道时钟已经放回原处,并且可以中止。问题是弄清楚如何将该文件存放在用户找不到覆盖的地方。同样,在VMware或VirtualBox环境中,用户可以回到较早的快照。

换句话说,您可以在某些时候限制一些人,但并非所有人都可以限制所有人。

我使用商业Java软件,并受到保护。

在您的情况下,要求互联网连接可以接受吗?就我们而言,只有在互联网连接时,我们的软件才有意义,因此我们可以通过简单地遵循此咒语来使反向工程变得不可能:

使计算的足够一部分发生在服务器端

没有 反对这一点,攻击者还可以做:

  • 重写服务器端正在发生的软件的一部分

  • 盗用服务器

如果我们的潜在用户对我们的软件要求始终在互联网连接的事实不满意,则可以购买或盗版我们竞争对手的劣等产品之一。

这样想:没有人使用假/生成的许可键在暴风雪的战斗.NET上玩耍。

当然,海盗可以试图伪造整个战斗。

为什么没有人能够做到这一点: 因为暴风雪使计算足够的一部分发生在服务器端.

服务器端上发生的计算足够的一部分有效地意味着: “海盗良好的游戏”.

我们越多地转向一个始终建立联系的世界,保护应用程序免受盗版的影响就越容易。内容(DRM)相同,以免变得更好或更糟。

我从Atomic Time Server开始在代码开始时会从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个注释。因此,我尝试对用户友善。没有日期的limition,nag屏幕或其他邪恶。只有带有重度文本和注册按钮的小状态行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top