116

Ответ Ghost687 в «Конец реверс-инжинирингу: релиз Markov Shield AI — софт, который "намертво" привязывает код к железу»⁠⁠3

Серия Простыми словами
Это не допилили малость "защитнички".

Это не допилили малость "защитнички".

Просто разрабы неправильно поняли суть проблемы и решили на отвяжись поставленную задачу.

Если кто не понял исходный пост, то это такая своеобразная защита методом вынесения какой-то функции из читабельного или уязвимого к анализу софта в черный ящик, который трудно реверсинженерить.

Правильный способ сделать такую защиту трудновзамываемой есть, и тут вспоминается один из проектов моей далёкой бурной разработческой молодости.

Меня как-то озадачили необходимостью защиты некоторого инженерного софта (написанного, кстати, мною же) от нелицензионного использования. Важно было, чтобы у лицензиата не было физической возможности обеспечить нашим софтом больше рабочих мест, чем те, за которые было уплочено.

После разговора с потенциальными клиентами мы сразу решили, что онлайн защиты нам не подходят. Ну, типа, если у клиента ляжет интернет по какой-то причине, он не сможет обслужить своих клиентов, кои обычно богатые деньгами. но небогатые временем серьёзные люди. Все наши клиенты не хотели, чтобы софт зависел от интернета.

В связи со всем вышеперечисленным выбор наш пал на аппаратные ключи, которые в клиентский комп вставляются в USB-порт и без которых наша защищаемая CAD-система превращается в тыкву.

Вот такие вот ключики мы использовали

Вот такие вот ключики мы использовали

Внутри у него своего рода маленький компьютер, примерно такой же находится в чипах банковских карт и RFID-карт доступа. Фактически там микроконтроллер, на котором запущена маленькая ява-машина, выполняющая код, который в устройство запищет разработчик.

Достать записанный в ключ код - задача настолько сложная, что трудно окупить таким образом стоимость взлома этого донгла безлимитными лицензиями на что угодно.

Правильный способ использования защиты ПО на основе таких ключей заключался в том, чтобы вынести на этот ключ кусочки секретных алгоритмов, которые обычно размещены прямо в бинарниках защищаемой программы.

Это очень не просто - выбрать такие чистые (в функциональном смысле). компактные (в донгле не так много места), не критичные к скорости (ява-машина в ключике не впечатляла скоростью, а всё ещё и через USB2.0 работало... если не 1.1, не помню уже), нетривиальные функции, которые нельзя было бы повторить так просто в эмуляторе ключа.

Да, можно было так же наговнякать как в исходном посте, вернуть true и проверять потом, но такие ключи - просто деньги на ветер.

По-моему, я выносил в ключи функции поиска и фильтрации граней на многограннике для определения поверхностей, подлежащих обработке. Алгоритм самописный, не тривиальный, достаточно быстро работал на ядре этой финтифлюжки, не требовавший объёмных аргументов и т.д.

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

И да, надо понимать, что любая просто быстро и наивно реализованная защита легко и дёшево обходится. Главное, чтобы это было экономически выгодно, а за взломом дело не встанет.

Вот и тут, не так просто найти даже в большом инженерном приложении кусочка, который можно настолько чисто изолировать, чтобы он мог работать на отдельном процессоре. А ещё надо, чтобы разработка и исправление ошибок в рамках поддержки защищенного ПО не превратились в кошмар, чтобы неаккуратность или ошибка разработчиков не поломали законно купленные лицензии.

И вот тут я расскажу ещё про один лайфхак. Защита должна быть многослойная и вероятностная.

Если ваш защитный механизм мгновенно замечает факт нелицензионного использования, и тут же блокирует работу защищаемого софта, то это плохой защитный механизм.

Хороший механизм будет некоторое время накапливать признаки нелицензионного использования, порог блокировки будет рандомизирован таким образом, чтобы нельзя было "нащупать" коридор допустимого при обходе защиты.

В нашем случае если приложение не видело аппаратный ключ, оно рисовало поверх рабочей области простой сплеш-скрин с просьбой его подключить. Технически это никакая не защита. потому что требуется элементарное вмешательство на уровне API Windows, чтобы убрать помеху и работать дальше. Но после этого софт переходит в режим войны.

Он тихо и рандомно ломает данные проектов, над которыми работают пользователи взломанного приложения. Проигнорированное предупреждение гласило, что при вмешательстве в работу ПО (а обход защиты именно этим и является) может привести к необратимой порче или потере данных.

Время от времени алгоритмы, вынесенные на аппаратный ключ падают с ошибкой и указанным выше предупреждением, а если ключ детектирует необычный баланс статистики вызовов защищенных функций, и их тайминги, то это признак взлома путём проксирования одного ключа на несколько рабочих станций. Все такие признаки накапливаются, а после рандомизированного порога приводят к рандомизированной отложенной порче выходных данных защищенных (вынесенных на донгл) функций.

Эти рандомизации критериев и отложенные реакции позволяют усложнить и замедлить цикл подбора параметров защищенных функций при взломе.

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

В геймдеве, кстати, её не использовали обычно скорее всего из-за медленной работы и трудности вынесения чувствительных и достаточно нетривиальных алгоритмов на аппаратный ключ.

Ну вот такой вот кусочек совершенно ненужного теперь опыта. Поделился с подписчиками.

Если непонятно что-то объяснил - спрашивайте. Мне казалось я умею объяснять сложные вещи простыми словами, особенно если сам понимаю эти сложные вещи. Но и на старуху, как говорится...

Типовой дисклеймер, которыми я снабжаю все свои посты.
Этот текст написан биогенным естественным интеллектом, работающим на аппаратном обеспечении моего собственного головного мозга. Никаких методов написания или улучшения текста генеративными моделями не применялось.
В наше время такое встречается не часто и я такое ценю, потому и добавляю такой дисклеймер.

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

7
Автор поста оценил этот комментарий
ответный пост

Воспоминание разблокировано. Или как НЕ ТРАДИЦИОННО использовать ПО.


В районе нулевых была написана софтина по управлению компьютерным клубом в котором мне посчастливилось админом штаны просиживать. Естественно из-за лени, что бы в тетрадку не писать - какой комп и на сколько времени брали и сколько бабла отдали. И написана она была на VB5. И в один прекрасный день хозяин и говорит, что несколько клубов тоже её бы хотели и даже за деньги. Я то и не против лишних копеек. Покупать на совсем за дорого, естественно они не возжелали, но согласились платить помесячно. И тогда я решил что надо куда то вписывать данные о том, до какого срока программа может работать. Т.к. с VB я уже много работал, то был в курсе что шапке, скомпилированного ЕХЕ-шника, есть пустое место. И вот, воспользовавшись INNO-Setup я сделал инсталлятор, что спрашивает название клуба для вывода на экран и прописывает его, закодировав чуток, в распакованный файлик. Ну а в файле ключа так же кодировалось название и срок использования - примитивно, через перемешивание и добавления лишних символов и хранился он исключительно на админском ПК. Т.е. в следующий раз мне достаточно было передать обновлённый файл ключа. Естественно со сверкой ключа на управляющей программе у админа проблем не возникает, но вот на клиентских машинах... А там всё тривиально, проверка наличия ключа (он забирается с админа при запуске), даты в нём и соответствия имени клуба зашитого в ЕХЕ-шник. Сама же система "вредительства" проста до безобразия. Чем дальше прошёл срок, тем чаще срабатывает принудительная перезагрузка ПК. Естественно в рандомный промежуток времени после запуска программы. На админском же просто выдаётся дата активности ключа с подсветкой фона: белое, жёлтое. Т.е. даже в просроченное время всё продолжает работать, разве что лишая клиентов клуба комфортного времени отдыха.

Ну а что если без файла ключа? ПО просто не работает - выключается, а т.к. оно было встроено у клиентов вместо стандартного проводника, то и комп просто выключается. При этом админское место сразу выдаёт транспарант, что ключ не найден, купить там-то (собственно при просроке это же окно) и нажмите ОК для выхода. Ну а в случае просроченного ключа админка просто продолжает работать как ни в чём не бывало.

Да-да. Это были лихие время и совсем сильно наказывать было бы явно себе дороже.

Стоит сказать что попытки работать без продления, как и стырить ключ с другого клуба были. Но вот кул-хацкеров нанимать, для взлома защиты, оказалось дороже, чем заплатить за продление.

Ну и конечно, этот приём с пустым местом в скомпилированном файле, я после использовал много где ещё, т.к. выяснилось что не только VB5 грешил таким образом. Например, вписывал в него серийник одной из железяк при запуске, если там было пусто. А если не пусто, то сравнивал его с текущий железкой. Вот такая примитивность в качестве защиты от копирования. 😎

Показать полностью
комментарии (5)

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества