Разработка ПО: защита от промышленного шпионажа

Разработка ПО: защита от промышленного шпионажа

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

Автор: Дмитрий Гусев
Источник: StarForce 

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

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

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

Сегодня реверс-инжиниринг становится наиболее популярным способом анализа приложений. Международная организация производителей банкоматов ATMIA называет именно реверс-инжиниринг как основную угрозу для программной среды банкоматов.

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

Эффективным способом решения проблемы представляется защита исполняемого кода приложения от анализа и модификации.

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

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

С помощью запутывания можно перемешать в программе куски кода или действия так, что логика работы становится совершенно непонятной. Кроме того, при запутывании идентификаторы меняются с читаемых на индексные, вставляются новые куски неисполняемого кода. Иногда при защите программного продукта используется архивация данных программы, которые находятся в стеке (область памяти, где хранятся данные программы). Для предотвращения пошагового выполнения программы, а соответственно и отладки, стек определяют в ее тело. А если там находятся данные для работы, то процесс анализа усложняется еще больше. Для усложнения работы взломщиков в исполняемый код встраиваются «пустышки», которые выполняют некоторую сложную и на первый взгляд важную работу, но на самом деле не имеют никакого отношения к логике работы. Еще один вариант запутывания исполняемого кода – шифрование содержимого файлов данных, сами защищенные файлы при этом переносятся в защищенный контейнер. Особенностью защищенного контейнера является то, что к нему можно обращаться только из защищенного приложения.

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

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

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


 			

Где кванты и ИИ становятся искусством?

На перекрестке науки и фантазии — наш канал

Подписаться