QT-защита программы
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
QT-защита программы
|
|
|
|
|
Здравствуйте!
Сделал программу на 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 с рабочего компа увольняют, ещё и нерабочее. привязка работы проги к инету - это некрасивое решение! |
|
Сообщ.
#11
,
|
|
|
|
Цитата tumanovalex @ Сделать защиту - может любой дурак. А вот эффективную защиту.... Эффективность защиты не считается в попугаях, а считается во времени. Да, да = сравнивается время на изготовление защиты и на её взлом. На защиту влияет очень много параметров. И язык на котором она написана, и востребованность, и многое ещё чего. Нельзя защитить чужое (т.е. все внешнии защищалки хакаются на раз-два), сложно защищать без опыта взлома, лучше распределённая защита, ещё лучше аппаратно-программная защита. Ну и не делайте школьных ошибок: - используйте мощь языка на котором пишете (например на азме - это более одного смысла у текущей команды, знание аппаратных и системных нюансов. для высокоуровневых языков - это распылённость и отсрочка детекции-события-сработки) - если используете общепризнанную теорию, то не пытайтесь её улучшить как бы вам это не казалось логичным или лучшим решением. - старайтесь сделать несколько эшелонов защиты. например = официальную и та которая основная. - не используйте готовые ПО пакеты для защиты, универсального нет в природе, от слова совсем. Пример: создал разработчик русификатор (времена досика), и ставил его на подшефного завода терминалы PCXT. Пытались его копировать - не работал. Иногда правда удачно без проблем. всякие супер-пупер анализаторы секторов, защиты = не спасали(это отдельная тема) и не давали никакой инфы. а оказалось - всего ничего, человек тупо реагировал на время установленное рабочему файлу = 00 секунд. Досик время показывал с точностью до минут, посему это не мозолило глаза. Время изготовления такой защиты - 5 минут. Время потраченное на его ловлю (в те времена) - хренова туча человеко-часов. удачи вам (круглый) |
|
Сообщ.
#12
,
|
|
|
|
Спасибо за ответ
Цитата kolobok0 @ Поясните, пожалуйста, в чем суть защиты и как она срабатывала. Досик - это ОС DOS? а оказалось - всего ничего, человек тупо реагировал на время установленное рабочему файлу = 00 секунд |
|
Сообщ.
#13
,
|
|
|
|
Цитата tumanovalex @ Спасибо за ответ Цитата kolobok0 @ Поясните, пожалуйста, в чем суть защиты и как она срабатывала. Досик - это ОС DOS?а оказалось - всего ничего, человек тупо реагировал на время установленное рабочему файлу = 00 секунд В том что он выставлял время файлу в 00 секунд и при запуске проверял. А DOS'овский dir показывал время с точностью до минут, помоему даже NC этого не делал, только VC и DOS Navigator умели. Если файл копировался то у него менялось время создания. Весьма остроумно. |
|
Сообщ.
#14
,
|
|
|
|
Цитата sharky72 @ В том что он выставлял время файлу в 00 секунд и при запуске проверял. А DOS'овский dir показывал время с точностью до минут, помоему даже NC этого не делал, только VC и DOS Navigator умели. Если файл копировался то у него менялось время создания. Хочешь спрятать надёжнее - прячь на видном месте. Народная мудрость. Цитата sharky72 @ Весьма остроумно. Согласен. Кстати, ломается - проще простого, но при одном "но" ... Если это делать сразу по старту программы. А если сделать проверку рандомно, к примеру, после старта программы через 15-45 мин, то будут неприятные "сюрпрайзы" как энд-юзеру, так и кул-хацкеру. Хороший и качественный гемор |