На главную Наши проекты:
Журнал   ·   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 с рабочего компа увольняют, ещё и нерабочее.
                        Цитата tumanovalex @


                        Сделать защиту - может любой дурак. А вот эффективную защиту....
                        Эффективность защиты не считается в попугаях, а считается во времени. Да, да = сравнивается время на изготовление защиты и на её взлом.
                        На защиту влияет очень много параметров. И язык на котором она написана, и востребованность, и многое ещё чего.
                        Нельзя защитить чужое (т.е. все внешнии защищалки хакаются на раз-два), сложно защищать без опыта взлома, лучше распределённая защита, ещё лучше аппаратно-программная защита.
                        Ну и не делайте школьных ошибок:
                        - используйте мощь языка на котором пишете (например на азме - это более одного смысла у текущей команды, знание аппаратных и системных нюансов. для высокоуровневых языков - это распылённость и отсрочка детекции-события-сработки)
                        - если используете общепризнанную теорию, то не пытайтесь её улучшить как бы вам это не казалось логичным или лучшим решением.
                        - старайтесь сделать несколько эшелонов защиты. например = официальную и та которая основная.
                        - не используйте готовые ПО пакеты для защиты, универсального нет в природе, от слова совсем.


                        Пример:
                        создал разработчик русификатор (времена досика), и ставил его на подшефного завода терминалы PCXT. Пытались его копировать - не работал. Иногда правда удачно без проблем.
                        всякие супер-пупер анализаторы секторов, защиты = не спасали(это отдельная тема) и не давали никакой инфы.
                        а оказалось - всего ничего, человек тупо реагировал на время установленное рабочему файлу = 00 секунд. Досик время показывал с точностью до минут, посему это не мозолило глаза.
                        Время изготовления такой защиты - 5 минут. Время потраченное на его ловлю (в те времена) - хренова туча человеко-часов.

                        удачи вам
                        (круглый)
                          Спасибо за ответ
                          Цитата kolobok0 @
                          а оказалось - всего ничего, человек тупо реагировал на время установленное рабочему файлу = 00 секунд
                          Поясните, пожалуйста, в чем суть защиты и как она срабатывала. Досик - это ОС DOS?
                            Цитата tumanovalex @
                            Спасибо за ответ
                            Цитата kolobok0 @
                            а оказалось - всего ничего, человек тупо реагировал на время установленное рабочему файлу = 00 секунд
                            Поясните, пожалуйста, в чем суть защиты и как она срабатывала. Досик - это ОС DOS?

                            В том что он выставлял время файлу в 00 секунд и при запуске проверял. А DOS'овский dir показывал время с точностью до минут, помоему даже NC этого не делал, только VC и DOS Navigator умели. Если файл копировался то у него менялось время создания.
                            Весьма остроумно.
                            Сообщение отредактировано: sharky72 -
                              Цитата sharky72 @
                              В том что он выставлял время файлу в 00 секунд и при запуске проверял. А DOS'овский dir показывал время с точностью до минут, помоему даже NC этого не делал, только VC и DOS Navigator умели. Если файл копировался то у него менялось время создания.

                              Хочешь спрятать надёжнее - прячь на видном месте. Народная мудрость.
                              Цитата sharky72 @
                              Весьма остроумно.

                              Согласен. Кстати, ломается - проще простого, но при одном "но" ... Если это делать сразу по старту программы. А если сделать проверку рандомно, к примеру, после старта программы через 15-45 мин, то будут неприятные "сюрпрайзы" как энд-юзеру, так и кул-хацкеру. Хороший и качественный гемор :lol:
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0441 ]   [ 15 queries used ]   [ Generated: 18.12.25, 09:20 GMT ]