Russian Qt Forum

Qt => Общие вопросы => Тема начата: Sergey_N от Январь 14, 2009, 17:08



Название: создание триальной проги
Отправлено: Sergey_N от Январь 14, 2009, 17:08
Добрый день

Мне нужно сделать свою QT прогу, работающую под Mac OS, триальной.
Чтобы она работала только 15 дней после первого запуска.

Я хочу использовать такой алгоритм:

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

2. Скрипт на веб-сервере ищет в базе данных полученный ID. Если находит - дата берется из базы. Если нет - вставляет в базу строку с ID и текущей датой и использует текущую дату.

3. Скрипт на веб-сервере возвращает программе зашифрованную дату первого использования. ID используется как пароль.

4. Программа проверяет, прошло ли 15 дней с полученной даты. Если прошло - отказывается работать.
Программа кеширует результат, полученный от веб сервера, используя QSettings, так что нужно только одно обращение  в самом начале использования программы.

У меня 2 вопроса:

1. Как создать уникальный идентификатор для машины с Mac OS? Так чтобы он был действительно уникальным и в то же время не менялся время от времени. Я думал о QNetworkInterface::hardwareAddress(). Но как быть если на машине несколько интерфейсов? Какой из них использовать? Может быть есть более подходящие уникальные параметры?

2. Достаточно ли хорош описанный мной алгоритм? Может быть это можно сделать как-то по-другому и более надежно?

--
Сергей


Название: Re: создание триальной проги
Отправлено: ритт от Январь 14, 2009, 17:20
сопутствующие вопросы:

* если выход в инет отсутствует или запрещён?
* если нет ни одной сетевой карты?
* если после получения от сервера данных найти кэшированное значение и удалить его/изменить?
* если после первого соединения hardwareAddress был изменён (изменилась железка, адрес изменили вручную и т.п.)?


Название: Re: создание триальной проги
Отправлено: Frol от Январь 14, 2009, 21:54
* если выкорчевать хрень которая отказывается работать?? то даже после синхнронизации всё будет плавно...


Название: Re: создание триальной проги
Отправлено: Detonator от Январь 15, 2009, 00:36
Проще раздавать демонстрационный регкод, работающий до какого-то числа. Каждый день на сайте, или где он пользователями будет браться, его обновлять. Или вообще генерить и раздавать персонально.
При проверке на компе брать информацию о текущей дате не напрямую, а пособирать последние даты изменения системных файлов и т.д. чтобы исключить когда пользователь влоб меняет дату назад.


Название: Re: создание триальной проги
Отправлено: BaltikS от Январь 15, 2009, 07:44
Если поможет, то для генерации уникального имени можно использовать класс QUuid и использовать его так:
Код:
QUuid::createUuid().toString() 
... Но в то же время он зависит от времени...


Название: Re: создание триальной проги
Отправлено: alexandr_ps от Январь 15, 2009, 12:11
Идея с QUuid кажется оптимальной, ведь генерирует он очень большое число и вероятность того, что 2 таких числа совпадут практически нереальна.
А что значит зависит от времени? Ну да при генерации идентификатора используется текущее время как одна из составляющих. И в чем проблема, не вкурил что-то?


Название: Re: создание триальной проги
Отправлено: BaltikS от Январь 15, 2009, 12:19
Цитировать
был действительно уникальным и в то же время не менялся время от времени


Название: Re: создание триальной проги
Отправлено: Sergey_N от Январь 15, 2009, 13:51
Идея с QUuid кажется оптимальной, ведь генерирует он очень большое число и вероятность того, что 2 таких числа совпадут практически нереальна.
А что значит зависит от времени? Ну да при генерации идентификатора используется текущее время как одна из составляющих. И в чем проблема, не вкурил что-то?

Идентификатор нужен вот для чего: Допустим пользователь поставил программу, получил триальный код на сайте. Причем неважно, программа сделала это сама; пользователь получил, заполнив форму на сайте; или я отправил ему по email. Потом он снес прогу, после того, как она отработала 15 дней и вычистил с компа все "начки", в которых хранилась информация о триальности. Ставит прогу снова. Запрашивает новый триальный код. Я или скрипт на сайте должны понять, что прога уже активизировалась на этом компьютере. И именно для этого нужен уникальный код, однозначно идентифицирующий машину. Как пример такого кода - серийный номер Bios, Mac адреса сетевых интерфейсов...

Поэтому QUuid совсем не подходит. Так как после сноса проги и чистки заначек он будет сгенерен новый. И прога опять может быть активирована.

У меня сейчас осталось 3 вопроса по этой теме:
1. Если использовать MAC-адреса сетевых интерфейсов в качестве уникального ключа, как быть если они меняются количеством - например при установке VMWare их количество удваивается? Можно ли считать что комп тот же самый, если из 5 интерфейсов только у одного такой же мак-адрес, как и у другого компа?
2. По каким файлам определять текущую дату? Ведь я не могу просканировать всю файловую систему. Это займет очень много времени.
3. Как в Mac OS получить серийный номер BIOS? - его можно было бы использовать как еще одну составляющую ключа.


Название: Re: создание триальной проги
Отправлено: Sergey_N от Январь 15, 2009, 14:02
* если выход в инет отсутствует или запрещён?
* если нет ни одной сетевой карты?
Прогой нельзя будет пользоваться. Поскольку активация происходит через интернет, сетевой интерфейс нужен однозначно.
Как вариант можно использовать серийный номер BIOS и offline-активацию по email/телефону. Но это сути не меняет. Для начала все равно нужно реализовать online вариант.

* если после получения от сервера данных найти кэшированное значение и удалить его/изменить?
Прога каждый раз будет брать серийный номер компа и смотреть, этот ли серийный номер в кешированных данных. К тому же они будут храниться в зашифрованном виде. Так что исправить корректно их довольно проблематично. А просто сломав, прога откажется работать, потребовав заново получить триальный код с сайта.

* если после первого соединения hardwareAddress был изменён (изменилась железка, адрес изменили вручную и т.п.)?
Вот этот вопрос для меня неразрешим. Но работают же как-то фирменные системы активации той же Windows, Adobe...
Может кто знает как они работают?



Название: Re: создание триальной проги
Отправлено: kirill от Январь 15, 2009, 14:28
Привязка к оборудованию не есть гуд на мой взгляд. Как показывает практика оборудование меняется чаще, чем того ожидает программист )))
Может лучше посадить в недра системы неудаляемого жучка?


Название: Re: создание триальной проги
Отправлено: xintrea от Январь 15, 2009, 14:33
* если выход в инет отсутствует или запрещён?
* если нет ни одной сетевой карты?
Прогой нельзя будет пользоваться. Поскольку активация происходит через интернет, сетевой интерфейс нужен однозначно.

И конечно, твоя сетевая часть будет работать через PROXY всяких видов (HTTP,HTTPS,SOKS4,SOKS5) ? Или обязательно нужно будет иметь прямой доступ в инет?


Название: Re: создание триальной проги
Отправлено: SABROG от Январь 15, 2009, 14:36
Если наличие интернета так критично, то почему бы не сделать проверку времени на основе NTP протокола (UDP). При запуске программа ломится в инет (http://www.ntp.org/) и спрашивает который час.

Защиту от "дурака" сделаешь, но обычно люди, которые пользуются *nix'ами не настолько тупы. И твою прогу пропатчат и эмулятор сделают и драйвера напишут.

Урезай функционал лучше. Чего не скачалось, того не крякнеш. Правда стоит одному купить и выложить для всех как все твои усилия сведутся на нет.


Название: Re: создание триальной проги
Отправлено: Sergey_N от Январь 15, 2009, 16:45
И конечно, твоя сетевая часть будет работать через PROXY всяких видов (HTTP,HTTPS,SOKS4,SOKS5) ? Или обязательно нужно будет иметь прямой доступ в инет?

Вот с этим я не совсем знаком. Я пользуюсь просто методом QHttp::request, где проставляю адрес сервера и переменные запроса POST. Чтобы работало PROXY всяких видов (HTTP,HTTPS,SOKS4,SOKS5) нужны еще какие-то телодвижения?


Название: Re: создание триальной проги
Отправлено: niXman от Январь 15, 2009, 18:51
обычно люди, которые пользуются *nix'ами не настолько тупы. И твою прогу пропатчат и эмулятор сделают и драйвера напишут.
Да да да...