Size: a a a

2021 May 14

S

Sergey eSKon in Qt
я рассказал идею, у меня было много чего ещё, дальше можно дорабатывать как угодно.
источник

I

Ilya F. <IF> in Qt
http://www.asprotect.ru/asprotect64.html
вот таким пользовались на предыдущем месте работы
использование для 32bit  приложения (год примерно 2009-2011)
из забавного - программа некорректно работала в некоторых кейсах, будучи собранной с -О2 оптимизацией.
Сейчас такой ерундой не страдаем.
источник

I

Ilya F. <IF> in Qt
Да и приложение было на C++|Qt? так что не совсем оффтопик
источник

S

Sergey eSKon in Qt
вообще надо самому попробовать что-нибудь сломать, тогда будет понимание что и как делать. Конечная цель - не абсолютная защита, а максимально усложнение задачи взлома
источник

F

FPOHTMEH in Qt
Таким примитивные защиты ломаются простой пошаговой отладкой, а потом в сравнении меняют == на != чтобы не "ругалось".
Не стоит изобретать велосипеды
источник

F

FPOHTMEH in Qt
Если самодельная "защита" хорошо себя показала, скорее всего никто не ставил цель её сломать
источник

S

Sergey eSKon in Qt
несомненно, только оно того не стоит для нишевой программы.
источник

S

Skarn in Qt
Обычный юзер не сломает хотя бы.
источник

S

Sergey eSKon in Qt
И кстати, мою программу таки ломали, чуть не в соседнем офисе (у меня там ещё кое-что было, что по-тихому просто сообщало куда нужно), так что заказчик заподозрил, что это я с кем то поделился ключом. Но поскольку это никак не отразилось на его выручке, то мы просто проигнорили этот случай
источник

S

Skarn in Qt
Вообще есть неплохой вариант по методу security through obscurity с использованием форсированного инлайнинга когда. (BOOST_FORCEINLINE, например). Имплементируем процедуру, которая валидирует лицензию и помечаем как форс инлайн. В итоге код проверки встраивается во все места использования, и патчить становится максимально лениво, если использований много.
источник

S

Sergey eSKon in Qt
При этом я встречал программы с сильной зашитой, которые создавали массу проблем легальным пользователям
источник

S

Sergey eSKon in Qt
например невозможность запустить её на виртуалке
источник

AU

Abu Umar in Qt
значит не использовать условия и всё.  force_inline уже в стандарте, но все условия всё равно не слишком сложно заменить. Если можно привязать лицензию к hw id то в compile time шифровать адреса функций а в runtime расшифровывать их по hw id. Будет немного сложнее узнать где и какие адреса нужно патчить
источник

S

Sergey eSKon in Qt
ну я в добавок ещё плотно вписал там сисету сигналов/слотов кьютовую, но об этом не хочу рассказывать
источник

AU

Abu Umar in Qt
обфусцировали короче
источник

S

Sergey eSKon in Qt
то есть суть в том, чтобы прямых переходов не было
источник

S

Sergey eSKon in Qt
ну не уверен. Всё-таки обфускация описывает некую переработку исходного кода для затруднения его понимания, а не усложнение логики для затруднения взлома
источник

AU

Abu Umar in Qt
А, ну да, если event loop через queued connection то убираются прямые переходы
источник

AU

Abu Umar in Qt
Хочу передавать через queued connection  void *const, qt говорит мол сделай qRegisterMetaType<void *const>() а когда делаю, Qt говорит мол ты забыл Q_DECLARE_METATYPE(void *const), а вот это сделать я не могу, ругается что T* не может скастоваться к void* (естественно, у меня ж константный указатель. Как быть?
источник

SK

Stas Koynov in Qt
подскажите на счет QVariant. как перевести в строку, если в нем содержиться StringList или QRect. нужно сохранить ключевые значения из конфига (ini QSettings) в лог.
config.value(key).toString().toStdString() для QRect и списка выводит пустоту. если же печатать через qDebug « config.value(key) все шикарно печатает типа:
QVariant(QRect, QRect(-20,-70 20x70))
QVariant(QStringList, ("17", "18", "19"))
источник