Что такое реверс инжиниринг
Реверсинг и обфускация, как это работает
Многие в детстве разбирали свои игрушки в надежде понять, как они устроены, т.е. задатки реверс-инженера есть у каждого второго. Однако, у кого-то это с возрастом прошло, в то время как другие, наоборот, отточили свои умения и достигли в этом определенного мастерства.
Кому нужен реверс-инжиниринг программного обеспечения?
Если отбросить промышленный шпионаж, реверс-инжиниринг широко используется аналитиками для препарирования вирусов и создания средств защиты. В то же время, аналогичный подход применяется для анализа ПО с закрытым исходным кодом, поиска уязвимостей и создания вирусов. Также энтузиастами проводится анализ драйверов и некоторых других полезных утилит с закрытым исходным кодом для того, чтобы создавать аналоги для Linux с открытым кодом. Хотите поиграть бесплатно? Генераторы ключей для платного ПО, пиратские серверы онлайн-игр также создаются с помощью реверс-инжиниринга. Однако, взлом софта и обратная разработка это, в большинстве случаев, разные вещи, для взлома, как правило, достаточно разобрать процесс проверки ключа лицензии, а во втором случае придется потратить намного больше времени и сил.
Как бороться с реверсингом?
Прежде всего, можно затруднить анализ программы на уровне разработчика, продвинутый кодер может раздуть код искусственным образом, тогда, даже имея оригинальные исходники, зачастую будет непонятно, как все работает. Этот способ не рекомендуется, потому как над одним и тем же проектом в разное время могут вести работу различные команды разработчиков, искусственное усложнение исходного кода может сильно затруднить работу.
Самым известным и популярным способом защиты является обфускация – превращение исходного кода в кашу, понять что-либо в которой в принципе невозможно. Программа берет исходную инструкцию в коде и делает из нее несколько, делающих то же самое, плюс еще много ложных инструкций, которые предназначены исключительно для того, чтобы запутать реверс-инженера. Широко применяется как в обычных программах, так и в вирусах, особенно в полиморфных, что приводит к появлению многих копий одной и той же вредоносной программы, каждая новая копия которой отличается от оригинала и других копий. С шедеврами в области обфускации кода и признанными мастерами в этой области можно познакомиться, например, на этом сайте.
Что касается надежных программ для обфускации кода, с этим сложнее. На самом деле, их сотни, и многие являются платными. Ссылки не привожу по той причине, что надежность той или иной программы определить сложно. Если на торренте лежит взломанный обфускатор, значит он уже проанализирован, алгоритмы его работы, возможно, уже известны, значит он бесполезен.
Помните о том, что помимо защиты от посторонних обфускатор не дает разработчику возможности отлаживать собственный код, поэтому при отладке необходимо его отключать.
Как бороться с защитой от реверсинга?
А тем, кто хочет стать программистом, рекомендуем профессию «Веб-разработчик».
Многие в детстве разбирали свои игрушки в надежде понять, как они устроены, т.е. задатки реверс-инженера есть у каждого второго. Однако, у кого-то это с возрастом прошло, в то время как другие, наоборот, отточили свои умения и достигли в этом определенного мастерства.
Кому нужен реверс-инжиниринг программного обеспечения?
Если отбросить промышленный шпионаж, реверс-инжиниринг широко используется аналитиками для препарирования вирусов и создания средств защиты. В то же время, аналогичный подход применяется для анализа ПО с закрытым исходным кодом, поиска уязвимостей и создания вирусов. Также энтузиастами проводится анализ драйверов и некоторых других полезных утилит с закрытым исходным кодом для того, чтобы создавать аналоги для Linux с открытым кодом. Хотите поиграть бесплатно? Генераторы ключей для платного ПО, пиратские серверы онлайн-игр также создаются с помощью реверс-инжиниринга. Однако, взлом софта и обратная разработка это, в большинстве случаев, разные вещи, для взлома, как правило, достаточно разобрать процесс проверки ключа лицензии, а во втором случае придется потратить намного больше времени и сил.
Как бороться с реверсингом?
Прежде всего, можно затруднить анализ программы на уровне разработчика, продвинутый кодер может раздуть код искусственным образом, тогда, даже имея оригинальные исходники, зачастую будет непонятно, как все работает. Этот способ не рекомендуется, потому как над одним и тем же проектом в разное время могут вести работу различные команды разработчиков, искусственное усложнение исходного кода может сильно затруднить работу.
Самым известным и популярным способом защиты является обфускация – превращение исходного кода в кашу, понять что-либо в которой в принципе невозможно. Программа берет исходную инструкцию в коде и делает из нее несколько, делающих то же самое, плюс еще много ложных инструкций, которые предназначены исключительно для того, чтобы запутать реверс-инженера. Широко применяется как в обычных программах, так и в вирусах, особенно в полиморфных, что приводит к появлению многих копий одной и той же вредоносной программы, каждая новая копия которой отличается от оригинала и других копий. С шедеврами в области обфускации кода и признанными мастерами в этой области можно познакомиться, например, на этом сайте.
Что касается надежных программ для обфускации кода, с этим сложнее. На самом деле, их сотни, и многие являются платными. Ссылки не привожу по той причине, что надежность той или иной программы определить сложно. Если на торренте лежит взломанный обфускатор, значит он уже проанализирован, алгоритмы его работы, возможно, уже известны, значит он бесполезен.
Помните о том, что помимо защиты от посторонних обфускатор не дает разработчику возможности отлаживать собственный код, поэтому при отладке необходимо его отключать.
Как бороться с защитой от реверсинга?
А тем, кто хочет стать программистом, рекомендуем профессию «Веб-разработчик».
Что такое реверс-инжиниринг?
Реверс-инжинирингом называют процесс, при котором физический объект разбирают на части и измеряют. Таким образом можно понять, как он был изготовлен, из каких компонентов состоит и как работает. Объектом может быть примерно всё: от огромного авианосца или инженерного сооружения вплоть до крошечных элементов часового механизма.
Введение
В отличие от традиционного процесса проектирования, где необходимо начинать с нуля и создавать абсолютно новый продукт, реверс-инжиниринг стартует с анализа имеющейся установки или компонента и движется в обратную сторону, разбирая объект на составные части. Это можно делать как физически, так и в цифровом формате: деталь за деталью, часть за частью, слой за слоем или шаг за шагом.
Целью реверс-инжиниринга обычно является создание 3D-модели, которую можно использовать в CAD-приложениях. При правильном подходе реверс-инжиниринг дает возможность применять полученную информацию о конструкции объекта для решения целого ряда задач:
Как получить данные для реверс-инжиниринга
3D-сканирование снятого с производства поворотного круга с помощью Artec Eva. Впоследствии 3D-сканы экспортировали в программу для реверс-инжиниринга Geomagic Design X и перевели их в цельную модель, которую затем использовали для производства аналогичной детали.
Хотя время от времени, чтобы получить данные для реверс-инжиниринга, используются другие методы (как аналоговые, так и цифровые), всё же самыми популярными на сегодняшний день являются 3D-сканеры, координатно-измерительные машины и КТ-сканирование. В зависимости от сферы применения у каждого метода есть свои плюсы и минусы. Многое определяется бюджетом, опытом работы с выбранной технологией и временем, выделенным на реализацию проекта.
Полигональная 3D-модель поворотного круга, созданная на основе сканов Artec Eva
Готовая к реверс-инжинирингу CAD-модель поворотного круга
КТ-сканирование
КТ-сканирование — это эффективный способ провести измерение как внешней, так и внутренней поверхности объекта. КТ считается популярным инструментом медицинской диагностики. Однако этот метод также может быть подходящим решением для реверс-инжиниринга (в определенных ситуациях и для определенных сфер применения). Компьютерный томограф собирает информацию о форме объекта с помощью рентгеновского излучения. Поскольку рентгеновские лучи проходят сквозь объект, можно не беспокоиться о том, как лучше его расположить. Рентген может «увидеть» все внутренние, закрытые участки, например, поры и другие полости. Излучение в виде конусов (либо срезов) проходит сквозь объект; собираемые данные формируются в слои и собираются в цельную 3D-модель.
Промышленный компьютерный томограф EasyTom. Изображение предоставлено компанией CyberOptics Corporation
Однако у томографов тоже есть недостатки. Поскольку для анализа детали они используют радиацию, сканируемый объект должен помещаться внутри специальной камеры томографа (чтобы рентгеновские лучи не могли проникнуть наружу и навредить оператору, эта камера полностью герметичная). Это ограничение не позволяет оцифровывать большинство объектов среднего и крупного размера.
В то время как преимуществом томографа является возможность оцифровывать как внешние, так и внутренние поверхности, эта технология подходит только для сканирования ограниченного числа промышленных объектов.
Кроме того, что цена на надежный томограф может достигать 250 000 долларов США и даже больше, а также что для работы с ним требуются специально обученные операторы, полученные таким образом сканы металлических объектов и даже деталей с металлическими компонентами могут содержать большое количество шума. Это связано с тем, что металл поглощает и рассеивает рентгеновские лучи, что значительно снижает точность сканов. Металлы с низкой плотностью (например, алюминий) сканировать намного проще, чем, например, сталь.
В идеале объект должен быть небольшого размера, состоять из пластика или из металла низкой плотности. В противном случае КТ-сканирование может потребовать несколько дополнительных часов на обработку сканов, только чтобы удалить артефакты и попытаться восстановить точные размеры объекта. Есть вероятность, что вы вообще не сможете оцифровать деталь, если она имеет неподходящий размер или плотность материала.
Контактное измерение (координатно-измерительные машины)
Координатно-измерительные машины (КИМ) отличаются исключительной точностью полученных данных и подходят как для контроля качества, так и для реверс-инжиниринга. Они используют заранее запрограммированные или контролируемые оператором датчики, которые записывают серию XYZ-координат массива точек на поверхности объекта, а затем шаг за шагом реконструируют его видимую геометрию.
Два инженера проверяют компонент производственной установки с помощью КИМ
При высокой стоимости оборудования и сопутствующих расходах КИМ может быть эффективным решением для съемки объектов различного размера, выполненных из разных материалов.
Большинство КИМ представляют собой очень тяжелые устройства, которые обычно устанавливаются в одном помещении, откуда их очень сложно (а иногда даже невозможно) транспортировать в другой цех или компанию, если вдруг возникает такая необходимость. Из-за этого КИМ невозможно отвезти к клиенту, чтобы отсканировать объект там, где ему удобно, или же отправиться с такой машиной в другую страну (конечно, если необходимое качество данных не может обеспечить портативная КИМ). Кроме того, для работы с таким оборудованием требуются специально обученные операторы, а для настройки и перепрограммирования необходимо довольно много времени. Помимо этого, КИМ нужно тщательно оберегать от случайных ударов, толчков и вибраций, которые могут полностью сорвать проект, если останутся незамеченными.
Контакт с поверхностью гарантирует исключительную точность 3D-данных, собираемых датчиком КИМ. Однако есть и недостатки: данные собираются с низкой скоростью, машина не способна анализировать участки поверхности, до которых не может добраться датчик, существует риск серьезно повредить некоторые хрупкие объекты и т. п.
Поскольку самые распространенные типы датчиков КИМ непрерывно соприкасаются с поверхностью измеряемого объекта, стоит упомянуть и потенциальный риск повреждений и неточностей. Существует очень много материалов, которые могут повреждаться из-за воздействия датчика: на их поверхности могут появляться царапины, потертости или шероховатости. Риск деформации абсолютно недопустим при работе с очень дорогими или бесценными объектами, включая музейные экспонаты, раритеты из частных коллекций и др.
Если говорить о точности, то при контакте с такими мягкими поверхностями, как резина или силикон, датчик может легко деформировать объект, что в лучшем случае приведет к получению неточных данных, а в худшем — к необратимому повреждению. И даже это еще не всё. Если измеряемый объект имеет углубления или труднодоступные участки, а датчик КИМ не может до них добраться, то все эти элементы придется воссоздавать вручную в программе САПР, а значит, будут отклонения от оригинала.
3D-сканирование
Для сотен тысяч пользователей во всем мире профессиональные 3D-сканеры всех типов (настольные, портативные и устанавливаемые на штатив) являются надежным решением для реверс-инжиниринга и других задач. В то время как томографы и КИМ имеют высокую цену, практически лишены мобильности и требуют солидного опыта работы, лучшие 3D-сканеры отличаются противоположными качествами.
Сканирование с помощью структурированной подсветки
3D-сканеры на основе технологии структурированной подсветки снимают объект путем направления на его поверхность пучка света с определенным паттерном. Когда свет возвращается к датчикам сканера, устройство анализирует искажения паттерна, возникшие при контакте с поверхностью, и преобразует их в точные цифровые копии объекта в программе этого сканера. Такая цифровая копия в формате полигональной 3D-сетки может затем использоваться для создания CAD-модели, используемой для реверс-инжиниринга этого объекта.
3D-сканирование днища Volvo XC90 с помощью Artec Leo для реверс-инжиниринга выхлопной системы кроссовера
Одним из главных преимуществ использования 3D-сканеров на базе технологии структурированной подсветки является высокая скорость съемки. В отличие от КИМ или фотограмметрии, новейшие профессиональные 3D-сканеры со структурированной подсветкой могут за считанные минуты оцифровывать даже крупные объекты, причем с субмиллиметровой точностью и без контакта с поверхностью. В зависимости от модели сканера, луч света, который вы направляете на объект в процессе оцифровки, будет снимать от 1 миллиона до 3 миллионов точек в секунду.
Обработка скана ходовой части Volvo XC90 в Artec Studio
При работе с 3D-сканером на базе технологии структурированной подсветки вы сразу видите результаты съемки на экране ноутбука или сканера и можете рассмотреть каждый оцифрованный участок или область. Если что-то пропустили, то можно просто сделать еще одно-два движения сканером, чтобы заполнить прогалы.
Наконец, 3D-сканеры со структурированной подсветкой совершенно безопасны в использовании: они не вредят ни оператору, ни тем, кого он снимает. Это одна из главных причин, по которой такие 3D-сканеры широко используются в сфере здравоохранения.
Лазерные сканеры для крупных объектов и панорам
Устанавливаемые на штатив лазерные 3D-сканеры (лидары) можно разделить на две категории: времяпролетные и фазовые. Первые направляют лазерный луч на объект или площадку, на которой находятся несколько объектов, а затем высчитывают точное расстояние до него, фиксируя время, за которое свет вернулся к датчику сканера. Датчик также анализирует интенсивность излучения.
Фазовые лидары направляют равномерный луч лазера в нескольких разных фазах. Когда луч возвращается обратно к датчику сканера, изменения света анализируются специальными алгоритмами обработки и используются для определения точного расстояния между сканером и снимаемым объектом и/или площадкой.
Подготовка устанавливаемого на штатив устройства Artec Ray для 3D-сканирования палубы плавучей платформы
На основе полученных данных создается цифровое изображение объекта или панорамы в виде облака точек с высоким разрешением. Затем эти облака точек можно перевести в полигональные сетки с помощью программы для сканирования. 3D-сетки можно использовать в самых разных целях, включая создание CAD-моделей для реверс-инжиниринга, виртуальные транспарентные модели, поэтажные планы зданий и т. п.
Лазерные 3D-сканеры с увеличенным рабочим расстоянием могут легко оцифровывать крупные и даже огромные объекты и панорамы, причем делают это с невероятной точностью. Лучшие сканеры этого типа имеют рабочее расстояние от одного до 100+ метров. Они используются для создания метрологически точных 3D-моделей автомобилей, реактивных самолетов, суперъяхт и даже целых заводских цехов.
Благодаря надежному ПО для 3D-сканирования данные с лазерных сканеров с увеличенным радиусом действия можно легко объединить со сканами портативных 3D-устройств, чтобы создать цельную 3D-модель, в которой не будет пропущен ни один важный элемент объекта или панорамы. Хорошим примером может послужить реверс-инжиниринг современного пассажирского самолета с помощью лазерного сканера, который отснял конструкцию воздушного судна, и портативного 3D-сканера, который оцифровал приборную панель и сложные детали в кабине пилотов и салоне.
Простота использования, непревзойденные возможности сканирования
Настольные, портативные 3D-сканеры со структурированной подсветкой и лазерные устройства с увеличенным рабочим расстоянием настолько просты в использовании, что даже студенты всего за несколько часов могут научиться оцифровывать и крупные, и мелкие объекты. Именно благодаря портативности их можно использовать в помещении, на улице и вообще там, где это удобно клиенту (как бы далеко ни пришлось везти сканер).
По сравнению с томографам и КИМ, использование которых подразумевает значительные временные затраты, настольные и портативные 3D-сканеры могут оцифровать те же объекты в разы быстрее, что существенно снижает нагрузку на оператора и повышает продуктивность. Устанавливаемые на штатив лазерные сканеры еще более удобны в использовании: вы просто ставите штатив в нужное место и запускаете сканирование.
3D-сканеры являются незаменимыми инструментами для большинства задач, связанных с реверс-инжинирингом. Лучшие сканеры отличаются высокой скоростью работы, безопасностью и простотой использования. Они способны с субмиллиметровой точностью оцифровывать самые разные объекты (от мелких до крупных).
Чтобы полностью реконструировать всю поверхность объекта, включая углубленные участки и компоненты, при необходимости можно отсканировать их дважды.
Итак, профессиональные 3D-сканеры (настольные, портативные и лазерные с увеличенным радиусом действия) являются надежным решением для реверс-инжиниринга объектов самого разного плана: от кольца с бриллиантом вплоть до таких объектов, как тяжелая техника, самолеты и здания.
Обратный инжиниринг
Обра́тная разрабо́тка (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering ) — исследование некоторого устройства или программы, а также документации на них с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.
Применяется обычно в том случае, если создатель оригинального объекта не предоставил информации о структуре и способе создания (производства) объекта. Использование обратной разработки может противоречить закону об авторском праве и патентному законодательству.
В настоящее время под словами «reverse engineering» чаще всего понимается т. н. «clean room reverse engineering», то есть процесс, при котором одна группа разработчиков анализирует машинный код программы (в сленге хакеров для этого процесса используется также выражение «обратный инжиниринг» или «реверсный инжиниринг»), составляет алгоритм данной программы на псевдокоде, либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства. После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «fair use», то есть добросовестного использования оригинальной программы. Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом.
Содержание
Сферы применения обратной разработки
Электроника
Копирование различных электронных блоков без фактической разработки. Известно, что часть советской цифровой электроники копировалась. Например, американская серия интегральных схем 74 и её советский аналог К(Р)155.
Ещё один пример обратной разработки — создание компанией AMD процессора Intel 80386.
Программное обеспечение
С развитием Интернета популярные операционные системы и программы всё интенсивнее исследуются на предмет обнаружения в них уязвимостей или т. н. дыр. В дальнейшем найденные дыры могут использоваться для получения несанкционированного доступа к удалённому компьютеру или компьютерной сети.
Одним из широко известных примеров обратной разработки является исследование IBM, ставшее серьёзным шагом на пути развития производства IBM-совместимых компьютеров сторонними производителями. Создание сервера GNU/Linux и работающего с серверами на базе ОС Microsoft Windows) также потребовало обратной разработки используемого SMB.
Обратная разработка программного обеспечения производится с помощью следующих методик.
Базы данных
может использоваться при создании реляционной модели базы данных.
Промышленность
Обратная разработка продукта конкурента с целью узнать его устройство, принцип работы и оценить возможности создания аналога.
Военная промышленность
Самыми известными фактами обратной разработки во время второй мировой войны являлись:
Для анализа исходного кода
Существуют программы, которые предоставляют как возможность восстановления (обратный, reverse) по исходному коду общего системного проекта (классы, связь между ними и т.п.), так и прямой генерации исходного кода на основе созданного проекта (функциональных блоков бизнес-процесса):
Реверс-инжиниринг ПО и российское право
Этот материал представляет собой взгляд на реверс-инжиниринг программного обеспечения с позиций российского права. Помимо анализа норм закона, приведены примеры как договорной практики, так и судебной.
Рассмотрение с позиций российского права такого вида деятельности, как реверс-инжиниринг программного обеспечения, предлагаю начать с представления следующей абстрактной ситуации:
Есть компьютерная программа. Есть компания, которая приобрела лицензию на такое ПО и использует его в своей деятельности. По неизвестной причине на серверах компании программа работает нестабильно. Руководство компании планирует поручить группе сторонних специалистов провести реверс-инжиниринг этой программы для определения причин нестабильности ее работы на серверах компании в целях их устранения.
Такая ситуация – лишь один из примеров, когда встает вопрос о проведении реверс-инжиниринга нужного софта. Причины для этого могут быть самыми разными. Еще пара абстрактных примеров:
Словом, таких причин наберется немало. И если приступать к этому делу вплотную, то возникает не только техническая сторона вопроса, но и юридическая. А именно, можно ли с точки зрения закона заниматься такой деятельностью в принципе? Предусмотрена ли какая-нибудь ответственность для лица, которое выполнило обратную разработку программы? А предусмотрена ли она для того, кто заказал такое выполнение? Как понимаете, таких вопросов наберется немало, поэтому предлагаю перейти к самой сути дела.
Если среди читателей этого материала есть те, кому не достаточно хорошо знаком сам термин реверс-инжиниринг, то полагаю, будет уместным сразу определить, что под этим понимается. Под реверс-инжинирингом программного обеспечения понимается следующее:
Обобщая, можно утверждать, что реверс-инжиниринг (или обратная разработка) программного обеспечения представляет собой процесс исследования содержимого программы путем ее преобразования в исходный код для определения ее структуры и принципов ее работы.
Если вопрос о самом термине можно считать решенным, предлагаю обратить свое внимание к юридической стороне реверс-инжиниринга. Содержание этой стороны изложено в настоящем материале в следующей последовательности: положения законодательства, договорная практика, судебная практика.
Положения законодательства
Начнем, прежде всего, с законодательных норм. Возможно, это кого-то и удивит, но такое явление, как реверс-инжиниринг, вполне знакомо российскому законодательству. О нем идет речь в статье 1280 Гражданского кодекса РФ:
«Гражданский кодекс Российской Федерации (часть четвертая)» от 18.12.2006 N 230-ФЗ
Статья 1280. Право пользователя программы для ЭВМ и базы данных
3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий:
1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников;
2) указанные действия осуществляются в отношении только тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию;
3) информация, полученная в результате декомпилирования, может использоваться лишь для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, не может передаваться иным лицам, за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, а также не может использоваться для разработки программы для ЭВМ, по своему виду существенно схожей с декомпилируемой программой для ЭВМ, или для осуществления другого действия, нарушающего исключительное право на программу для ЭВМ.
Эта правовая норма дает понять, что обратная разработка допустима с точки зрения закона только в случае выполнения определенных критериев. Предлагаю обратить внимание на следующие из них:
1. Правомерное получение экземпляра (копии) программы. Экземпляр (копия) программы, которая будет являться объектом реверс-инжиниринга, изначально должен быть получен любым правомерным способом.
Т.е. приобретение ПО в официальном магазине цифровых приложений – это правильный подход для реверс-инжиниринга. Если же нелегальная (пиратская) версия программы скачивается на торрент-трекере, реверс-инжиниринг такой программы будет неправомерен.
2. Цель реверс-инжиниринга. Целью реверс-инжиниринга должно выступать достижение способности к взаимодействию программы (версии программы), созданной в ходе реверс-инжиниринга, с другими программами.
Т.е. когда цель обратной разработки – это только лишь изучение новой версии продукта конкурента для необходимости понять, как сделать аналогичный функционал в своем продукте, то такая цель по общему правилу позволит говорить о неправомерности проведенного реверс-инжиниринга.
3. Отсутствие необходимой информации в других источниках. Информация, необходимая для достижения способности к взаимодействию, ранее не была доступна из других источников.
Т.е. в случае наличия в свободном доступе где-то в Интернете документации к программе, являющейся объектом реверс-инжиниринга, содержание которой позволит достигнуть эффект, уже достигнутый с помощью реверс-инжиниринга, но такая документация не была найдена, то этот факт с высокой долей вероятности может быть использован как доказательство неправомерности проведенной обратной разработки.
Остальные критерии также можно определить, исходя из текста вышеприведенной статьи. Но в любом случае, одними положениями закона дело не ограничивается. Практическое применение этой нормы выражено как в договорной, так и в судебной практике.
Договорная практика
На мой взгляд, наиболее широкое распространение в рамках договорной практики деятельность по реверс-инжинирингу нашла в виде ее прямого запрета, закрепленного в текстах различных соглашений на использование программных продуктов и сервисов (EULA, ToS, ToU и т.д.). Впрочем, это вполне ожидаемо – многие правообладатели хотят ограничить действия пользователя в части исследования полученной по лицензии программы, сводя ограничение свободы действий пользователя в том числе и к такому запрету.
Несколько примеров из различных текстов подобных документов:
Лицензионное соглашение для Kaspersky Rescue Disk 10
https://support.kaspersky.ru/4128
Запрещается декомпилировать, дизассемблировать, модифицировать или выполнять производные работы, основанные на ПО, целиком или частично за исключением случаев, предусмотренных применимым законодательством.
4.2 Ограничения. Вы не должны предпринимать указанные ниже действия и обязуетесь воздержаться от того, чтобы:
(b) предпринимать, побуждать, разрешать или санкционировать модификацию, создание аналогичных продуктов или усовершенствований, перевод на другие языки, инженерный анализ в целях воспроизводства, декомпилирование, обратное ассемблирование, декодирование, эмуляцию, нарушение целостности защитной системы, восстановление или попытки восстановить исходный код или протоколы Программного обеспечения или каких-либо его частей или функциональных возможностей Программного обеспечения за исключением случаев, когда такие действия допустимы в соответствии с законодательством;
Лицензионное соглашение на использование программы «2GIS Dialer»
http://law.2gis.ru/dialer-licensing-agreement/
5.1. Пользователь не имеет права самостоятельно или с привлечением третьих лиц:
5.1.1. Вскрывать технологию, эмулировать, создавать новые версии, изменять, декомпилировать, дизассемблировать, дешифровать и производить иные действия с кодом Программы, имеющие целью нарушение системы защиты Программы от несанкционированного использования, а также получение информации о реализации алгоритмов, используемых в Программе.
НЕ РАЗРЕШАЕТСЯ: Потребитель не должен: (a) удалять уведомления об авторском праве или ограничения из программы; (б) извлекать алгоритмы из программы или пытаться декомпилировать программу.
По сути, такие формулировки про запрет на осуществление реверс-инжиниринга – это своего рода юридическая перестраховка для правообладателя от действий пользователя на исследование «начинки» программного продукта с закрытым исходным кодом (проприетарный софт). А гарантией соблюдения пользователем такого запрета является перспектива наступления различных негативных последствий к нему (начиная от досрочного прекращения лицензии и заканчивая взысканием с него понесенных правообладателем убытков или денежной компенсации за нарушение авторских прав). Между прочим, в примерах зарубежной судебной практики (например, дело Blizzard v. MDY Industries, LLC), позиция о нарушенных правах истца строится не только на нарушении авторских прав, но и в том числе на нарушении договорных обязательств ответчиком (поскольку предполагается, что ответчик, начав использование исследуемой программы, согласился с положениями ее лицензионного соглашения, т.е. стал стороной в договорных отношениях с истцом как лицензиаром такой программы).
По большому счету, особой специфики в подобных договорах нет, они мало чем будут отличаться по своему содержанию от иных договоров на выполнение работ или оказание услуг в сфере программного обеспечения, поэтому предлагаю в рамках этого материала отдельно на них не останавливаться, а перейти к следующей части статьи.
Судебная практика
Конечно, наибольший интерес по теме представляет собой судебная практика, поскольку она через призму конфликта сторон позволяет как проследить трактовку и применение норм закона, так и применение положений договора (в случае наличия между сторонами спора договорных отношений), а это, в свою очередь, позволит сделать для самих себя определенные выводы на будущее касательно конкретных формулировок, используемых (или планируемых к использованию) в документах, их юридической силе и практике применения.
Говоря о судебной практике российских судов в отношении реверс-инжиниринга программного обеспечения, сразу отмечу, что она пока не успела накопить такие яркие судебные дела, какими обладают другие страны (по крайней мере, если говорить о тех делах, что были изучены при подготовке текста этого материала). Под яркими делами имеются в виду такие процессы, как Sega Enterprises v. Accolade, Atari Games Corp. v. Nintendo of America, Inc, Blizzard v. Internet Gateway, Inc (все – США), Microsoft v. Vest Corporation (Франция), SAS Institute Inc v World Programming Ltd (Великобритания). Тем не менее, и у нас в российской практике есть примеры, которые вполне будут подходить к обсуждаемой теме и на которые точно стоит обратить свое внимание (см., например, дело № 09АП-23848/2013-ГК по иску ООО «Фирма СтройСофт» к Национальной ассоциации сметного ценообразования и стоимостного инжиринга и ООО «Бюро экономического консалтинга»).
Обзор судебной практики, я думаю, следует начать со следующего судебного документа:
Постановление Пленума Верховного Суда РФ N 5, Пленума ВАС РФ N 29 от 26.03.2009 «О некоторых вопросах, возникших в связи с введением в действие части четвертой Гражданского кодекса Российской Федерации»
36. Судам следует учитывать, что право совершения в отношении программы для ЭВМ или базы данных действий, предусмотренных статьей 1280 ГК РФ, принадлежит только лицу, правомерно владеющему экземпляром такой программы для ЭВМ или базы данных (пользователю).
Он говорит ровно о том, что в случае определения правомерности совершения реверс-инжиниринга программы должен быть проанализирован вопрос, действительно ли лицо, которое выполняло реверс-инжиниринг программы, правомерно обладало экземпляром такой программы или нет. Если неправомерно, то, скорее всего, исход дела будет не в пользу такого лица. Именно про это уже было указано выше в пояснении про первый критерий допустимости совершения действий по обратной разработке ПО.
Подобное утверждение фактически продублировано и в таких решениях, как, например, Постановление Пятнадцатого арбитражного апелляционного суда от 6 августа 2014 г. по делу № А32-42112/2013, Решение Арбитражного суда Кировской области от 28 марта 2014 г. по делу № А28-152/2014.
Далее, второй момент, на который стоит обратить внимание: имеет ли право одно лицо привлекать других лиц для выполнения реверс-инжиниринга или это лицо должно осуществлять его самостоятельно? Ответ на этот вопрос может дать следующее решение суда:
Решение Арбитражного суда города Москвы от 29 мая 2013 г. по делу № А40-10750/2013
По смыслу ст.1274 ГК РФ и п.2 ст.1280 ГК РФ исследование программы для ЭВМ, как и любого другого объекта исключительных прав, может быть проведено как пользователем самостоятельно, так и любым иным лицом, обладающим специальными знаниями, но в интересах пользователя, с его ведома и по его согласию. Это объясняется тем, что само по себе исследование в силу ст.1270 ГК РФ не указано в качестве способа использования объекта исключительных прав и не предполагает его возмездное отчуждение или иное введение в оборот.
Т.е. оно позволяет сделать следующий вывод: исследование программы для ЭВМ может быть проведено как пользователем самостоятельно, так и любым иным лицом, обладающим специальными знаниями, но в интересах пользователя, с его ведома и по его согласию.
Тем более что прямого запрета на такое проведение исследования одним лицом и в интересах другого в действующем законодательстве нет. Это также следует из судебной практики:
Постановление Девятого арбитражного апелляционного суда от 12 августа 2013 г. N 09АП-23848/2013-ГК
Прямой запрет на осуществление исследования в интересах пользователя, с его ведома и по его согласию любым лицом, обладающим необходимыми специальными познаниями, в действующем законодательстве отсутствует.
Тот же самый вывод можете найти и в вышеуказанном Решении Арбитражного суда города Москвы от 29 мая 2013 г. по делу № А40-10750/2013.
Следуем далее. Если в соглашении, на условиях которого распространяется программа (представляющая собой объект для реверс-инжиниринга) ничего не говорится о праве пользователя такой программы на осуществление реверс-инжиниринга, то допустимо ли его проведение без закрепления такого права в содержании соглашения или нет?
Ответ на этот вопрос можно найти в этом постановлении:
Постановление Одиннадцатого арбитражного апелляционного суда от 25 октября 2012 года по делу № А55-13189/2012
Аналогичный ответ, кстати, содержится и в вышеуказанном Постановлении Пленума ВС РФ и Пленума ВАС РФ от 26 марта 2009 года №№ 5, 29 «О некоторых вопросах, возникших в связи с введением в действие части четвертой Гражданского кодекса Российской Федерации».
Интересно, что есть судебная практика, согласно которой внесение исправлений в выявленные ошибки ПО может быть нарушением прав правообладателя:
Постановление Федерального Арбитражного Суда Северо-Западного округа от 07 июня 2013 года по делу N А13-6254/2012
В пункте 6.6.1 названных лицензионных договоров ограничено право лицензиата осуществлять действия: деассемблировать, декомпилировать (преобразовывать объектный код в исходный текст), адаптировать и модифицировать программы и другие компоненты программного обеспечения.
По такой логике, попытка устранить ошибки в программе (для того, чтобы обеспечить ее функционирование для себя правильным образом, без ошибок) самостоятельно, без привлечения к этому самого правообладателя, может привести к появлению ответственности. Тогда получается, что в случае совершения реверс-инжиниринга, для соблюдения всех критериев правомерности, предусмотренных вышеуказанным п. 3 ст. 1280 ГК, необходимо будет иметь обоснование, что самостоятельное (имеется в виду, без привлечения самого правообладателя) устранение ошибок было необходимо для достижения способности к взаимодействию программы правообладателя с другими программами.
Следующий момент: если реверс-инжиниринг исследуемой программы выполняется только в целях проверки, не является ли такая программа объектом нарушения прав, то допустим ли реверс-инжиниринг в подобных целях?
В этой ситуации не все так однозначно. Конечно, многое зависит от конкретных обстоятельств дела, но следующий пример из практики (о котором речь уже шла выше по тексту) говорит о том, что исследование программы в целях подобной проверки и для сбора доказательной базы ответчиками в свою защиту было правомерным действием:
Постановление Девятого арбитражного апелляционного суда от 12 августа 2013 г. N 09АП-23848/2013-ГК
исследование программы было произведено ответчиками в рамках добросовестной и обоснованной необходимости, исключительно в целях исполнения обязанности по доказыванию исковых требований в соответствии со статьей 65 АПК РФ, не имело цели создания для истца каких-либо негативных последствий и не привело к возникновению таких последствий.
На мой взгляд, это достаточно значимый судебный акт, из которого можно сделать вывод, что исследование сторонней программы в целях сбора доказательств вполне может быть признано правомерным действием по отношению к исследуемой программе (а следовательно, и отсутствию нарушения авторских прав ее правообладателя).
Поэтому кому интересна эта тема в деталях, рекомендую ознакомиться с делом по иску ООО «Фирма СтройСофт» к Национальной ассоциации сметного ценообразования и стоимостного инжиринга и ООО «Бюро экономического консалтинга»: почитать Постановление Девятого арбитражного апелляционного суда от 12 августа 2013 г. N 09АП-23848/2013-ГК и иные документы по нему.