Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Защита программы от взлома 
V
    Опции темы
Antony41
Дата 25.9.2013, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: 1
Всего: 1



Нужен совет
Суть работы следующая 
Есть клиент и сервер. 
На сервере есть лицензии, так сказать Ini файлы и коды доступа к ним. На сервере можно установить активирована лицензия или нет, а так же срок действия лицензии после активации.
Если лицензия еще не активирована, то когда клиент начинает активацию, берется его текущая дата и к ней прибавляется кол-во дней установленное при активации.
Например создали лицензию не активированную на 5 дней после активации, как только клиент начинает активацию, идет запрос на сервер и сервер сообщает ему, что эта лицензия на 5 дней. Клиент берет текущую дату и прибавляет к ней 5 дней, получается срок окончания лицензии в его локальном формате.
Создается локальный файл ключей на стороне клиента, куда записываются даты. клиент отслеживает перемотку дат и если была зафиксировна, запускает снова окно регистрации/восстановления. Теперь, что бы программа запустилась, нужно либо установить дату обратно, либо пройти этап восстановления.
При прохождении восстановления сервер сообщит ему уже не кол-во дней которые осталось, а ответ=даты окончания-дата активации, т.е клиент к текущей дате прибавит ответ от сервера и получится дата окончания снова в его локальном формате, но уже будет меньше, т.е столько сколько положено работать программе.

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

Добавлено через 1 минуту и 30 секунд
только не нужно говорить что можно взломать программу, и обойти защиту, уже и так наверное все это знают.
PM MAIL   Вверх
Poseidon
Дата 25.9.2013, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Клиент прошел активацию и вытянул с сервере информацию о пяти днях работы. Сохранил это локально. Плюс сохранил дату активации. При каждом запуске программы клиент проверяет текущую дату, если от даты активации прошел день, отнимает этот день от сохраненных пяти дней работы. Т.е. фиксируем не дату когда нужно сказать "лицензия истекла", а фиксируем дни работы программы. И с каждым прошедшим днем это количество дней уменьшаем. То же самое фиксируем и на сервере. При любом шухере, будь то перевод локальной даты у клиента или еще чего запускаем восстановление при котором лезем на сервер и смотрим там сколько осталось дней лицензии. В итоге получится, что по истечении пяти дней лицензия будет иметь статус "осталось 0 дней работы". При чем этот статус будет как локально, так и на сервере, и при попытке перевести локальную дату и запустить восстановление, ничего не выйдет т.к. сервер тоже знает, что лицензия уже истекла.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Akella
Дата 25.9.2013, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



а может дату брать не на ПК клиента, а на сервере

Добавлено через 1 минуту и 1 секунду
Цитата(Antony41 @  25.9.2013,  09:12 Найти цитируемый пост)
Есть клиент и сервер.


Цитата(Antony41 @  25.9.2013,  09:12 Найти цитируемый пост)
программа на стороне клиента должна работать, даже когда нет доступа к инету.


Тут непонятно. Сервер в локальной сети или в интернете?
PM MAIL   Вверх
Antony41
Дата 25.9.2013, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: 1
Всего: 1



Сервер в интернете, опять же уязвимость с переводом времени назад и копированием файла ключа. Прежде сохраненный файл локального ключа копируем в то место где он должен быть, переводим дату назад и запускаем клиента, и всё прекрасно опять работает... Нужно защиться от подмены локального файла ключей.
PM MAIL   Вверх
Poseidon
Дата 25.9.2013, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



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


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Antony41
Дата 25.9.2013, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
и запускаю программу. получается если не будет сверка с сервером, то программа откроется и будет вести себя так как буд то лицензия активна.
PM MAIL   Вверх
Poseidon
Дата 25.9.2013, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Antony41 @  25.9.2013,  13:26 Найти цитируемый пост)
Я значит беру такой закрываю её и заменяю текущий файл ключа, тем что скопировал ранее, перематываю дату на 01.01.2013 00:00:10и запускаю программу. получается если не будет сверка с сервером, то программа откроется и будет вести себя так как буд то лицензия активна.
Все это так, но есть но:
  • У пользователя будет "левое" время. Не всем это нравится и это не удобно
  • Данные можно дублировать в другом файле/реестре и шибко не афишировать это. При подмене файла-ключа программа видит, что данные отличаются и просит запустить процедуру восстановления (связи с сервером). А сервер скажет "прости, время вышло". При чем дублировать можно не именно те данные, которые в файле ключе. Можно в тот же реестр тупо записывать дату последнего запуска программы и при каждом последующем запуске ее проверять и перезаписывать. Если вдруг выяснится, что дату "откатили" - запускаем восстановление лицензии.
Вообще вся идея в том, что срок отматывается на сервере. А локально все делается только из-за возможного отсутствия соединения с сервером. При любой локальной нестыковке нужно ломиться на сервер и уточнять что да как. Откат даты и подмена файла отлавливаются локально элементарно. Не думаю что с этим могут возникнуть проблемы.

Добавлено через 4 минуты и 7 секунд
Можно как вариант реализовать вынужденное соединение с сервером через минимальный срок лицензии. Ну т.е., допусти, минимальный срок, на который выдается лицензия - 10 дней. Значит создать в программе функционал, который будет каждые 10 дней просить пользователя установить соединение с интернетом "Для проверки лицензии". Ну а если не установили, то еще дней через 5 сказать "Все, либо давай мне интернет, либо я закрываюсь". Но это уже маразм по-моему smile, зато будет работать.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Antony41
Дата 25.9.2013, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: 1
Всего: 1



Спасибо всем за помощь, пока вопросов больше нет.
PM MAIL   Вверх
Akella
Дата 25.9.2013, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Интересно, а как клиент-сервер будет работать автономно, если нет доступа к серверу? Значит это не клиент-сервер?
PM MAIL   Вверх
Antony41
Дата 26.9.2013, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: 1
Всего: 1



Не совсем так. Есть сервер лицензий который хранит и следит за сроком окончания лицензий для клиента. Клиент работает не то что бы в инете, он работает с базой данных которая может распологаться как в инете так и локально, и только на этапе регистрации/восстановления если что то пошло не так, должен иметь доступ в инет, для того чтобы сервак ему сообщил каков статус и срок его ключика, разрешить или нет доступ для восстановления, а так же переодически проверять, если есть инет в данный момент, если нет то нет))), если есть, фиксировать например последнюю дату синхронизации параметров с сервером лицензий. Так же идет привязка к железке со стороны клиента, и если скопировать файл ключа на другой комп, то так же вылезет окошко регистрация/восстановление из за не соответствия UID компов. И только позвонив в службу поддержки можно будет перевыпустить лицензию.

А на предыдущем компе при первой синхронизации, если есть доступ в инет произойдет блокировка, из за смены UID. 

Конечно я понимаю что это всё ломается и нет защиты никакой обсолютно, но я использовал некоторые рекомендуемые методы продления времени на взлом например такие как подмена значений, не являющимися настоящими, или проверка в разных потоках, избавился от диалоговых окон в тех местах где можно поставить брекпоинт на клике по "ОК" а потом посмотреть что было до... Лучшего способа я не придумал. Требования сводили к тому что если сервер лицензий не запущен или произойдет какой либо сбой света серв вырубит, то работать программа всё равно должна, при чем именно столько на сколько дней была приобретена лицензия.
PM MAIL   Вверх
Akella
Дата 26.9.2013, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



При изменении/установке лицензионного ключа можно создавать/изменять какой-то файл.
Потом, при отсутствии доступа к серверу лицензий, можно проверять дату создания/изменения файла, а не дату, установленную на ПК.

Добавлено @ 21:13
Опять же, злоумышленник может посмотреть с помощью утилиты filemonitor, что делает программа при получении/обновлении лицензии и при проверке лицензии.
Значит можно потом, позже создавать/менять такой файл, не в момент проверки или обновления лицензии.

Добавлено через 8 минут и 23 секунды
И файл или файлы (их может быть несколько, пусть разбирается, какой из них действительно правильный), может быть наполнен какими-нибудь служебными (типа служебными) данными, может быть *.ico или *.txt, или *.db или ещё что-то такое, что не должно вызывать подозрение злоумышленника.
PM MAIL   Вверх
DYUMON
Дата 27.9.2013, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 17.6.2006
Где: Новосибирск

Репутация: нет
Всего: 3



берется timefreez и программа будет считать что дата не меняется.
пусть программа берет с сервера сколько времени ей работать. а на сервере сделаешь скрипт который будет дни отнимать .

Это сообщение отредактировал(а) DYUMON - 27.9.2013, 07:29


--------------------
Всех программистов надо посадить на целероны, что бы впредь головой думали что пишут.
user posted image
PM MAIL ICQ Skype   Вверх
Antony41
Дата 27.9.2013, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: 1
Всего: 1



Цитата(DYUMON @  27.9.2013,  07:29 Найти цитируемый пост)
пусть программа берет с сервера сколько времени ей работать. а на сервере сделаешь скрипт который будет дни отнимать .

В общем так оно и есть!
PM MAIL   Вверх
ZaDoXliK
Дата 30.9.2013, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 1.12.2007
Где: Украина

Репутация: нет
Всего: нет



Бери какие то неизменные файлы. На пример системный файл который нельзя редактировать. В общем DYUMON правильно подсказывает, бери не время и даты на самом ПК, а манипулируй с файлами на нём.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
ZaDoXliK
Дата 30.9.2013, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 1.12.2007
Где: Украина

Репутация: нет
Всего: нет



Но не забывай о том что всё что сделано руками человека ломается руками другого более опытного человека :)

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0933 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.