Обратный инжиниринг (также известный как обратный инжиниринг или бэк-инжиниринг) - это процесс или метод, посредством применения которых пытаются понять с помощью дедуктивных рассуждений, как устройство, процесс, система или часть программного обеспечения выполняет задачу с очень небольшими (если есть) понимание того, как именно это происходит.
Обратный инжиниринг применим в областях компьютерной инженерии, машиностроения, дизайна, электронной инженерии, разработки программного обеспечения, химической инженерии и системной биологии.
Есть много причин для выполнения реверс-инжиниринга в различных областях. Обратный инжиниринг берет свое начало в анализе оборудования для коммерческого или военного преимущества. Однако процесс обратного проектирования как таковой не связан с созданием копии или каким-либо изменением артефакта. Это всего лишь анализ, позволяющий вывести конструктивные особенности продуктов с минимальными или нулевыми дополнительными знаниями о процедурах, задействованных в их первоначальном производстве.
В некоторых случаях целью процесса обратного проектирования может быть просто повторная документация унаследованных систем. Даже если реконструированный продукт является продуктом конкурента, цель может заключаться не в его копировании, а в проведении анализа конкурентов. Обратный инжиниринг также может использоваться для создания совместимых продуктов, и, несмотря на некоторые узко разработанные законы США и Европейского Союза, законность использования определенных методов обратного инжиниринга для этой цели горячо оспаривается в судах по всему миру на протяжении более двух десятилетий.
Обратный инжиниринг программного обеспечения может помочь улучшить понимание лежащего в основе исходного кода для обслуживания и улучшения программного обеспечения, соответствующая информация может быть извлечена для принятия решения о разработке программного обеспечения, а графические представления кода могут предоставить альтернативные представления относительно исходного кода, которые могут помочь обнаружить и исправить программную ошибку или уязвимость. Часто по мере развития программного обеспечения его проектная информация и улучшения часто теряются со временем, но эту потерянную информацию обычно можно восстановить с помощью обратного проектирования. Этот процесс также может помочь сократить время, необходимое для понимания исходного кода, тем самым снижая общую стоимость разработки программного обеспечения. Обратный инжиниринг также может помочь обнаружить и устранить вредоносный код, записанный в программное обеспечение, с помощью более совершенных детекторов кода. Реверсирование исходного кода может быть использовано для поиска альтернативных вариантов использования исходного кода, таких как обнаружение несанкционированной репликации исходного кода там, где он не предназначен для использования, или раскрытие того, как был создан продукт конкурента. Этот процесс обычно используется для «взлома» программного обеспечения и носителей с целью снятия их защиты от копирования или для создания возможно улучшенной копии или даже подделки, что обычно является целью конкурента или хакера.
Разработчики вредоносных программ часто используют методы обратного проектирования, чтобы найти уязвимости в операционной системе, чтобы создать компьютерный вирус, который может использовать уязвимости системы. Обратный инжиниринг также используется в криптоанализе для поиска уязвимостей в шифре замещения, алгоритме с симметричным ключом или криптографии с открытым ключом.
Есть и другие варианты использования обратного инжиниринга:
По мере того как автоматизированное проектирование (САПР) становится все более популярным, обратное проектирование стало жизнеспособным методом создания трехмерной виртуальной модели существующей физической детали для использования в трехмерном САПР, CAM, CAE или другом программном обеспечении. Процесс обратного проектирования включает в себя измерение объекта и последующее его восстановление в виде 3D-модели. Физический объект можно измерить с помощью технологий 3D-сканирования, таких как КИМ, лазерные сканеры, дигитайзеры со структурированным светом или промышленное компьютерное сканирование (компьютерная томография). Одни только измеренные данные, обычно представленные в виде облака точек, не имеют топологической информации и конструктивного замысла. Первое можно восстановить, преобразовав облако точек в сетку с треугольными гранями. Обратное проектирование направлено на то, чтобы выйти за рамки создания такой сетки и восстановить замысел проекта в терминах простых аналитических поверхностей, где это необходимо (плоскости, цилиндры и т. Д.), А также, возможно, поверхностей NURBS для создания модели САПР с граничным представлением. Восстановление такой модели позволяет изменять конструкцию в соответствии с новыми требованиями, составлять производственный план и т. Д.
Гибридное моделирование - это обычно используемый термин, когда NURBS и параметрическое моделирование реализуются вместе. Использование комбинации геометрических поверхностей и поверхностей произвольной формы может обеспечить мощный метод трехмерного моделирования. Области данных произвольной формы можно комбинировать с точными геометрическими поверхностями для создания гибридной модели. Типичным примером этого может быть обратный инжиниринг головки блока цилиндров, который включает в себя литые элементы произвольной формы, такие как водяные рубашки и обработанные участки с высокими допусками.
Обратный инжиниринг также используется предприятиями для переноса существующей физической геометрии в среду разработки цифровых продуктов, для создания цифровых 3D-записей своих продуктов или для оценки продуктов конкурентов. Он используется для анализа того, как продукт работает, что он делает, какие компоненты он имеет; оценить затраты; выявить потенциальное нарушение патентных прав; и т.п.
Разработка стоимости, связанная с этим деятельность, которая также используется предприятиями, включает в себя деконструкцию и анализ продуктов. Однако цель состоит в том, чтобы найти возможности для сокращения затрат.
В 1990 году Институт инженеров по электротехнике и радиоэлектронике (IEEE) определил (программное обеспечение) обратный инжиниринг (SRE) как «процесс анализа предметной системы для идентификации компонентов системы и их взаимосвязей и создания представлений системы в другой форме или на более высоком уровне абстракции », в котором« предметная система »является конечным продуктом разработки программного обеспечения. Обратный инжиниринг - это только процесс проверки, и рассматриваемая программная система не модифицируется, иначе это было бы реинжинирингом или реструктуризацией. Обратный инжиниринг может выполняться на любой стадии цикла продукта, не обязательно на функциональном конечном продукте.
В обратном инжиниринге есть два компонента: редактирование документации и восстановление дизайна. Редокументация - это создание нового представления компьютерного кода, чтобы его было легче понять. Между тем, восстановление дизайна - это использование выводов или рассуждений на основе общих знаний или личного опыта о продукте для полного понимания его функциональных возможностей. Это также можно рассматривать как «возврат назад через цикл разработки». В этой модели результат фазы реализации (в форме исходного кода) реконструируется обратно на фазу анализа в инверсии традиционной водопадной модели. Другой термин для этой техники - понимание программы. Рабочая конференция по обратному проектированию (WCRE) проводится ежегодно с целью изучения и расширения методов обратного проектирования. Компьютерная инженерия программного обеспечения (CASE) и автоматическая генерация кода внесли большой вклад в область обратного проектирования.
Программная технология защиты от несанкционированного доступа, такая как обфускация, используется для предотвращения как обратного проектирования, так и реинжиниринга проприетарного программного обеспечения и программных систем. На практике можно выделить два основных типа реверс-инжиниринга. В первом случае исходный код для программного обеспечения уже доступен, но обнаруживаются аспекты программы более высокого уровня, которые, возможно, плохо документированы или задокументированы, но более не действительны. Во втором случае для программного обеспечения нет исходного кода, и любые усилия по обнаружению одного возможного исходного кода для программного обеспечения рассматриваются как обратный инжиниринг. Второй вариант использования термина более знаком большинству людей. Обратный инжиниринг программного обеспечения может использовать технику проектирования чистой комнаты, чтобы избежать нарушения авторских прав.
Кстати, тестирование черного ящика в программной инженерии имеет много общего с обратным проектированием. У тестировщика обычно есть API, но его цель - найти ошибки и недокументированные функции, взломав продукт извне.
Другие цели обратного проектирования включают в себя аудит безопасности, снятие защиты от копирования (" взлом "), обход ограничений доступа, часто присутствующих в бытовой электронике, настройку встроенных систем (например, систем управления двигателем), ремонт или модернизацию на месте, включение дополнительные функции на недорогом «урезанном» оборудовании (например, чипсеты некоторых видеокарт) или даже простое удовлетворение любопытства.
Бинарный обратный инжиниринг выполняется, если исходный код программного обеспечения недоступен. Этот процесс иногда называют инженерией обратного кода или RCE. Например, декомпиляцию двоичных файлов для платформы Java можно выполнить с помощью Jad. Одним из известных случаев реверс-инжиниринга была первая реализация BIOS для ПК не от IBM, которая положила начало исторической индустрии совместимых с ПК IBM PC, которая на протяжении многих лет была доминирующей компьютерной аппаратной платформой. Обратный инжиниринг программного обеспечения защищен в США исключением из закона об авторском праве в отношении добросовестного использования. Программное обеспечение Samba, которое позволяет системам, которые не работают под управлением систем Microsoft Windows, обмениваться файлами с системами, которые его запускают, является классическим примером реверс-инжиниринга программного обеспечения, поскольку проект Samba должен был перепроектировать неопубликованную информацию о том, как работает совместное использование файлов Windows, чтобы Компьютеры, отличные от Windows, могли его эмулировать. Проект Wine делает то же самое для Windows API, а OpenOffice.org - одна из сторон, делающая это для форматов файлов Microsoft Office. Проект ReactOS еще более амбициозен по своим целям, стремясь обеспечить двоичную (ABI и API) совместимость с текущими операционными системами Windows ветви NT, что позволяет программному обеспечению и драйверам, написанным для Windows, работать в чистой комнате, подвергшейся обратной инженерии. аналог бесплатного программного обеспечения ( GPL ). WindowsSCOPE позволяет выполнять обратное проектирование всего содержимого оперативной памяти системы Windows, включая двоичный графический обратный инжиниринг всех запущенных процессов.
Еще один классический, если не сказать широко известный пример - это то, что в 1987 году Bell Laboratories перепроектировала Mac OS System 4.1, первоначально работавшую на Apple Macintosh SE, так, чтобы она могла запускать ее на собственных RISC-машинах.
Обратный инжиниринг программного обеспечения может быть выполнен различными методами. Три основные группы реверс-инжиниринга программного обеспечения:
Классификация программного обеспечения - это процесс выявления сходства между различными двоичными файлами программного обеспечения (например, двух разных версий одного и того же двоичного файла), используемый для обнаружения кодовых отношений между образцами программного обеспечения. Задача традиционно выполнялась вручную по нескольким причинам (например, анализ исправлений для обнаружения уязвимостей и нарушения авторских прав ), но теперь ее можно выполнять в некоторой степени автоматически для большого количества образцов.
Этот метод используется в основном для длительных и тщательных задач обратного проектирования (полный анализ сложного алгоритма или большой части программного обеспечения). В целом статистическая классификация считается сложной проблемой, что справедливо и для классификации программного обеспечения, и поэтому мало решений / инструментов, которые хорошо справляются с этой задачей.
Ряд инструментов UML называют процесс импорта и анализа исходного кода для создания диаграмм UML «обратным проектированием». См. Список инструментов UML.
Хотя UML является одним из подходов к обеспечению «обратного проектирования», недавние достижения в области международных стандартов привели к разработке метамодели обнаружения знаний (KDM). Стандарт предоставляет онтологию для промежуточного (или абстрактного) представления конструкций языка программирования и их взаимосвязей. Group Management Object стандарт (на своем пути, чтобы стать стандартом ISO, а), KDM начал овладевать в промышленности с развитием инструментов и сред анализа, которые могут доставить добычу и анализ источника, бинарных и байт - код. Для анализа исходного кода архитектура гранулярных стандартов KDM позволяет извлекать потоки программной системы (данные, управление и карты вызовов), архитектуры и знания бизнес-уровня (правила, термины и процессы). Стандарт позволяет использовать общий формат данных (XMI), позволяющий коррелировать различные уровни системных знаний либо для подробного анализа (например, первопричина, влияние), либо для производного анализа (например, извлечения бизнес-процессов). Хотя усилия по представлению языковых конструкций могут быть бесконечными из-за большого количества языков, непрерывной эволюции языков программного обеспечения и разработки новых языков, стандарт действительно позволяет использовать расширения для поддержки широкого набора языков, а также эволюция. KDM совместим с UML, BPMN, RDF и другими стандартами, что позволяет выполнять миграцию в другие среды и, таким образом, использовать системные знания для таких усилий, как преобразование программных систем и анализ уровня предприятия.
Протоколы - это наборы правил, которые описывают форматы сообщений и способ обмена сообщениями: конечный автомат протокола. Соответственно, проблема реверс-инжиниринга протокола может быть разделена на две подзадачи: формат сообщения и реверс-инжиниринг конечного автомата.
Форматы сообщений традиционно реконструировались с помощью утомительного ручного процесса, который включал анализ того, как реализации протокола обрабатывают сообщения, но недавние исследования предложили ряд автоматических решений. Как правило, автоматические подходы группируют сообщения наблюдения в кластеры с помощью различных анализов кластеризации или имитируют реализацию протокола, отслеживающую обработку сообщений.
Меньше работ по реверс-инжинирингу автоматов протоколов. В общем, конечные автоматы протокола могут быть изучены либо в процессе автономного обучения, которое пассивно наблюдает за общением и пытается построить наиболее общий конечный автомат, принимающий все наблюдаемые последовательности сообщений, либо в режиме онлайн-обучения, которое позволяет интерактивное генерирование зондирования. последовательности сообщений и прослушивание ответов на эти зондирующие последовательности. В общем, автономное обучение малых конечных автоматов, как известно, является NP-полным, но онлайн-обучение может быть выполнено за полиномиальное время. Автоматический автономный подход был продемонстрирован Comparetti et al. и онлайн-подход Cho et al.
Другие компоненты типичных протоколов, такие как шифрование и хэш-функции, также могут быть автоматически реконструированы. Обычно автоматические подходы отслеживают выполнение реализаций протокола и пытаются обнаружить буферы в памяти, содержащие незашифрованные пакеты.
Обратный инжиниринг - это агрессивная и деструктивная форма анализа смарт-карты. Злоумышленник использует химические вещества для удаления слоя за слоем смарт-карты и делает снимки с помощью сканирующего электронного микроскопа (SEM). Этот метод может раскрыть всю аппаратную и программную часть смарт-карты. Основная проблема для злоумышленника - привести все в порядок, чтобы узнать, как все работает. Производители карты пытаются скрыть ключи и операции, смешивая позиции в памяти, например, путем шифрования шины.
В некоторых случаях можно даже прикрепить зонд для измерения напряжения, пока смарт-карта все еще находится в рабочем состоянии. Создатели карты используют датчики для обнаружения и предотвращения этой атаки. Эта атака не очень распространена, поскольку требует больших затрат усилий и специального оборудования, которое обычно доступно только крупным производителям микросхем. Кроме того, отдача от этой атаки низка, поскольку часто используются другие методы безопасности, такие как теневые учетные записи. По-прежнему неясно, смогут ли атаки на карты с чипом и PIN-кодом для репликации данных шифрования, а затем для взлома PIN-кодов, обеспечить рентабельную атаку на многофакторную аутентификацию.
Полный реверс-инжиниринг состоит из нескольких основных этапов.
Первым шагом после того, как изображения были сделаны с помощью SEM, является сшивание изображений вместе, что необходимо, поскольку каждый слой не может быть захвачен одним снимком. СЭМ необходимо охватить область контура и сделать несколько сотен изображений, чтобы покрыть весь слой. Сшивание изображений принимает в качестве входных данных несколько сотен изображений и выводит одно правильно наложенное изображение всего слоя.
Затем сшитые слои необходимо выровнять, потому что образец после травления нельзя каждый раз ставить в одно и то же положение относительно SEM. Следовательно, сшитые версии не будут правильно перекрываться, как на реальной схеме. Обычно выбираются три соответствующие точки, и на их основе применяется преобразование.
Чтобы извлечь структуру схемы, выровненные, сшитые изображения необходимо сегментировать, чтобы выделить важную схему и отделить ее от неинтересного фона и изоляционных материалов.
Наконец, провода можно проследить от одного уровня к другому, а список соединений схемы, который содержит всю информацию о схеме, может быть восстановлен.
Обратный инжиниринг часто используется людьми для копирования технологий, устройств или информации других стран, которые были получены регулярными войсками на полях или в ходе разведывательных операций. Его часто использовали во время Второй мировой войны и холодной войны. Вот известные примеры времен Второй мировой войны и позже:
Концепции обратной инженерии также применялись в биологии, в частности, для понимания структуры и функции сетей регуляции генов. Они регулируют почти все аспекты биологического поведения и позволяют клеткам выполнять физиологические процессы и реагировать на возмущения. Таким образом, понимание структуры и динамического поведения генных сетей является одной из важнейших задач системной биологии, имеющей немедленные практические последствия в нескольких приложениях, выходящих за рамки фундаментальных исследований. Существует несколько методов обратной инженерии сетей регуляции генов с использованием методов молекулярной биологии и науки о данных. Их обычно делят на шесть классов:
Шесть классов методов вывода генной сети, согласноЧасто надежность генной сети проверяется экспериментами по генетическим возмущениям с последующим динамическим моделированием, основанным на принципе, что удаление одного сетевого узла имеет предсказуемые эффекты на функционирование остальных узлов сети. Применение обратной инженерии генных сетей варьируется от понимания механизмов физиологии растений до выявления новых целей для противоопухолевой терапии.
Обратный инжиниринг применяется в первую очередь для понимания процесса или артефакта, в котором способ его создания, использования или внутренних процессов не был разъяснен его создателем.
Запатентованные элементы сами по себе не должны быть обратной инженерии для изучения, для сущности патента является то, что авторы представляют подробное публичное раскрытие информации себя, а взамен получить правовую защиту от изобретения, который участвует. Однако предмет, произведенный по одному или нескольким патентам, может также включать другую технологию, которая не запатентована и не раскрыта. Действительно, одна из распространенных мотиваций реверс-инжиниринга - определить, содержит ли продукт конкурента нарушение патентных или авторских прав.
В Соединенных Штатах, даже если артефакт или процесс защищен коммерческой тайной, обратное проектирование артефакта или процесса часто является законным, если он был получен законным путем.
Обратный инжиниринг компьютерного программного обеспечения часто подпадает под действие как договорного права как нарушение договора, так и любых других соответствующих законов. Это связано с тем, что большинство лицензионных соглашений с конечным пользователем прямо запрещают это, и суды США постановили, что, если такие условия присутствуют, они отменяют закон об авторском праве, который прямо разрешает это (см. Bowers v. Baystate Technologies ). Согласно разделу 103 (f) Закона об авторском праве в цифровую эпоху ( 17 USC § 1201 (f) ), лицо, имеющее законное право владения программой, может произвести обратный инжиниринг и обойти ее защиту, если это необходимо для достижения «функциональной совместимости», a Термин, который широко охватывает другие устройства и программы, которые могут взаимодействовать с ними, использовать их, а также использовать и передавать данные на них и от них полезными способами. Существует ограниченное исключение, которое позволяет обмениваться знаниями, полученными таким образом, и использовать их для целей взаимодействия.
Директива ЕС 2009/24 о правовой защите компьютерных программ, которая заменила более раннюю (1991 г.) директиву, регулирует обратный инжиниринг в Европейском Союзе.