На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: Majestio
  
> QT-защита программы
    Здравствуйте!
    Сделал программу на QT. Подскажите, пожалуйста, как лучше ее защитить для следующих условий:
    1. Файл настроек должен быть зашифрован.
    2. Программа может быть установлена только на 3 ПК.
    3. Количество запусков на каждом ПК не должно превышать 30.
    4. Если в качестве файла настроек использовать файл SQLite (настройки в будущем скорее всего будут добавляться), то как лучше этот файл зашифровать.
      Защиты от хакеров не существует, это надо запомнить. Если программа имеет высокую практическую ценность - её сломают завтра, после опубликования.

      Для узкого круга казуал-юзеров можно посопротивляться:

      1) В программе предусмотреть активацию. Генерировать код запроса. Допустим на базе Machine-ID, используя к примеру QStorageInfo для ID диска и QNetworkInterface для MAC первого сетевого интерфейса, и потом возвращать что-то типа:

      ExpandedWrap disabled
        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) Есть вариант - защитить только с помощью предварительного логина в инет. Но это неудобно для энд-юзера. И ломается, при необходимости, не сильно сложнее.

      Бывают еще некоторые виды защит, одна из которых - проверка на запуск под виртуальной машиной. Ведь твою прогу могут именно так "размножить". Но это отдельное шаманство.
        Спасибо за ответ.
        Цитата Majestio @
        Защиты от хакеров не существует, это надо запомнить.
        Это я понимаю. Мне нужно только защититься от несанкционированного распространения программы. Чтобы программа могла запускаться только на 3 ПК пользователей организации, для которой я ее сделал, ограниченное числов раз (пока за нее не заплатили).
        Цитата Majestio @
        5) SQLite файл сам шифровать не нужно, нужно шифровать его поля.
        А как это сделать?
          Цитата tumanovalex @
          Чтобы программа могла запускаться только на 3 ПК пользователей организации, для которой я ее сделал, ограниченное числов раз (пока за нее не заплатили).

          Тогда решение уже подсказали.
          Скрытый текст
          Цитата Majestio @
          2) В ответ на "покупку" возвращать недостающую dll-ку или so, которая будет исполнять какие-то взаимодействия с программой с учётом Machine-ID, эти dll/so должны "собираться под покупку"


          Цитата Majestio @
          4) Количество запусков можно хранить где-то во внешнем файле, в файле настроек или в реестре винды. Это самое узкое место твоей защиты. Тут даже не хакер, а просто подготовленный программер может найти где этот "счётчик" сбрасывать.

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

          Добавлено
          Что же касательно количества запусков. Что мешает просто оставить работать компьютер 24/7 со включенной программой?
          Сообщение отредактировано: macomics -
            Цитата macomics @
            Если есть доступ к интернет, тогда можно запрашивать количество запусков на сервере и там же их считать.
            Тогда достаточно будет хранить любой файл с идентификатором компьютера как флаг разрешения запуска. При запуске без интернет он удаляется и это считается за последний запуск. Но при доступе к интернет информация из файла используется для получения количества запусков. При получении в ответ 1 (последний запуск) файл так же удаляется. Иначе информация в нем обновляется.

            И всеж, как я писал ранее - авторизация и аутентификация посредством инета - это "двойной костыль" (имхо). Равно как и разновсяческая валидация и хранение.
              Цитата Majestio @
              И всеж, как я писал ранее - авторизация и аутентификация посредством инета - это "двойной костыль" (имхо).

              Так не нужно у пользователей ничего запрашивать, а просто использовать тот же самый MachineID.

              Цитата macomics @
              Что же касательно количества запусков. Что мешает просто оставить работать компьютер 24/7 со включенной программой?

              Я тут намекаю на то, что лучше считать количество дней с первого запуска вместо их числа.
                Цитата macomics @
                Так не нужно у пользователей ничего запрашивать, а просто использовать тот же самый MachineID.

                И все 145 энженеров в какой-то конторе будут его вводить, ага? Нужна именно ПРИВЯЗКА экземпляра проги к оборудованию.

                Добавлено
                Цитата macomics @
                Я тут намекаю на то, что лучше считать количество дней с первого запуска вместо их числа.

                Ой сама наивность :lol: Это самое нужно где-то хранить. И так получается, что можно подменить. Бинго?
                  Цитата Majestio @
                  И все 145 энженеров в какой-то конторе будут его вводить, ага? Нужна именно ПРИВЯЗКА экземпляра проги к оборудованию.

                  Зачем его вводить? Сразу получать его по параметрам компа и использовать.

                  Добавлено
                  Цитата Majestio @
                  И так получается, что можно подменить. Бинго?

                  Что подменять? Данные NTP?
                    Цитата macomics @
                    Зачем его вводить? Сразу получать его по параметрам компа и использовать.

                    Ну хорошо, пусть так, пусть это будет "логин". Как я писал выше - можно прогу запускать на виртуалках. Не уверен, но допускаю, что виртуалкам в режиме NAT-подключений вполне можно иметь внутренние одинаковые МАС адреса карт (не уверен, но допускаю). И если это так - грош-цена всей этой защите, даже через инет-логин.

                    Цитата macomics @
                    Что подменять? Данные NTP?

                    Небольшое недопонимание с моей стороны, сорян. Если "сессии" храняться не локально а на логин-сервере - то да, можно отслеживать.

                    Но, как я писал ранее, привязка работы проги к инету - это некрасивое решение! Особенно если это касается жадности и алчности, а не функционала.
                      Цитата Majestio @
                      привязка работы проги к инету - это некрасивое решение!
                      А в организациях, где за несанкционированный доступ в iNet с рабочего компа увольняют, ещё и нерабочее.
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0413 ]   [ 15 queries used ]   [ Generated: 18.10.25, 21:35 GMT ]