2010-05-04 8 views
13

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

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

Спасибо

ответ

3

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

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

+0

Ссылка не работает. Может кто-нибудь это исправить? –

+0

Ссылка не работает, пожалуйста, обновите ее –

+0

проверьте эту ссылку http://www.codeproject.com/Articles/15496/Application-Trial-Maker. это может помочь – ELITE

7

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

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

+5

И если пользователь устанавливает свои системные часы назад, он обманывает вашу систему. –

+2

@Paul, это правда, но это просто, и по крайней мере я не буду его поддерживать. –

+1

спасибо, это хорошая идея, но как @Paul сказал, что системные часы могут быть изменены :( – Eddinho

4

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

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

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

+1

+1 для «проблемы бизнес-модели». –

+0

@Pyrolistical: можете ли вы объяснить мне, как Blizzard сталкивается с проблемой бизнес-модели, видно, что они в основном сделанный * Battle.net * неуязвимый? В этот день и мир вездесущего подключения к Интернету медленно люди начнут понимать, что при достаточном вычислении на серверной стороне программное обеспечение может стать практически невозможным для взлома (не переписывая их). – SyntaxT3rr0r

+4

@WizardOfOdds : Если бы все использовали ваш метод, все потребление энергии в мире увеличилось бы на 200%, и каждая интернет-линия была бы затоплена 24/7. Пожалуйста, это не решение «все-все». Что, если вы продаете продукт, который не имеет ничего общего с Интернетом? _Why_ я бы хотел купить что-то, что нужно, чтобы связаться с Интернетом, чтобы работать правильно, даже если в домене продукта есть _nothi ng_ делать с интернетом ... Сначала я подумал: «Почему это связано с Интернетом, чтобы делать вычисления, троянец?». –

4

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

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

+0

@Paul Tomblin: ах ах, я такой парень;) * * Место для хранения файла, который пользователь не может найти, находится на стороне сервера, на вашем собственном сервере :) Затем ваш сотрудник и я должен повторно использовать/повторно использовать/копировать «чистую установку», скажем, Windows, подделку MAC-адреса и повторной установки новой копии копии «30 дней» :). Обратите внимание, что я только понимаю это, (см. мой ответ), чтобы лучше защитить наше программное обеспечение :) – SyntaxT3rr0r

+0

@Paul is totaly true – Eddinho

+0

Если вы сохраните дату в MySQL, у вас нет шансов на этот трюк. –

3

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

3

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

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

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

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

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

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

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

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

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

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

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

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

+0

Пожалуйста, для любви к Богу, если вы используете этот метод, в цифровой форме подпишите все данные, полученные с сервера. В противном случае вы просто делаете клиент уязвимым для своей собственной прибыли, и когда какой-то хакер подвергает это, он заставит вас выглядеть _really_, _really_, bad. –

+3

Что произойдет, если (действительно, когда) ваша компания выходит из бизнеса? –

+1

@Kevin Brock: довольно просто: вы выпускаете исходный код для серверной части (или просто делаете одну окончательную сборку, в которой вы не ставите защиту от копирования и освобождаете ее как бесплатное обновление). Примечание: btw есть компании в бизнесе с десятилетий, которые всегда продавали программное обеспечение с супер-ограничительной защитой от копирования (например, аппаратными ключами) в некоторых конкретных доменах. Несколько компаний - 150 лет кстати;) – SyntaxT3rr0r

9

Вот идея:

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

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

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

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

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

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

+0

@Jon очень интересная идея спасибо – Eddinho

2

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

2

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

4

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

Что делать, если они не фиксируют дату на своем компьютере? и в итоге вы даете им больше проб или меньше? или даже хуже: что, если они это понимают и ручно меняют дату, чтобы они никогда не могли использовать настоящую версию. –