Перейти к содержанию
Fire Monkey от А до Я
  • 0

Блокировка программы


Gingercat

Вопрос

Доброго времени суток, уважаемые! Сразу извиняюсь за много букв, и возможно - вопрос не совсем в тему форума.

Близится завершение одного проекта, не слишком сложного, однако сожравшего много времени на разработку алгоритмов работы с графикой - не захотелось OpenCv использовать (да и логики там будь здоров). Так вот - понимаю, что не хит, но хотелось бы хоть немного защитить от школьников хакеров. Понятно что сломают, если будет интересно, но хочется.

 

Полазив по сети, в голове образовалась каша из всяческих ключей, протекторов и тому подобное. Подумав, пришел к следующему:

 

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

 

Собственно, две непонятные вещи. 

 

1 - алгоритм кодировки и декодировки ключа. Я понимаю, что методов куча, но может кто сталкивался - либо метод не сильно сложный, вроде не идиот, но ничего умного не нашел; либо вообще будет сказкой пример кода (пусть и на Delphi), абы только не слишком огромный.

 

2 - тут многие разрабатывают под мобильные, значит с интернетом на ты (я день убил на написание обновления через ftp). Требуется знать, что каждый ключ используется на одном компе. Никто ведь не мешает раздать один ключ на всех - в базе то он будет. Есть ли какая возможность (без работы на стороне сервера - я только css знаю))) отловить одновременное обращение с двух разных мест к одному ключу? Проверка по ip, как понимаю бред - а если динамический. Есть идея дописывать к ключу, к примеру номер диска, или еще чего - имеет право на жизнь подобная идея? Одно плохо -  в таком случае придется менять права доступа к файлу на сервере, а мне это не нравится.

 

Как то так  :)

 

Буду благодарен любым идеям, либо ткните носом, может чего еще почитать, хотя уже просто не соображаю ;)

 

Заранее спасибо.

Изменено пользователем Gingercat
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

для пионеров:

при регистрации берут некий набор символов + логин + пароль и  вычисляют от полученной строки хэш MD5 или SHA1, получают строку 32 символа (md5) и хранят её на сервере

для аутентификации пользователь вводит логин и пароль, опять генерируется хэш и передается на сервер, который ищет его у себя и отвечает есть такой или нет

 

отлов обращений из разных мест должен включать в себя идентификатор места. а вот с этим проблемы. у мобильных устройств такой ID есть... у десктопов можно считать что нет. хотя можно взять CPU ID + BIOS + ComputerName и тоже захешировать. IP брать нельзя, он для всей локальной сети одинаковый...

Ссылка на комментарий
  • 0

Прошу прощения, но не понятно - а обязательно привязываться к логину и паролю? Если есть пак ключей, закодированных своим алгоритмом (я понимаю, что это слабое место - алгоритм раскодировки то будет внутри программы), которые и будут проверяться - разве так нельзя, или я чего то не понимаю?

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

Изменено пользователем Gingercat
Ссылка на комментарий
  • 0

Однажды я продал свою программу (жаль, что только однажды). Для защиты от копирования я ее продал с электронным ключом в виде флешки. Без этого ключа программа не запускалась. Причем это уже более менее серьезная защита (как уверял производитель ключа).

Ссылка на комментарий
  • 0

для пионеров:

при регистрации берут некий набор символов + логин + пароль и  вычисляют от полученной строки хэш MD5 или SHA1, получают строку 32 символа (md5) и хранят её на сервере

для аутентификации пользователь вводит логин и пароль, опять генерируется хэш и передается на сервер, который ищет его у себя и отвечает есть такой или нет

можете дальше пояснить ход мыслей? Т.е. допустим хеш совпала сработал - "такой есть", далее как в вашем варианте должно идти общение с серваком

при каждом запросе данных? user_id, session_id или сама хеш ?

Ссылка на комментарий
  • 0

Да нет же)

 

ради бога

генерируешь 1 ключ. больше можно не делать )))

 

и с этим ключом любую копию программы можно запустить

 В том то и дело, что нужно увязать ключ пользователя с ключом на сервере. Вот тут загвоздка. На сервере пак ключей, пользователь получает один из них, программа проверяет - если есть такой, работаем. Видимо не совсем верно выразился - привязка то нужна, но только без использования пользователя. Видимо таки придется пользоваться Id оборудования, иначе не как. Только и кодировка то не нужна - пусть пары ключей будут одинаковыми, ничего не изменит. Пока я не удалю любой ключ с сервера, он будет работать у пользователя. На сервере нужно следить и метить проданные ключи, и привязку к железу.

 

В общем пока только мысли

d7d1cd - не, я не параноик, да и не стоит программа таких усилий - это скорее для себя на будущее - интересно, да и лишним не будет.

Изменено пользователем Gingercat
Ссылка на комментарий
  • 0

Видимо не совсем верно выразился - привязка то нужна, но только без использования пользователя. Видимо таки придется пользоваться Id оборудования, иначе не как.

смотря что под ID брать...serial на китайских дроидах одинаковый 0123456789ABCDEF,

как вариант взять проект ZuBy или в samples - DeviceInfo и через хеш пропустить несколько полей об устройстве, но опять таки

нет там 200% уверенности.

Ссылка на комментарий
  • 0

Да, ибо она написана для использования с нетом, посему - это не важно. Nik - спасибо, погляжу. rustam_d - прошу прощения, не уточнил - это десктопное приложение)

Ссылка на комментарий
  • 0

Конечно сломают, если будет хоть малейший интерес (я реально отношусь к своим способностям разработчика :D), но попробовать сделать хоть что - то надо, уже закусил удила, посему не отступлю)

Ссылка на комментарий
  • 0

почему то думаю что такую защиту взломают в первые пару часов - достаточно будет подменить пару пакетов от сервера...

Сделать общение с сервером по SSL и выдавать сертификаты ограниченные по времени к примеру раз в год, так проще и с этим сделать ничего не смогут.

Проще будет ломать бинарный код и анализировать память приложения. Бинарники тоже шифруют или жмут, от школьников помогает. 

Как вариант Sentinel Hasp, или Hasp Net ключи, я на винде использовал, и 1с такими закрывается.

Изменено пользователем Камышев Александр
Ссылка на комментарий
  • 0

Несколько не в тему. А можно каким-то образом определить параметры функции, вызываемой из библиотеки DLL, если нет ее описания?

вообще ни разу не в тему, в поисковике набери "параметры функции из dll"

Изменено пользователем Камышев Александр
Ссылка на комментарий
  • 0

Спасибо, Александр. То, что нужно паковать exe - понятно, а вот про общение с серваком - темный лес, полез читать, пока моих потуг хватило только на общение с фтп, для проверки версии программы, и, если нужно - обновления)

Ссылка на комментарий
  • 0

Спасибо, Александр. То, что нужно паковать exe - понятно, а вот про общение с серваком - темный лес, полез читать, пока моих потуг хватило только на общение с фтп, для проверки версии программы, и, если нужно - обновления)

Для Вашей задачи подойдет indy ftp клиент-сервер плюс к ним indy ssl handlerы. Нужно будет найти "OpenSSL-Win32" и разобраться как в ней создавать собственные сертификаты. Далее указать в handler серверу и клиенту в SSLOptions файлы сертификатов и ключей и все, vulgaris защищенное ftp соединение. При создании сертификатов указывается время действия вплоть до секунд. Можно выдавать его на месяц к примеру, через месяц точно по времени ssl соединения не будет и клиент будет стучаться за новым сертификатом, ну или не будет...

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...