Как создать пробную версию Java-программы

Я кодирую программное обеспечение на Java, и я почти закончил, я хотел бы знать, как мы можем создать пробную версию, которая работает, например, в течение 30 дней, потому что я отправлю ее в некоторые компании.

так как сделать это как shareware или trialware, также можно заблокировать доступ к .class в файле jar?

Спасибо

Ответ 1

Там есть продукт под названием Rampart, который позволяет вам создавать пробную версию для вашего Java-приложения. Это занимает всего пару минут, и это работает очень хорошо.

Вы можете найти его на http://Rampartlicensing.com

Ответ 2

Вот идея:

  • Создайте базу данных (такую ​​как база данных SQL Server), которая общедоступна в Интернете. Он сохранит список лицензионных ключей "пробной версии". Вы можете использовать одну и ту же систему для лицензионных ключей полной версии при покупке вашего продукта.

  • Когда ваше программное обеспечение Java запускается впервые, это приведет к созданию пробной лицензии, которая будет сохранена в базе данных

  • Программное обеспечение Java проверяет действительную лицензию при каждом запуске. Дата создания лицензии хранится в базе данных, поэтому не имеет значения, на что установлены клиентские часы.

  • Программное обеспечение перестает работать, когда срок действия лицензии истек.

Стандартное программное обеспечение Windows может искать идентификатор CPU и использовать его как часть лицензии, чтобы каждый компьютер мог запускать только пробное программное обеспечение. Кто-нибудь знает, есть ли какой-нибудь "JVM-идентификатор", который может быть использован для этой цели?

Может быть, есть уже бесплатный или открытый код с лицензией?

Ответ 3

Почему бы не просто записать код срока действия в пробную программу, чтобы вам не пришлось ее поддерживать? Вы можете поместить это в 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 распространяет бета-версию своего крупномасштабного программного обеспечения. Они просто дают ему срок годности.

Если вы говорите о предотвращении обратной инженерии или изменении кода, вы не можете. Вы могли бы запутать скомпилированную программу, но это не остановит людей, которые в любом случае будут переделывать ваш код.

Ответ 4

Я бы просто сделал что-то действительно простое и достаточно сложное, чтобы не программисты не смогли понять это.

Мне бы хотелось написать в файл число миллисекунд, когда программа была впервые установлена ​​в 64-разрядной версии в двоичном файле. И проверите свой основной класс и соблюдайте лимит времени. Да, люди могут менять свои часы, чтобы обойти это, но на самом деле вы не хотите продавать эти люди в любом случае. Также убедитесь, что текущее время строго в течение 30 дней после установки. Большинство пользователей просто устанавливают свои часы на один год, и это работает с большинством программ, потому что они просто делали простой, чем проверка разницы. Вы также должны проверить, что разница в количестве дней от текущего до установки также больше 0.

Если вам кажется, что вам нужно больше защиты, чем это, тогда у вас проблема бизнес-модели больше, чем программная. В принципе невозможно сделать его недоступным, тем более что вы можете просто извлечь и дизассемблировать файлы классов.

Ответ 5

Проблема с попыткой ограничить даты заключается в том, что наивное решение просто проверять дату легко обмануть, если человек возвращает свои системные часы. Я работал с парнем, который держал виртуальную коробку VMWare только для запуска программного обеспечения с ограниченным временем. Лучшим подходом было бы записать время последнего запуска, и если время когда-либо доходит до этого времени, вы знаете, что часы были установлены назад, и вы можете прервать. Проблема заключается в том, как зашифровать этот файл где-нибудь, где пользователь не может его переписать. Опять же, в среде VMWare или VirtualBox пользователь может просто вернуться к предыдущему снимку.

Другими словами, вы можете ограничить некоторых людей некоторое время, но не всех людей все время.

Ответ 6

Я проверяю дату, с которой атомный сервер времени отправит меня в начале кода. Затем я сравню эту дату с определенной датой. Если атомное время меньше, то 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();
        }
    }
}

Ответ 7

Что касается файлов классов, вы не можете блокировать их доступ, но вы можете сделать их декомпилированную версию полностью нечитаемой obfuscation.

Ответ 8

Я работаю над коммерческим программным обеспечением Java и защищен.

Является ли обязательным подключение к Интернету в вашем случае? В нашем случае наше программное обеспечение имеет смысл только в том случае, если есть подключение к Интернету, и поэтому мы можем сделать обратное проектирование невозможным, просто следуя этой мантре:

сделать достаточную часть вычислений на стороне сервера

Там ничего против этого злоумышленник может сделать помимо:

  • перепишите часть вашего программного обеспечения, которое происходит на стороне сервера.

  • пиратский сервер

Если наши потенциальные пользователи недовольны тем фактом, что наше программное обеспечение предусматривает постоянное подключение к Интернету, они могут либо купить, либо пиратствовать с одним из наших конкурентов.

Подумайте об этом так: никому не удавалось играть на Blizzard battle.net с использованием поддельных/сгенерированных лицензионных ключей.

Конечно, пират может попытаться подделать всю битву .net, но тогда пиратская версия не позволит людям играть, скажем, в реальной экономике WoW и не конкурировать на реальной лестнице Starcraft и т.д.

Почему никто не смог это сделать: , потому что Blizzard сделала достаточную часть вычисления на стороне сервера.

Достаточная часть вычислений, происходящих на стороне сервера, эффективно означает: "хорошие пиратские игры".

Чем больше мы переходим в постоянно связанный мир, тем легче защищать приложения от пиратства. То же самое для контента (DRM), к лучшему или к худшему.

Ответ 9

У меня был успех с использованием True License в прошлом. Он поддерживает пробный период. Используйте его в сочетании с инструментом обфускации, например ProGuard, и это, безусловно, делает его нетривиальным для взлома.

Ответ 10

Я рекомендую функциональные ограничения. У меня есть небольшая версия для заметок. Программа работает полностью, но вы можете создавать только 10 заметок в незарегистрированном режиме. Поэтому я стараюсь быть приятным для пользователя. Никаких ограничений по датам, скринсейверов или каких-либо других зло. Только небольшая строка состояния, в которой есть текст ограничения и кнопка регистрации.