Russian Qt Forum
Ноябрь 24, 2024, 02:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: создание триальной проги  (Прочитано 9152 раз)
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. Достаточно ли хорош описанный мной алгоритм? Может быть это можно сделать как-то по-другому и более надежно?

--
Сергей
Записан
ритт
Гость
« Ответ #1 : Январь 14, 2009, 17:20 »

сопутствующие вопросы:

* если выход в инет отсутствует или запрещён?
* если нет ни одной сетевой карты?
* если после получения от сервера данных найти кэшированное значение и удалить его/изменить?
* если после первого соединения hardwareAddress был изменён (изменилась железка, адрес изменили вручную и т.п.)?
Записан
Frol
Гость
« Ответ #2 : Январь 14, 2009, 21:54 »

* если выкорчевать хрень которая отказывается работать?? то даже после синхнронизации всё будет плавно...
Записан
Detonator
Гость
« Ответ #3 : Январь 15, 2009, 00:36 »

Проще раздавать демонстрационный регкод, работающий до какого-то числа. Каждый день на сайте, или где он пользователями будет браться, его обновлять. Или вообще генерить и раздавать персонально.
При проверке на компе брать информацию о текущей дате не напрямую, а пособирать последние даты изменения системных файлов и т.д. чтобы исключить когда пользователь влоб меняет дату назад.
Записан
BaltikS
Гость
« Ответ #4 : Январь 15, 2009, 07:44 »

Если поможет, то для генерации уникального имени можно использовать класс QUuid и использовать его так:
Код:
QUuid::createUuid().toString() 
... Но в то же время он зависит от времени...
« Последнее редактирование: Январь 15, 2009, 09:58 от BaltikS » Записан
alexandr_ps
Гость
« Ответ #5 : Январь 15, 2009, 12:11 »

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

Цитировать
был действительно уникальным и в то же время не менялся время от времени
Записан
Sergey_N
Гость
« Ответ #7 : Январь 15, 2009, 13:51 »

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

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

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

У меня сейчас осталось 3 вопроса по этой теме:
1. Если использовать MAC-адреса сетевых интерфейсов в качестве уникального ключа, как быть если они меняются количеством - например при установке VMWare их количество удваивается? Можно ли считать что комп тот же самый, если из 5 интерфейсов только у одного такой же мак-адрес, как и у другого компа?
2. По каким файлам определять текущую дату? Ведь я не могу просканировать всю файловую систему. Это займет очень много времени.
3. Как в Mac OS получить серийный номер BIOS? - его можно было бы использовать как еще одну составляющую ключа.
Записан
Sergey_N
Гость
« Ответ #8 : Январь 15, 2009, 14:02 »

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

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

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

Записан
kirill
Гость
« Ответ #9 : Январь 15, 2009, 14:28 »

Привязка к оборудованию не есть гуд на мой взгляд. Как показывает практика оборудование меняется чаще, чем того ожидает программист )))
Может лучше посадить в недра системы неудаляемого жучка?
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #10 : Январь 15, 2009, 14:33 »

* если выход в инет отсутствует или запрещён?
* если нет ни одной сетевой карты?
Прогой нельзя будет пользоваться. Поскольку активация происходит через интернет, сетевой интерфейс нужен однозначно.

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

Собираю информацию по крупицам
http://webhamster.ru
SABROG
Гость
« Ответ #11 : Январь 15, 2009, 14:36 »

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

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

Урезай функционал лучше. Чего не скачалось, того не крякнеш. Правда стоит одному купить и выложить для всех как все твои усилия сведутся на нет.
Записан
Sergey_N
Гость
« Ответ #12 : Январь 15, 2009, 16:45 »

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

Вот с этим я не совсем знаком. Я пользуюсь просто методом QHttp::request, где проставляю адрес сервера и переменные запроса POST. Чтобы работало PROXY всяких видов (HTTP,HTTPS,SOKS4,SOKS5) нужны еще какие-то телодвижения?
Записан
niXman
Гость
« Ответ #13 : Январь 15, 2009, 18:51 »

обычно люди, которые пользуются *nix'ами не настолько тупы. И твою прогу пропатчат и эмулятор сделают и драйвера напишут.
Да да да...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.142 секунд. Запросов: 22.