![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Antony41 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 27.12.2008 Репутация: 1 Всего: 1 |
Нужен совет
Суть работы следующая Есть клиент и сервер. На сервере есть лицензии, так сказать Ini файлы и коды доступа к ним. На сервере можно установить активирована лицензия или нет, а так же срок действия лицензии после активации. Если лицензия еще не активирована, то когда клиент начинает активацию, берется его текущая дата и к ней прибавляется кол-во дней установленное при активации. Например создали лицензию не активированную на 5 дней после активации, как только клиент начинает активацию, идет запрос на сервер и сервер сообщает ему, что эта лицензия на 5 дней. Клиент берет текущую дату и прибавляет к ней 5 дней, получается срок окончания лицензии в его локальном формате. Создается локальный файл ключей на стороне клиента, куда записываются даты. клиент отслеживает перемотку дат и если была зафиксировна, запускает снова окно регистрации/восстановления. Теперь, что бы программа запустилась, нужно либо установить дату обратно, либо пройти этап восстановления. При прохождении восстановления сервер сообщит ему уже не кол-во дней которые осталось, а ответ=даты окончания-дата активации, т.е клиент к текущей дате прибавит ответ от сервера и получится дата окончания снова в его локальном формате, но уже будет меньше, т.е столько сколько положено работать программе. В общем уязвимость тут вот в чем, если скопировать ключ активации и запомнить время на компе, то по истечению лицензии можно будет заменить файл ключа и перемотать время назад и снова пользоваться. Нужно где то хранить дату последнего изменения файла ключа. Вопрос где то это легко сказано, а вот где? Или есть более разумный метод решения. При этом программа на стороне клиента должна работать, даже когда нет доступа к инету. Добавлено через 1 минуту и 30 секунд только не нужно говорить что можно взломать программу, и обойти защиту, уже и так наверное все это знают. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Клиент прошел активацию и вытянул с сервере информацию о пяти днях работы. Сохранил это локально. Плюс сохранил дату активации. При каждом запуске программы клиент проверяет текущую дату, если от даты активации прошел день, отнимает этот день от сохраненных пяти дней работы. Т.е. фиксируем не дату когда нужно сказать "лицензия истекла", а фиксируем дни работы программы. И с каждым прошедшим днем это количество дней уменьшаем. То же самое фиксируем и на сервере. При любом шухере, будь то перевод локальной даты у клиента или еще чего запускаем восстановление при котором лезем на сервер и смотрим там сколько осталось дней лицензии. В итоге получится, что по истечении пяти дней лицензия будет иметь статус "осталось 0 дней работы". При чем этот статус будет как локально, так и на сервере, и при попытке перевести локальную дату и запустить восстановление, ничего не выйдет т.к. сервер тоже знает, что лицензия уже истекла.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
Antony41 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 27.12.2008 Репутация: 1 Всего: 1 |
Сервер в интернете, опять же уязвимость с переводом времени назад и копированием файла ключа. Прежде сохраненный файл локального ключа копируем в то место где он должен быть, переводим дату назад и запускаем клиента, и всё прекрасно опять работает... Нужно защиться от подмены локального файла ключей.
|
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Мое сообщение читал? Подмена файла при таком раскладе не прокатит т.к. информация о лицензионном сроке будет на сервере.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Antony41 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 27.12.2008 Репутация: 1 Всего: 1 |
Читал. По моему твой вариант не сильно отличается. Тогда получается при каждом запуске программы должна проходить сверка с сервером.
А так получается допустим активацию программы я прошел 01.01.2013 и у меня было 10 дней, значит локальный файл ключа должен сохранить значения например: DTActivate=01.01.2013 00:00:00 DaysExp=10 Внимание я беру и копирую созданный файл ключа куда нибудь. затем когда у меня наступает 11.01.2013 прога жалуется. Я значит беру такой закрываю её и заменяю текущий файл ключа, тем что скопировал ранее, перематываю дату на 01.01.2013 00:00:10 и запускаю программу. получается если не будет сверка с сервером, то программа откроется и будет вести себя так как буд то лицензия активна. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Все это так, но есть но:
Добавлено через 4 минуты и 7 секунд Можно как вариант реализовать вынужденное соединение с сервером через минимальный срок лицензии. Ну т.е., допусти, минимальный срок, на который выдается лицензия - 10 дней. Значит создать в программе функционал, который будет каждые 10 дней просить пользователя установить соединение с интернетом "Для проверки лицензии". Ну а если не установили, то еще дней через 5 сказать "Все, либо давай мне интернет, либо я закрываюсь". Но это уже маразм по-моему ![]() -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Antony41 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 27.12.2008 Репутация: 1 Всего: 1 |
Спасибо всем за помощь, пока вопросов больше нет.
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Интересно, а как клиент-сервер будет работать автономно, если нет доступа к серверу? Значит это не клиент-сервер?
|
|||
|
||||
Antony41 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 27.12.2008 Репутация: 1 Всего: 1 |
Не совсем так. Есть сервер лицензий который хранит и следит за сроком окончания лицензий для клиента. Клиент работает не то что бы в инете, он работает с базой данных которая может распологаться как в инете так и локально, и только на этапе регистрации/восстановления если что то пошло не так, должен иметь доступ в инет, для того чтобы сервак ему сообщил каков статус и срок его ключика, разрешить или нет доступ для восстановления, а так же переодически проверять, если есть инет в данный момент, если нет то нет))), если есть, фиксировать например последнюю дату синхронизации параметров с сервером лицензий. Так же идет привязка к железке со стороны клиента, и если скопировать файл ключа на другой комп, то так же вылезет окошко регистрация/восстановление из за не соответствия UID компов. И только позвонив в службу поддержки можно будет перевыпустить лицензию.
А на предыдущем компе при первой синхронизации, если есть доступ в инет произойдет блокировка, из за смены UID. Конечно я понимаю что это всё ломается и нет защиты никакой обсолютно, но я использовал некоторые рекомендуемые методы продления времени на взлом например такие как подмена значений, не являющимися настоящими, или проверка в разных потоках, избавился от диалоговых окон в тех местах где можно поставить брекпоинт на клике по "ОК" а потом посмотреть что было до... Лучшего способа я не придумал. Требования сводили к тому что если сервер лицензий не запущен или произойдет какой либо сбой света серв вырубит, то работать программа всё равно должна, при чем именно столько на сколько дней была приобретена лицензия. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
При изменении/установке лицензионного ключа можно создавать/изменять какой-то файл.
Потом, при отсутствии доступа к серверу лицензий, можно проверять дату создания/изменения файла, а не дату, установленную на ПК. Добавлено @ 21:13 Опять же, злоумышленник может посмотреть с помощью утилиты filemonitor, что делает программа при получении/обновлении лицензии и при проверке лицензии. Значит можно потом, позже создавать/менять такой файл, не в момент проверки или обновления лицензии. Добавлено через 8 минут и 23 секунды И файл или файлы (их может быть несколько, пусть разбирается, какой из них действительно правильный), может быть наполнен какими-нибудь служебными (типа служебными) данными, может быть *.ico или *.txt, или *.db или ещё что-то такое, что не должно вызывать подозрение злоумышленника. |
|||
|
||||
DYUMON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 17.6.2006 Где: Новосибирск Репутация: нет Всего: 3 |
берется timefreez и программа будет считать что дата не меняется.
пусть программа берет с сервера сколько времени ей работать. а на сервере сделаешь скрипт который будет дни отнимать . Это сообщение отредактировал(а) DYUMON - 27.9.2013, 07:29 |
|||
|
||||
Antony41 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 27.12.2008 Репутация: 1 Всего: 1 |
||||
|
||||
ZaDoXliK |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 1.12.2007 Где: Украина Репутация: нет Всего: нет |
Бери какие то неизменные файлы. На пример системный файл который нельзя редактировать. В общем DYUMON правильно подсказывает, бери не время и даты на самом ПК, а манипулируй с файлами на нём.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
ZaDoXliK |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 1.12.2007 Где: Украина Репутация: нет Всего: нет |
Но не забывай о том что всё что сделано руками человека ломается руками другого более опытного человека :)
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |