Обратная разработка ( англ. reverse engineering ) - исследование некоторого устройства или программы с целью понимания принципов работы исследуемого объекта. Чаще используется для создания объекта, по функциональности аналогичного исследуемом но без точного копирования его функций.
Обычно используется в случаях, когда разработчик оригинального устройства или программы не предоставляет точных сведений об алгоритмах функционирования изделия, или любым образом пытается помешать использованию технологий, которые являются задействованными его функционалом.
В наше время обратная разработка наиболее широко употребляется для анализа программного обеспечения с закрытыми исходными текстами. При этом человек, использующий данный метод исследования, анализирует машинный код программы (обычно в дизасембльованому виде) и составляет алгоритм функционирования ПО для дальнейшей реализации в отдельном продукте или воспроизводит его в соответствующих спецификациях.
Обычно обратная разработка запрещена законом и / или лицензионными соглашениями конечного пользователя, но продукты, созданные на основе анализа алгоритмов являются вполне законными, поскольку конечный продукт очень редко походит на оригинальный.
Использование
Знакомства
Исследование программ часто используют с целью дальнейшей их модификации, расширения функционала или создание средств, позволяющих обходить ограничения на их использование (например условно-бесплатные программы). Также такие методы могут использоваться для получения спецификации протоколов обмена информацией (например сетевых протоколов ) или способов ее хранения ( форматы файлов ).
Обратная разработка программного обеспечения обычно проводится следующими методами:
-
Мониторинг активности. Таким способом чаще всего проводится исследование протоколов обмена информацией. Например для исследования сетевых проколов может использоваться перехват потоков данных в сети с помощью специализированных программных и / или аппаратных средств. Данный метод может не дать полного представления об алгоритмах функционирования ПО.
-
Дизассемблирование. Машинный код программы читается и переводится на язык ассемблера для своего понимания в чистом виде. Таким способом можно исследовать любое программное обеспечение, но за счет использования определенных технологий при разработке ПО дизассемблирование можно значительно усложнить. Метод требует высокой квалификации человека, проводящего обратную разработку и больших затрат времени.
-
Декомпиляция. Заключается в переводе машинного кода программы на языке высокого уровня. Метод трудно реализовать из-за сложности создания инструментов.