Обратная разработка

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Обра́тная разрабо́тка (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering) — исследование (анализ) некоторого устройства или программы, а также документации на него с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.

Применяется обычно в том случае, если создатель оригинального объекта не предоставил информации о структуре и способе создания (производства) объекта. Использование обратной разработки может противоречить закону об авторском праве и патентному законодательству.

В настоящее время под словами «reverse engineering» чаще всего понимается т. н. clean room reverse engineering, то есть процесс, при котором одна группа разработчиков анализирует машинный код программы (в сленге хакеров для этого процесса используется также выражение «обратный инжиниринг» или «реверсный инжиниринг»), составляет алгоритм данной программы на псевдокоде, либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства. После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «fair use», то есть добросовестного использования оригинальной программы. Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом.

Содержание

[править] Сферы применения обратной разработки

[править] Электроника

[править] Программное обеспечение

Исследование и обратная разработка программ обычно осуществляются с целью дальнейшей модификации кода, копирования, или, например, написания генераторов ключей, алгоритм работы которых получен на основе анализа алгоритма их проверки. Также исследование программ применяется с целью получения некоторых закрытых сведений о внутреннем устройстве программы — о протоколе сетевого обмена с сервером, аппаратным средством, ключом защиты, алгоритмом генерации ключа или о взаимодействии с другой программой. Ещё одна область применения — получение информации о способах экспортирования данных из многочисленных проприетарных форматов файлов.[2]

С развитием Интернета популярные операционные системы и программы всё интенсивнее исследуются на предмет обнаружения в них уязвимостей или т. н. «дыр». В дальнейшем найденные дыры могут использоваться для получения несанкционированного доступа к удалённому компьютеру или компьютерной сети. C другой стороны, обратная разработка применяется при исследовании антивирусными компаниями вредоносного ПО c целью добавления его сигнатур в базы своих продуктов.

Одним из широко известных[источник не указан 888 дней] примеров обратной разработки является исследование BIOS персонального компьютера IBM, ставшее серьёзным шагом на пути развития производства IBM-совместимых компьютеров сторонними производителями. Создание сервера Samba (входящего в состав ОС GNU/Linux и работающего с серверами на базе ОС Windows) также потребовало обратной разработки используемого Microsoft протокола SMB.[источник не указан 888 дней] Создание многих ICQ-клиентов также потребовало обратной разработки протокола ICQ.

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

  1. Анализ обмена данными, наиболее распространённый в обратной разработке протоколов обмена данными, который производится с помощью анализатора шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.
  2. Дизассемблирование с помощью дизассемблера, при котором прямой машинный код программы читается и понимается в своём чистом виде, только с помощью мнемоник машинного языка. Этот способ работает на любой компьютерной программе, но требует достаточно много времени, особенно для неспециалиста.
  3. Декомпиляция с помощью декомпилятора — процесс создания исходного кода на некотором языке программирования высокого уровня.

[править] Базы данных

Может использоваться при создании реляционной модели базы данных.

[править] Промышленность

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

Так например, ряд производителей фототехники, таких как Sigma, Tamron, Tokina и Carl Zeiss, выпускают объективы с байонетом типа Canon EF. Они созданы методом обратной разработки, а их производители не имеют доступа к спецификациям Canon. Компания Canon не гарантирует корректную работу объективов «сторонних» разработчиков на своих фотоаппаратах.

[править] Военная промышленность

Jerry cans

Самыми известными фактами обратной разработки во время второй мировой войны являлись:

  • Германские канистры для бензина — в британских и американских войсках заметили, что немцы использовали очень удобные канистры. Они скопировали эти канистры, и те получили название Jerry cans (от слова «gerrys» — от «Germans»).[3]
  • Туполев Ту-4 — часть американских бомбардировщиков B-29 при совершении боевых вылетов в Германию пользовались советскими аэродромами. (Совершавшие налеты на Германию B-17 и B-29 часто совершали челночные боевые вылеты, — взлетев с британских авиабаз и отбомбившись в Германии, летели далее на восток и приземлялись на советских авиабазах, откуда потом, совершая следующий налет на Германию и отбомбившись там, возвращались на британские авиабазы.) В частности несколько из совершавших налеты на Японию B-29 совершили вынужденные посадки на советских дальневосточных авиабазах. Советские военные, которые в том время не имели подобных стратегических бомбардировщиков, решили скопировать B-29. Через несколько лет был сконструирован Ту-4 — конструктивно практически полная копия «Boeing B-29 Superfortress». (Ту-4 получил прозвище «цельнотянутый самолёт».)[4] Но, естественно, двигатели, вооружение и радиоэлектронное оборудование Ту-4 не было копиями соответствующих систем В-29.

[править] См. также

[править] Литература

[править] Примечания

[править] Ссылки


Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Участие
Печать/экспорт
Инструменты
На других языках