Защита приложения. Часть 3. Финальный аккорд

Третья часть: протекторы, лицензии и мораль.
16 декабря 2015326451Илья Бубнов170715

Третья часть саги о защите приложений: протекторы, лицензии и мораль. Предыдущие части: «Защита приложения. Часть 1», «Защита приложения. Часть 2. Обфускация»

Протекторы

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

Нас спасет протектор. Посмотрим, что он из себя представляет, на примере простого платного решения Themida.

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

Ещё одна функция протектора — защита от изменений: Themida создаёт копию кода на защищённом носителе и в фоновом режиме периодически сравнивает запущенную программу с оригиналом. Когда протектор обнаруживает взлом, происходит мутирование кода, т.е. повторная генерация исполняемого файла с изменениями: с другим методом обфускации или изменёнными данными. А чтобы ещё усложнить жизнь пирату, Themida защищает данные и память от мониторинга.

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

Игрушки поинтереснее — замена части используемого кода на откровенный мусор, лишь визуально похожий на правду. С точки зрения взломщика он тоже исполняется, но в случае с пятью-шестью такими заменами найти обман непросто. Настоящий же код подгружается извне, в случае, если протектор не заметил следов взлома. Хитрый момент — создание «случайных» ошибок или пустых комментариев. Самодовольный взломщик с удовольствием подправит код, а лишнее уберет.

Лицензии

Лицензия отличается от ключа тем, что ее не проверяют каждый раз. При грамотном применении, единственное, что знает пользователь — то, что она у него есть с момента подписания соответствующего соглашения. Разработчик же в режиме реального времени отслеживает использование лицензии.

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

Учитывайте, что иногда связи с сервером нет. Если пользователь запустит приложение там, где нет Интернета и не сможет им пользоваться — его это не порадует. Ограничьте доступ к функционалу, внутри кода записывайте идентификатор в файл, а при подключении к Интернету синхронизируйте идентификатор и данные устройства с сервером.

Давайте жить дружно

Абсолютной защиты нет: обфускация обходится, протекторы преодолеваются, а хранение информации на удаленном сервере не спасает от подмены адреса самого сервера. Чем защита серьезнее — тем она интереснее для взломщиков, которые ломают программы не ради денег, а для души.

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

Что думаете? Пишите в комментариях.

 А тем, кто определился с тем, что хочет стать программистом, рекомендуем профессию «Веб-разработчик».