Обратная инженерия
Обратная инженерия (англ. reverse engineering) — процесс или метод, с помощью которого пытаются с минимальными сведениями о принципах работы понять, каким образом ранее созданное устройство, процесс, система или программное обеспечение выполняют свои функции с применением дедуктивного подхода. Полученные в ходе обратной инженерии знания могут быть использованы для повторного применения устаревших объектов, анализа безопасности, изучения устройства и принципов работы систем[1][2][3].
Общее описание
Существует множество причин применения обратной инженерии в различных областях. Её истоки связаны с анализом аппаратного обеспечения для получения коммерческих или военных преимуществ[4]. Тем не менее, целью процесса не всегда обязательно является копирование или изменение анализируемого объекта — во многих случаях проводится анализ с целью установления конструктивных особенностей продукта, зачастую без знания конкретных технологий и процессов, применённых при первоначальном производстве[4].
В определённых ситуациях задача обратной инженерии состоит в повторном документировании устаревших систем[4]. Даже при исследовании продукции конкурентов, цель может состоять не в прямом копировании, а в проведении сравнительного анализа[5]. Обратная инженерия также применяется для создания совместимых решений, а вопросы легальности применения таких методов для этой цели являются предметом продолжительных споров различных юрисдикций[6].
Обратная инженерия программного обеспечения облегчает понимание исходного кода для сопровождения и доработки программ. Извлечённая информация используется при принятии решений для разработки, а графические представления кода дают альтернативные точки зрения на его структуру, облегчая поиск и исправление ошибок и уязвимостей. По мере развития программных продуктов их архитектура и информация об улучшениях зачастую теряются, но обратная инженерия позволяет восстановить эти сведения, снизить издержки на доработки и выявить вредоносный код[7]. Также обратная инженерия позволяет обнаруживать неавторизованное копирование фрагментов исходного кода и анализировать решения конкурентов[8]. Практика взлома программ и медиа с целью снятия ограничений, копирования или создания клонов также основана на методах обратной инженерии[8].
Разработчики вредоносных программ используют эти же приёмы для поиска уязвимостей в операционных системах и создания эксплойтов и вирусов[8]. Методы обратной инженерии применяются и в криптоанализе: для поиска слабых мест в шифрах подстановки, симметричных и асимметричных алгоритмах[8].
Другие области применения:
- Компьютерные игры. Реверс-инжиниринг игровых движков и протоколов используется для изучения механик, форматов данных, реализации модификаций и расширения совместимости. Например, анализ исполняемых файлов, поведения движка или обмена данными на практике позволяет создавать моды, инструменты и улучшать совместимость между платформами.
- Интерфейсы. Используется при необходимости стыковки двух систем для анализа обмена данными и протоколов взаимодействия.
- Военный и промышленный шпионаж. Позволяет получить доступ к технологиям противника или конкурента для создания аналогов или систем противодействия.
- Устаревание. Разработка электронных компонентов ведётся на проприетарных платформах с коротким жизненным циклом, поэтому восстановление технических решений устаревших деталей возможно только через обратную инженерию.
- Анализ безопасности продукции. Изучается устройство изделия, спецификации компонентов, их стоимость и возможные нарушения патентного права.
- Техническая разведка конкурентов. Позволяет понять, чем на самом деле занимаются конкуренты.
- Экономия средств. Позволяет выяснить, какие дополнительные возможности имеют устройства, что может избавить от необходимости покупки других товаров.
- Повторное использование. Устаревшие объекты переоборудуются для выполнения новых функций.
- Дизайн. Артели и производственные компании используют реверс-инжиниринг при создании цифровых моделей по существующим образцам, в том числе с применением 3D-сканирования[9].
Основные области применения
С распространением технологии автоматизированного проектирования (CAD) обратная инженерия стала эффективным способом построения 3D-виртуальных моделей физических изделий для CAD/CAM/CAE систем[10]. Процесс заключается в измерении объекта и воссоздании его цифровой 3D-модели. Для измерений используются 3D-сканеры, координатно-измерительные машины, лазерные или структурированные датчики, промышленная компьютерная томография и др. Полученные данные (обычно облака точек) преобразуются в треугольные сетки, а при наличии необходимости — далее в CAD-модели с использованием простых аналитических поверхностей (плоскости, цилиндры) и NURBS-поверхностей.
Гибридное моделирование объединяет NURBS и параметрические поверхности, позволяя сочетать точную геометрию с произвольными областями, что востребовано, например, при оцифровке сложных деталей с элементами свободных форм[11].
Реверс-инжиниринг используется компаниями для цифровизации собственных изделий, анализа продукции конкурентов, оценки стоимости, поиска потенциальных нарушений патентов и др.
Параллельно используется методика ценовой инженерии — анализа изделий с целью снижения себестоимости.
Обратная инженерия печатных плат (PCB) подразумевает восстановление производственных данных, схем и принципов работы платы — например, когда они устарели, а необходимость использования критичных функций остаётся[12]. Методы включают подготовку изображений, их анализ и оцифровку слоёв для формирования полной схемы.
В 1990 году Институт инженеров по электротехнике и электронике (IEEE) определил реверс-инжиниринг программного обеспечения как "процесс анализа системы для выявления её компонентов, их взаимосвязей и создания абстрактных моделей" — процесс исключительно аналитический, не предусматривающий модификацию исходной системы (что отличает его от реинжиниринга или реструктуризации). Обратный анализ может проводиться для любой стадии жизненного цикла ПО[7].
Реинжиниринг программных продуктов включает повторное документирование (создание новых описаний существующего кода) и восстановление дизайна (логический анализ для полного понимания функций программы). Процесс трактуется как движение "назад" по циклу разработки. Применяются и приёмы программной инженерии и специальные научные конференции, посвящённые реверсу ПО.
Для защиты проприетарного софта используются технологии противодействия обратной инженерии — обфускация и др. Распознаётся несколько сценариев: анализ исходного кода для восстановления забытых аспектов, а также реверс без доступа к коду. Законные методы включают применение техники "чистой комнаты", снижающей риски нарушения авторских прав.
Похожие задачи решаются при "чёрном тестировании" ПО — тестировании без знания внутреннего устройства, но с целью находить баги и скрытые функции[13].
Прочие применения — аудит безопасности, снятие защиты от копирования, обход ограничений, кастомизация встроенных систем, включение скрытых возможностей и др.
Реверс-инжиниринг бинарных файлов применяется при отсутствии исходного кода[8] Процесс также называется RCE (Reverse Code Engineering). Например, декомпиляция бинарей платформы Java востребована среди исследователей. Известный пример — первый не-IBM-совместимый Bios, породивший обширную индустрию IBM-совместимых ПК. В США обратная инженерия защищена доктриной "fair use"[14].
Примеры:
- Samba (реализация файлового обмена для не-Windows платформ)
- Wine (транслирование API Windows)
- ReactOS (открытая реализация Windows NT)
- OpenOffice.org (разработка форматов файлов Microsoft Office).
Выделяют основные методы:
- Анализ обмена данными (например, с помощью шины или сетевых снифферов) — позволяет изучить сетевые или аппаратные протоколы, реализовать драйверы устройств. Иногда производитель сознательно оставляет отладочные интерфейсы (JTAG и пр.).
- Дизассемблирование — чтение машинного кода программ с помощью дизассемблеров, например, Interactive Disassembler.
- Декомпиляция — автоматизированное восстановление исходного кода из исполняемого файла или байткода.
Процесс поиска сходства между бинарными файлами ПО (например, поиск патчей, анализ возможных нарушений авторских прав) всё чаще автоматизируется благодаря современным инструментам анализа.
Ряд инструментов UML поддерживают построение диаграмм на основе анализа исходного кода в рамках процедур "обратной инженерии".
Современные стандарты отрасли — например, Knowledge Discovery Metamodel (KDM) — позволяют единообразно описывать архитектуру программ, наглядно строить карты потоков управления и данных, а также связывать между собой различные слои информации. KDM поддерживает связанные с ним стандарты UML, BPMN, RDF.
Протоколы коммуникации представляют собой набор правил о формате сообщений и порядке их передачи (машина состояний протокола). Задача реверс-инжиниринга протоколов состоит в восстановлении форматов сообщений и автоматов состояний. Методы включают кластеризацию сетевых пакетов, трассировку исполнения, автоматическое извлечение форматов сообщений и состояний. Автоматизация особенно востребована в анализе сложных сетевых протоколов, драйверов устройств, защищённых соединений.
Реверс-инжиниринг микросхем — инвазивный и разрушительный процесс анализа; слой за слоем снимаются изображения с помощью электронного микроскопа, выполняется совмещение и анализ слоёв, извлечение схемы и трассировка соединений[15]. Методы противодействия включают смешение адресного пространства, датчики вскрытия.
Процесс состоит из сшивания изображений слоя, совмещения слоёв, сегментации ключевых схемных элементов и финальной трассировки связей.
Обратная инженерия традиционно используется для копирования технологий других стран или получения информации о новых разработках путём захвата и анализа трофейных образцов. Примеры:
- Джерри-кэн — британцы и американцы во Второй мировой войне скопировали немецкую ёмкость для топлива.
- Nakajima G5N — основывался на американском Douglas DC-4E, купленном Японией.
- Panzerschreck — немецкий гранатомёт, созданный на основе американской базуки.
- Туполев Ту-4 — советский стратегический бомбардировщик, скопированный с B-29 Superfortress (см. изображение).
- SCR-584 радар — советская копия американского радара.
- Ракета ФАУ-2 — захваченные документы позволили союзникам создать аналоги, среди которых Redstone и советская Р-1.
- К-13/Р-3С — советская копия ракеты AIM-9 Sidewinder.
- Toophan — иранская копия американской BGM-71 TOW.
- Китай массово копировал западную и российскую военную технику (например, истребители J-2, J-5, J-6, J-7, J-15).
- Польские и британские криптографы во Второй мировой реверсировали немецкую машину Энигма.
- Британцы анализировали и успешно противодействовали радионавигационным системам Люфтваффе.
Применение обратной инженерии в биологии позволяет реконструировать структуру взаимодействий между генами и белками. Методы включают сопоставление экспрессии генов, поиск мотива в промоторах, хроматиновый иммунопреципитационный анализ, ортологию, анализ научной литературы, изучение мультибелковых регуляторных комплексов. Надёжность восстановленных сетей проверяют экспериментами, изменяя отдельные гены и моделируя последствия[16]. Применение — от физиологии растений[17] до поиска новых мишеней для противораковой терапии[18].
Обратная инженерия применяется для изучения процессов и устройств, конструкция и принцип работы которых не раскрыты разработчиком.
Патентуемые изделия обычно не требуют обратной инженерии, поскольку патент подразумевает публичное раскрытие деталей конструкции в обмен на охрану прав. Однако патентованное изделие может содержать компоненты, не описанные в патенте. Типичный мотив применения обратной инженерии — определение наличия признаков нарушения патента или авторских прав конкурентом.
Правовые аспекты
В США, даже если объект защищён торговой тайной, обратная инженерия считается правомерной, если изделие приобретено легально[19].
Программное обеспечение обычно подпадает одновременно под нормы договорного права (EULA), и если лицензия прямо запрещает реверсинг, суды трактуют запрет как имеющий приоритет над возможностями закона об авторских правах.
Директива ЕС 2009/24 регулирует вопросы легальности обратной инженерии программных продуктов. В ряде случаев действия по декомпиляции и анализу разрешены для целей обеспечения совместимости товаров различных производителей.
Примечания
Литература
- Eilam, Eldad. Reversing: Secrets of Reverse Engineering. — Wiley Publishing, 2005. — P. 595. — ISBN 978-0-7645-7481-8.
- Elvidge, Julia, «Using Reverse Engineering to Discover Patent Infringement», Chipworks, сентябрь 2010. Онлайн
- Cipresso, Teodoro. Software Reverse Engineering Education. SJSU Master's Thesis (2009). Дата обращения: 22 августа 2009.
- Hausi A. Müller и Holger M. Kienle, «A Small Primer on Software Reverse Engineering», University of Victoria, март 2009. Онлайн
- Heines, Henry, «Determining Infringement by X-Ray Diffraction», Chemical Engineering Process, январь 1999
- Huang, Andrew. Hacking the Xbox: An Introduction to Reverse Engineering. — No Starch Press, 2003. — ISBN 978-1-59327-029-2.
- James, Dick. Reverse Engineering Delivers Product Knowledge; Aids Technology Spread. Electronic Design. Penton Media, Inc (19 января 2006). Дата обращения: 3 февраля 2009.
- Messler, Robert. Reverse Engineering: Mechanisms, Structures, Systems & Materials. — McGraw Hill, 2013. — ISBN 978-0-07-182516-0.
- Raja, Vinesh. Reverse Engineering – An Industrial Perspective / Vinesh Raja, Fernandes, Kiran J.. — Springer, 2008. — P. 242. — ISBN 978-1-84628-855-5.
- Samuelson, Pamela и Scotchmer, Suzanne, «The Law and Economics of Reverse Engineering», 111 Yale L.J. 1575 (2002). Онлайн
- Undocumented DOS: A programmer's guide to reserved MS-DOS functions and data structures—expanded to include MS-DOS 6, Novell DOS and Windows 3.1. — 2. — Reading, Massachusetts : Addison Wesley, 1994. — P. 229–241. — ISBN 0-201-63287-X.
- Schulman, Andrew. Undocumented Windows: A Programmer's Guide to Reserved Microsoft Windows API Functions. — Addison Wesley, 1992. — ISBN 978-0-201-60834-2.
- Schulman, Andrew, «Hiding in Plain Sight: Using Reverse Engineering to Uncover Software Patent Infringement», Intellectual Property Today, ноябрь 2010. Онлайн
- Schulman, Andrew, «Open to Inspection: Using Reverse Engineering to Uncover Software Prior Art», New Matter, 2011. Онлайн
- Thumm, Mike. Talking Tactics. IEEE 2007 Custom Integrated Circuits Conference (CICC). IEEE, Inc (2007). Дата обращения: 3 февраля 2009.


