Russian Qt Forum

Qt => Общие вопросы => Тема начата: mwnuke от Март 19, 2008, 08:27



Название: Защита программы на Qt
Отправлено: mwnuke от Март 19, 2008, 08:27
Здравствуйте!

Начальство пожелало, чтобы на программу была установлена защита в виде привязки к идентификатору компьютера (hardwareID).
Чтобы сгенерировать этот идентификатор мне необходимо получить серийный номер какой-нибудь железяки (матери, винта и т.д.).
В случае с Windows эти данные выдираются с помощью WinAPI.
Но программа-то у нас на Qt ))
Отсюда вопрос: можно ли средствами Qt получить уникальный идентификатор компьютера?
Если нет - то посоветуйте альтернативные варианты.

Спасибо!


Название: Re: Защита программы на Qt
Отправлено: Tonal от Март 19, 2008, 11:12
Купить нормальную ключевую защиту?


Название: Re: Защита программы на Qt
Отправлено: Пантер от Март 19, 2008, 12:22
А что тебе мешает использовать винапи?


Название: Re: Защита программы на Qt
Отправлено: mwnuke от Март 19, 2008, 18:59
А что тебе мешает использовать винапи?
Под Windows - не мешает.   :)
Под Linux и MaсOS - мешает отсутствие этого самого WinAPI  ;D  ;D

До аппаратных ключей наша контора вряд ли снизойдет, так что, видимо придется писать свой кроссплатформенный класс, где использовать родные Апи операционок ))


Название: Re: Защита программы на Qt
Отправлено: Пантер от Март 19, 2008, 19:03
Поищи в stl, может что и накопаешь. :)


Название: Re: Защита программы на Qt
Отправлено: Вячеслав от Март 19, 2008, 19:38
Вообще , если у конторы нет денег ну хотя-бы (http://www.astroma-spb.ru/ru/products/protection/ (http://www.astroma-spb.ru/ru/products/protection/) - НЕ РЕКЛАММА !), то заморачиваться с защитой - себе дороже ... Если продукт действительно  востребован - поломают нафиг фсе эти привязки на раз ... Особеноо просто под пингвином ;)


Название: Re: Защита программы на Qt
Отправлено: mwnuke от Март 19, 2008, 21:04
Вообще , если у конторы нет денег ну хотя-бы (http://www.astroma-spb.ru/ru/products/protection/ (http://www.astroma-spb.ru/ru/products/protection/) - НЕ РЕКЛАММА !), то заморачиваться с защитой - себе дороже ... Если продукт действительно  востребован - поломают нафиг фсе эти привязки на раз ... Особеноо просто под пингвином ;)
У конторы деньги есть, только делается все как правило очень и очень не скоро.
Пока они это дело закупят - страшно подумать сколько времени пройдет. ))


Название: Re: Защита программы на Qt
Отправлено: Вячеслав от Март 19, 2008, 21:28
Хм ... А пойти по пути того-ж qcad'а ( кстати на куте написан ) ?


Название: Re: Защита программы на Qt
Отправлено: mwnuke от Март 19, 2008, 21:35
Хм ... А пойти по пути того-ж qcad'а ( кстати на куте написан ) ?
Просветите пожайлуста, в чем заключается этот путь?


Название: Re: Защита программы на Qt
Отправлено: pastor от Март 19, 2008, 22:07
Купить нормальную ключевую защиту?

+1

Есть неплохию ключи, но правда под винду  - http://www.guardant.ru/


Название: Re: Защита программы на Qt
Отправлено: serg_hd от Июнь 14, 2010, 16:19
с момента создания темы прошло 2 года, может быть сегодня будут какие-нибудь новые интересные варианты решения данной задачи, кроме покупки и привязки к железу?
Надо поставить защиту на софтину, а связывать её с сервером не хотелось бы, зачем лишние зависимости.
Интереса ради: а по какому принципу ломается простейшая защита типа вшитого пароля в саму прогу, hex-редактором или чем, может кто-нибудь в курсе? Просто интересно очень, никогда не пробовал эту нишу. И если это дело вырезается, то что мешает вырезать код синхронизации с сервером (хотя эта защита считается надёжнее чем первый вариант)?


Название: Re: Защита программы на Qt
Отправлено: ieroglif от Июнь 14, 2010, 18:16
мне кажется, что вопрос защиты упирается в основном не в технически детали - как привязаться к железу или к серверу, а скорее - как защитить код защиты от взлома.
мне кажется что если погуглить, то не проблемно найти классы для привязок к железу под основные ОС - линух, мак, венды. объеденить это в один Qt класс - займёт конечно время, но не сильно много.

а вот как защитить код?
то о чём я СЛЫШАЛ - обфускация, компрессия, выполнение какого-то динамического кода в памяти (про это интереснее всего). ничего из этого ручками не трогал - как-то не дотягивались :)
так что мне кажется, что хоть для данного форума тема крайне полезна, но ответы лучше искать на других форумах (wasm.ru к примеру)


Название: Re: Защита программы на Qt
Отправлено: Igors от Июнь 14, 2010, 19:43
Интереса ради: а по какому принципу ломается простейшная защита типа вшитого пароля в саму прогу, hex-редактором или чем, может кто-нибудь в курсе? Просто интересно очень, никогда не пробовал эту нишу. И если это дело вырезается, то что мешает вырезать код синхронизации с сервером (хотя эта защита считается надёжнее чем первый вариант)?
Уже много лет как я этим перестал заниматься, так что мои познания во взломе устарели  :) Но если очень грубо/приближенно то принципы выглядят так:

- нужно запустить программу в отладчике

- тормознуться (breakpoint) там где проверяется защита. Сильно помогает вызов WinAPI (хороший отладчик их прекрасно отслеживает), а MacsBug - то вообще была песня. Хорошая помощь диалог типа "программа не авторизована" - ведь по стеку видно откуда пришло управление

- дальше анализ проверок/if'ов и забивание их nop'ами, xor'ами. Разумеется не всегда это проходит - но в очень многих случаях - на ура. Большинство пишущих не имеют никакого понятия как строится код и лепят что-то типа
Код:
if (strcmp(currentCode, correctCode) != 0)
 ...
Конечно это становятся легкой добычей  :)
А вообще гораздо интереснее писать программы чем ломать их


Название: Re: Защита программы на Qt
Отправлено: Sancho_s_rancho от Июнь 14, 2010, 20:18
а вот как защитить код?
то о чём я СЛЫШАЛ - обфускация, компрессия, выполнение какого-то динамического кода в памяти (про это интереснее всего). ничего из этого ручками не трогал - как-то не дотягивались :)
так что мне кажется, что хоть для данного форума тема крайне полезна, но ответы лучше искать на других форумах (wasm.ru к примеру)
Знавал я одну программу, автор которой очень не хотел, чтобы ее сломали. Программа была весьма навороченной(много математики и графики, спектры там разные) и являлась штучным товаром. Так он сделал привязку к железу и модификацию кода в памяти. В результате если у пользователя летело железо, то он вынужден был обращаться к разработчику, а при работе касперского(может и некоторых других антивирусов) его программа начинала выдавать ошибки(антивирус не любит всякий самомодифицирующийся код и ставит палки в колеса). Но разработчика это устраивает, т.к. штучный товар. Если вы готовы решать головные боли пользователя и "крутой" защиты, то реализовывайте что-нибудь аналогичное.
пи.си. конечно эту программу никто не взломал. Но не потому что крутая защита, а просто пользователей всего несколько сотен.


Название: Re: Защита программы на Qt
Отправлено: serg_hd от Июнь 14, 2010, 20:23
Большинство пишущих не имеют никакого понятия как строится код и лепят что-то типа
Код:
if (strcmp(currentCode, correctCode) != 0)
 ...
да, вот поэтому и интересны детали взлома - чтобы знать чего точно не надо делать ;D


Название: Re: Защита программы на Qt
Отправлено: Igors от Июнь 14, 2010, 21:38
да, вот поэтому и интересны детали взлома - чтобы знать чего точно не надо делать ;D
Это во многом вопрос психологии. Конечно, защита не должна быть совсем уж лоховской (как сравнение 2-х строк), но и мудрить нечего - себе дороже. Нет привязки - не беда. Привяжитесь к имени компьютера/пользователя. Да, он может его изменить и пользоваться - но это унизительно для него  :)  Ну а если стоит хоть какая-то сеть TCP/IP (а это так), то делать пакости взломщику легче и приятнее.


Название: Re: Защита программы на Qt
Отправлено: SimpleSunny от Июнь 14, 2010, 21:57
Как читал на wasm'e (возможно и не там) когда-то, оригинальный метод.
Создается 2 вида защиты, одна очень простая, вплоть до сравнения строк и легко находимая. Другая в дебрях программы. При взломе легкой защиты некоторое время ничего не делается, потом программа перестает работать.
Направленно на то, что взлом программ, если мы говорим о немного специфичных, заказываются. Взломщик находит простую защиту, взламывает, получает деньги, исчезает. А пользователь, через время, начинает получать уведомления о просьбе покупки программы :)

Но это всё велосипеды и лучше, как было указано выше, купить себе уже готовую защиту.


Название: Re: Защита программы на Qt
Отправлено: vaprele07 от Июнь 15, 2010, 02:25
if (strcmp(currentCode, correctCode) != 0)
детали взлома (поиск кода проверки):
1) брейк на память веденной строки в ключевое поле.
2) поиск кнопки с методом проверки
3) поиск вызова сообщения "введен не корректный ключ".
4) поиск вызовов работы с реестром
5) поиск по текстовым константам *user*, *password*, *license*, *key*, названиям методов *registry*

Помню студнем ломал программку тестирования студней, мне понравилось как препод ее хвалил, какая она хорошая, как мощно она вопросы шифрует. Смысл в мегастойком шифровании при полной дешифрации во время исполнения ))) да еще и с ответами!

А на втором курсе я сам писал подобную программку для техникумов, так там ребята не парились со взломом, они тупа отлавливали окно результата и перерисовывали оценку )))


Название: Re: Защита программы на Qt
Отправлено: Wlad_C от Июнь 18, 2010, 14:40
О том, как ломать программы и как их защищать (что не следует делать) очень хорошо описано в книгах Крис Касперски. Его книг и статей очень много в Инете.


Название: Re: Защита программы на Qt
Отправлено: ti0 от Декабрь 27, 2016, 00:20
Нашел интересную статью о защите Qt приложений http://sdr-labs.com/blog/zaschita_qt_prilogheniya_ot_modifikacii (http://sdr-labs.com/blog/zaschita_qt_prilogheniya_ot_modifikacii)


Название: Re: Защита программы на Qt
Отправлено: Alex Custov от Декабрь 27, 2016, 00:27
Нашел интересную статью о защите Qt приложений http://sdr-labs.com/blog/zaschita_qt_prilogheniya_ot_modifikacii (http://sdr-labs.com/blog/zaschita_qt_prilogheniya_ot_modifikacii)

Наврятли это защита:

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

такая защита обходится банальной заменой jne на je в бинарном файле, и функция checkSelfCRC() начинает возвращать true вместо false.


Название: Re: Защита программы на Qt
Отправлено: Bepec от Декабрь 27, 2016, 09:04
Идеальной защиты нет.
Защита программ сводится к тому, чтобы взламывать программу было дороже, чем купить её. Но и тут находятся энтузиасты.


Название: Re: Защита программы на Qt
Отправлено: QuJu от Май 19, 2017, 19:18
Добрый день всем,
 Вопрос по смежной теме топика:
 Рассматривал откомпилированный файл в текстовом редакторе. И там видно все методы signal/ slot с названиями и что передается. Можно это как то скрыть от простых глаз?


Название: Re: Защита программы на Qt
Отправлено: kambala от Май 20, 2017, 00:29
используешь коннект старого вида через макросы или новый через указатели на методы?


Название: Re: Защита программы на Qt
Отправлено: QuJu от Май 20, 2017, 00:46
используешь коннект старого вида через макросы или новый через указатели на методы?
Старого вида


Название: Re: Защита программы на Qt
Отправлено: Igors от Май 20, 2017, 08:24
Старого вида
Ну так ответ-то уже прозвучал  :)


Название: Re: Защита программы на Qt
Отправлено: QuJu от Май 20, 2017, 09:14
Старого вида
Ну так ответ-то уже прозвучал  :)

Да, я понял. спасибо)


Название: Re: Защита программы на Qt
Отправлено: deMax от Май 22, 2017, 12:16
Идеальной защиты нет.
Защита программ сводится к тому, чтобы взламывать программу было дороже, чем купить её. Но и тут находятся энтузиасты.
Идеальная защита, это когда часть функционала находиться на сервере(при условии что сервер не ломанут).

А так защита от модификации ASProtect и аналоги. Ключ продадут, id железа можно подделать, кроме сервера сложно создать хорошую защиту.