
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.60] |
![]() |
|
![]() |
|
|
Здравствуйте!
Сделал программу на QT. Подскажите, пожалуйста, как лучше ее защитить для следующих условий: 1. Файл настроек должен быть зашифрован. 2. Программа может быть установлена только на 3 ПК. 3. Количество запусков на каждом ПК не должно превышать 30. 4. Если в качестве файла настроек использовать файл SQLite (настройки в будущем скорее всего будут добавляться), то как лучше этот файл зашифровать. |
Сообщ.
#2
,
|
|
|
Защиты от хакеров не существует, это надо запомнить. Если программа имеет высокую практическую ценность - её сломают завтра, после опубликования.
Для узкого круга казуал-юзеров можно посопротивляться: 1) В программе предусмотреть активацию. Генерировать код запроса. Допустим на базе Machine-ID, используя к примеру QStorageInfo для ID диска и QNetworkInterface для MAC первого сетевого интерфейса, и потом возвращать что-то типа: ![]() ![]() QCryptographicHash::hash((mac + serial).toUtf8(), QCryptographicHash::Sha256).toHex(); // Уникальный хэш будет твоим Machine-ID 2) В ответ на "покупку" возвращать недостающую dll-ку или so, которая будет исполнять какие-то взаимодействия с программой с учётом Machine-ID, эти dll/so должны "собираться под покупку" 3) Для шифрования можно использовать что-то типа SimpleCrypt (из Qt Solutions) 4) Количество запусков можно хранить где-то во внешнем файле, в файле настроек или в реестре винды. Это самое узкое место твоей защиты. Тут даже не хакер, а просто подготовленный программер может найти где этот "счётчик" сбрасывать. 5) SQLite файл сам шифровать не нужно, нужно шифровать его поля. 6) Есть вариант - защитить только с помощью предварительного логина в инет. Но это неудобно для энд-юзера. И ломается, при необходимости, не сильно сложнее. Бывают еще некоторые виды защит, одна из которых - проверка на запуск под виртуальной машиной. Ведь твою прогу могут именно так "размножить". Но это отдельное шаманство. |
Сообщ.
#3
,
|
|
|
Спасибо за ответ.
Цитата Majestio @ Это я понимаю. Мне нужно только защититься от несанкционированного распространения программы. Чтобы программа могла запускаться только на 3 ПК пользователей организации, для которой я ее сделал, ограниченное числов раз (пока за нее не заплатили).Защиты от хакеров не существует, это надо запомнить. Цитата Majestio @ А как это сделать? 5) SQLite файл сам шифровать не нужно, нужно шифровать его поля. |
Сообщ.
#4
,
|
|
|
Цитата tumanovalex @ Чтобы программа могла запускаться только на 3 ПК пользователей организации, для которой я ее сделал, ограниченное числов раз (пока за нее не заплатили). Тогда решение уже подсказали. Скрытый текст Цитата Majestio @ 2) В ответ на "покупку" возвращать недостающую dll-ку или so, которая будет исполнять какие-то взаимодействия с программой с учётом Machine-ID, эти dll/so должны "собираться под покупку" Цитата Majestio @ 4) Количество запусков можно хранить где-то во внешнем файле, в файле настроек или в реестре винды. Это самое узкое место твоей защиты. Тут даже не хакер, а просто подготовленный программер может найти где этот "счётчик" сбрасывать. Если есть доступ к интернет, тогда можно запрашивать количество запусков на сервере и там же их считать. Тогда достаточно будет хранить любой файл с идентификатором компьютера как флаг разрешения запуска. При запуске без интернет он удаляется и это считается за последний запуск. Но при доступе к интернет информация из файла используется для получения количества запусков. При получении в ответ 1 (последний запуск) файл так же удаляется. Иначе информация в нем обновляется. Добавлено Что же касательно количества запусков. Что мешает просто оставить работать компьютер 24/7 со включенной программой? |
Сообщ.
#5
,
|
|
|
Цитата macomics @ Если есть доступ к интернет, тогда можно запрашивать количество запусков на сервере и там же их считать. Тогда достаточно будет хранить любой файл с идентификатором компьютера как флаг разрешения запуска. При запуске без интернет он удаляется и это считается за последний запуск. Но при доступе к интернет информация из файла используется для получения количества запусков. При получении в ответ 1 (последний запуск) файл так же удаляется. Иначе информация в нем обновляется. И всеж, как я писал ранее - авторизация и аутентификация посредством инета - это "двойной костыль" (имхо). Равно как и разновсяческая валидация и хранение. |
Сообщ.
#6
,
|
|
|
Цитата Majestio @ И всеж, как я писал ранее - авторизация и аутентификация посредством инета - это "двойной костыль" (имхо). Так не нужно у пользователей ничего запрашивать, а просто использовать тот же самый MachineID. Цитата macomics @ Что же касательно количества запусков. Что мешает просто оставить работать компьютер 24/7 со включенной программой? Я тут намекаю на то, что лучше считать количество дней с первого запуска вместо их числа. |
Сообщ.
#7
,
|
|
|
Цитата macomics @ Так не нужно у пользователей ничего запрашивать, а просто использовать тот же самый MachineID. И все 145 энженеров в какой-то конторе будут его вводить, ага? Нужна именно ПРИВЯЗКА экземпляра проги к оборудованию. Добавлено Цитата macomics @ Я тут намекаю на то, что лучше считать количество дней с первого запуска вместо их числа. Ой сама наивность ![]() |
Сообщ.
#8
,
|
|
|
Цитата Majestio @ И все 145 энженеров в какой-то конторе будут его вводить, ага? Нужна именно ПРИВЯЗКА экземпляра проги к оборудованию. Зачем его вводить? Сразу получать его по параметрам компа и использовать. Добавлено Цитата Majestio @ И так получается, что можно подменить. Бинго? Что подменять? Данные NTP? |
Сообщ.
#9
,
|
|
|
Цитата macomics @ Зачем его вводить? Сразу получать его по параметрам компа и использовать. Ну хорошо, пусть так, пусть это будет "логин". Как я писал выше - можно прогу запускать на виртуалках. Не уверен, но допускаю, что виртуалкам в режиме NAT-подключений вполне можно иметь внутренние одинаковые МАС адреса карт (не уверен, но допускаю). И если это так - грош-цена всей этой защите, даже через инет-логин. Цитата macomics @ Что подменять? Данные NTP? Небольшое недопонимание с моей стороны, сорян. Если "сессии" храняться не локально а на логин-сервере - то да, можно отслеживать. Но, как я писал ранее, привязка работы проги к инету - это некрасивое решение! Особенно если это касается жадности и алчности, а не функционала. |
Сообщ.
#10
,
|
|
|
Цитата Majestio @ А в организациях, где за несанкционированный доступ в iNet с рабочего компа увольняют, ещё и нерабочее. привязка работы проги к инету - это некрасивое решение! |