Обратная разработка: Реверс-инжиниринг – Расковырять и понять как работает / Хабр
Обратная разработка — это… Что такое Обратная разработка?
Обра́тная разрабо́тка (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering) — исследование некоторого устройства или программы, а также документации на него с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.
Применяется обычно в том случае, если создатель оригинального объекта не предоставил информации о структуре и способе создания (производства) объекта. Использование обратной разработки может противоречить закону об авторском праве и патентному законодательству.
В настоящее время под словами «reverse engineering» чаще всего понимается т. н. clean room reverse engineering, то есть процесс, при котором одна группа разработчиков анализирует машинный код программы (в сленге хакеров для этого процесса используется также выражение «обратный инжиниринг» или «реверсный инжиниринг»), составляет алгоритм данной программы на псевдокоде, либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства. После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «fair use», то есть добросовестного использования оригинальной программы. Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом.
Сферы применения обратной разработки
Проверить информацию. Необходимо проверить точность фактов и достоверность сведений, изложенных в этой статье. |
Электроника
- Копирование различных электронных блоков без фактической разработки. Известно[1], что многие элементы, в частности, ТТЛ различных компаний и национальных стандартов, взаимозаменяемы. Например, американская серия интегральных схем 7400 и её советский аналог К(Р)155.
- Процессор Am386 компании AMD создан ради совместимости с чипом 80386 фирмы Intel и в пользу экономической целесообразности.[источник не указан 1215 дней]
- Процессоры Super386 38600SX и 38600DX компании Chips and Technologies созданы методом ОР.[источник не указан 1215 дней]
Программное обеспечение
Исследование и обратная разработка программ обычно осуществляются с целью дальнейшей модификации, копирования, или, например, написания генераторов ключей, алгоритм работы которых получен на основе анализа алгоритма их проверки. Также исследование программ применяется с целью получения некоторых закрытых сведений о внутреннем устройстве программы — о протоколе сетевого обмена с сервером, аппаратным средством, ключом защиты или о взаимодействии с другой программой. Ещё одна область применения — получение информации о способах экспортирования данных из многочисленных проприетарных форматов файлов.[2]
С развитием Интернета популярные операционные системы и программы всё интенсивнее исследуются на предмет обнаружения в них уязвимостей или т. н. «дыр». В дальнейшем найденные дыры могут использоваться для получения несанкционированного доступа к удалённому компьютеру или компьютерной сети. C другой стороны, обратная разработка применяется при исследовании антивирусными компаниями вредоносного ПО c целью добавления его сигнатур в базы своих продуктов.
Одним из широко известных[источник не указан 1215 дней] примеров обратной разработки является исследование BIOS персонального компьютера IBM, ставшее серьёзным шагом на пути развития производства IBM-совместимых компьютеров сторонними производителями. Создание сервера Samba (входящего в состав ОС GNU/Linux и работающего с серверами на базе ОС Windows) также потребовало обратной разработки используемого Microsoft протокола SMB.[источник не указан 1215 дней] Создание многих ICQ-клиентов также потребовало обратной разработки протокола ICQ.
Обратная разработка программного обеспечения производится с помощью следующих методик.
- Анализ обмена данными, наиболее распространённый в обратной разработке протоколов обмена данными, который производится с помощью анализатора шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.
- Дизассемблирование машинного кода программы для получения её листинга на языке ассемблера. Этот способ работает на любой компьютерной программе, но требует достаточно много времени, особенно для неспециалиста.
- Декомпиляция машинного или байт-кода программы для создания исходного кода на некотором языке программирования высокого уровня.
Базы данных
Может использоваться при создании реляционной модели базы данных.
Промышленность
В этом разделе не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. Эта отметка установлена 12 мая 2011. |
Обратная разработка продукта конкурента с целью узнать его устройство, принцип работы и оценить возможности создания аналога.
Так например, ряд производителей фототехники, таких как Sigma, Tamron, Tokina и Carl Zeiss, выпускают объективы с байонетом типа Canon EF. Они созданы методом обратной разработки, а их производители не имеют доступа к спецификациям Canon. Компания Canon не гарантирует корректную работу объективов сторонних разработчиков на своих фотоаппаратах.
Военная промышленность
Jerry cans
Самыми известными фактами обратной разработки во время второй мировой войны являлись:
- Немецкие канистры для бензина — в британских и американских войсках заметили, что немцы имели очень удобные канистры. Они скопировали эти канистры, и те получили название Jerry cans (от слова «gerrys» — от «Germans»).[3]
- Туполев Ту-4 — некоторое количество американских бомбардировщиков B-29 при совершении вылетов в Японию были вынуждены садиться в СССР. Советские военные, которые не имели подобных стратегических бомбардировщиков, решили скопировать B-29. Через несколько лет они разработали Ту-4, практически полную копию.[4] В то же время, двигатели, вооружение и радиоэлектронное оборудование Ту-4 не было копиями соответствующих систем В-29.
- Тепловоз ТЭ1 — в 1945 году тепловоз RSD-1 (Да) (поставлялся в СССР по ленд-лизу) привёл литерный поезд Сталина на Потсдамскую конференцию. Сталин высоко оценил данный локомотив, поэтому в 1947 году начался выпуск советской копии американского тепловоза — ТЭ1. Несмотря на некоторые отличия в размерах и отдельном оборудовании, ТЭ1 оказался практически идентичен Да[5]. Все нынешние российские маневровые тепловозы — потомки американского тепловоза.
- Миномёты — немцы в военные годы успешно скопировали советские трофейные 120 мм миномёты, которые взяли себе на вооружение под именем Granatwerfer 42.
- Автомат Калашникова — недавно руководство ОАО «Ижмаш» заявило, что около половины всех АК в мире — «контрафактные» (то есть, производимые без лицензии и передачи технологий), из-за чего Россия недополучает около миллиарда долларов в год.
Программное обеспечение
Анализ исходного кода
С широким применением IDEF (и предшествующей методологии — SADT) связано возникновение основных идей популярного ныне понятия — BPR (бизнес-процесс-реинжиниринг).
Существуют программы, которые предоставляют как возможность восстановления (обратный, reverse) по исходному коду общего системного проекта (классы, связь между ними и т. п.), так и прямой генерации исходного кода на основе созданного проекта (функциональных блоков бизнес-процесса):
См. также
Литература
Примечания
Ссылки
Реверс-инжиниринг NET-приложений. Часть первая: Введение
Реверс-инжиниринг NET-приложений. Часть первая: Введение
Данный цикл публикаций представляет собой нечто вроде «саги», где мы в основном будем обсуждать исследование NET-приложений.
Автор: Суфиан Тахири (Soufiane Tahiri)
Предупреждение
Эта и все последующие статьи публикуются только в образовательных целях, чтобы вы получили определенное представление об исследовании NET-приложений. Использование приведенной здесь информации лежит полностью на вашей ответственности.
Все техники, которые будут показаны в этом цикле статей, предназначены только демонстрации на практике описанных концепций и методов. Цель этих публикаций, также как и других статей, написанных мной (Суфианом Тахири) — поделиться знаниями и улучшить методы реверс-инжиниринга.
Пожалуйста, помните о том, что дизассемблирование / исследование приложений запрещено почти всеми международными законами. Если вам понравилась какая-либо программа – КУПИТЕ ЕЕ.
Введение
Данный цикл публикаций представляет собой нечто вроде «саги», где мы в основном будем обсуждать исследование NET-приложений. Последняя стабильная версия Microsoft .NET Frameworks для Visual Studio 2012 — 4.5 (4.5.50709) от 15 августа 2012 года. Также эта версия распространяется с Windows 8 и Windows Server 2012. Однако, несмотря на столь широкое распространение платформы, существует недостаток статей по исследованию приложений разработанных с использованием NET-технологии.
Я постараюсь восполнить этот недостаток и в первой статье расскажу об основах архитектуры NET в целях прояснения некоторых моментов для реверс-инженеров.
Перед началом чтива я настоятельно рекомендую вам потратить несколько часов на изучение как минимум одного языка, который используется при разработке NET-приложений (Visual Basic .NET или С#). Некоторые считают, что исследование NET-программ проще, чем исследование «традиционных» приложений, однако, с моей точки зрения, это ошибочное мнение.
Концепцию платформы NET можно сравнить с концепцией JAVA и виртуальной машины JAVA (по крайней мере, когда речь заходит о компиляции приложения). В отличие от традиционных языков программирования (например, C/C++), где происходит компиляция в исполняемый машинный код, приложения, разработанные на платформе NET frameworks, компилируются в промежуточный язык Common Intermediate Language (CIL или Microsoft Common Intermediate Language MSIL), который можно сравнить с байткодом Java-программ. Преобразование в машинный код производится средой Common Language Runtime (CLR) во время выполнения программы.
У такого механизма работы программ есть свои преимущества и недостатки. Основной минус: уменьшается скорость выполнения приложения. Однако есть и свои плюсы: например, в скомпилированной программе сохраняются имена классов, функций и методов, и это, с точки зрения программиста — прекрасно, поскольку разные части программы можно писать на разных языках, которые поддерживаются фреймворками.
Рисунок 1. Наглядное представление спецификации общеязыковой инфраструктуры (Common Language Infrastructure, CLI) / Wikipedia
Что же это дает реверс-инженеру?
По существу, каждое скомпилированное NET-приложение является не более чем представлением языка Common Intermediate Language, в котором сохранены все имена из исходного текста программы.
Строго говоря, зная язык CIL, мы можем идентифицировать высокоуровневые языковые инструкции и структуру программы. Все это означает, что мы можем из CIL-версии восстановить первоначальный исходный код и даже выбрать язык исходного текста (однако это весьма утомительное занятие).
Когда речь заходит о NET-приложениях мы говорим о «рефлексии» (reflection), а не «декомпиляции». Техника «рефлексии» позволяет получить информацию о классах (или сборке) во время выполнения программы. Мы можем получить все свойства, методы, функции и т. д. с параметрами и аргументами, также можно получить все интерфейсы, структуры и т. д.
Существует огромная масса инструментов, которые могут «отразить» исходный текст скомпилированного исполняемого NET-файла; утилита Reflector прекрасно подходит для решения этой задачи. При помощи нее вы можете просматривать информацию о классах, декомпилировать и анализировать NET-программы и компоненты. Reflector позволяет просматривать и искать CIL-инструкции, ресурсы и XML-документацию, которая содержится в NET-сборке. Однако Reflector не единственная утилита, которая пригодится нам при исследовании NET-приложений. О других инструментах я буду рассказывать по мере их использования.
О чем вы узнаете из первой статьи?
В первой статье вы научитесь использовать Reflector для исследования, созданного мной, простейшего Crack-Me. Здесь не преследуется цель изложить актуальные методы защиты приложений (об этом будет рассказано в следующих статьях).
Практика
Наш Crack-ME представляет собой простейшую форму, которая запрашивает пароль. Я создал ее, чтобы показать вам основы исследования NET-приложений. Обычно мы начинаем с постановки задачи и изучения поведения объекта. Такой подход позволяет определить, что мы будем искать внутри исходника.
После ввода неверного пароля появляется сообщение об ошибке:
Посмотрим, почему этот кусок скомпилированного кода выдает сообщение «Invalid password». После открытия Reflector на главной панели мы можем выбрать язык исходного текста. Я выберу Visual Basic, но решение, конечно, за вами.
Рисунок 2. Выбор основного языка
Загрузим Crack-ME в программу (File > Open menu) и начнем поиск интересующих нас участков кода.
Технически, Crack-ME анализируется и помещается в древовидную структуру. Мы развернем те узлы, которые нас интересуют:
Рисунок 3. Загруженный Crack-ME
Вы можете развернуть узел, если кликните на «+»:
Продолжая углубляться внутрь дерева, вы увидите «внутренности» Crack-ME:
Как видно из рисунка Crack-ME состоит из Ссылок, Кода и Ресурсов.
- Код: содержит всякие интересности, все, что нам нужно в данный момент находится внутри ветки InfoSecInstitute_dotNET_Reversing (это Namespace).
- Ссылки: по сути «импорты» и «заголовочные файлы» используемые в других PE-файлах.
- Ресурсы: сейчас этот раздел для нас не важен, но он схож с ресурсами в других Windows-программах.
Раскрыв ветку с кодом, мы увидим следующее дерево:
Reflector нашел только одну форму внутри нашего Crack-ME с именем Form1 (со всеми переменными, процедурами, функциями и графическими элементами). Как говорилось ранее, все имена элементов соответствуют оригинальным именам, которые используются в исходном тексте приложения, что позволяет легко определить назначение каждого элемента. К примеру, функция btn_Chk_Click(Object, EventArgs), скорее всего, выполняется при нажатии на кнопку «bnt_Chk», а функция btn_About_Click(Object, EventArgs) вероятно выполняется при нажатии на кнопку «btn_About».
Поскольку приложение учебное, в нем только одна форма и несколько функции, и это упрощает нашу задачу; в данный момент нас интересует, что происходит по нажатию кнопки «Check» (кнопка btn_Chk) и алгоритм работы функции btn_Chk_Click (), логика работы которой будет отображена на языке, выбранном при запуске Reflector (см. рисунок 2).
Для просмотра исходного текста функции дважды щелкните на имя функции. Reflector покажет декомпилированный исходный код:
Теперь мы полностью понимаем предназначение этой функции. Даже тот, кто знаком лишь с основами программирования проймет, что процедура сравнивает введенный пароль с выражением «p@55w0rd!». Введя комбинацию «p@55w0rd!», получим следующий результат:
Все оказалось очень просто! В одной из следующих статей мы рассмотрим более продвинутые техники (например, изменение Crack-ME так, чтобы был доступен ввод любых паролей).
В первой статье я постарался избежать сложных понятий, относящихся к механизму работы NET-приложений, и решил не грузить вас слишком большим объемом информации (чтобы мотивировать к дальнейшим исследованиям). Я показал метод взлома простейшей защиты и надеюсь, что бы узнали для себя нечто новое. В следующих статьях мы рассмотрим более углубленно механизм работы NET-программ.
Ссылки
Реверсинг и обфускация, как это работает | GeekBrains
Реверс-инжиниринг — что за зверь, как использовать и как бороться
https://d2xzmw6cctk25h.cloudfront.net/post/239/og_cover_image/4acca15219c7ed2d834baf24134a5407
Многие в детстве разбирали свои игрушки в надежде понять, как они устроены, т.е. задатки реверс-инженера есть у каждого второго. Однако, у кого-то это с возрастом прошло, в то время как другие, наоборот, отточили свои умения и достигли в этом определенного мастерства.
Например Китай — это настоящая прародина реверс-инженеров. На любом значимом событии: автосалоне, показе мод, выставке оружия вы обязательно увидите китайцев, которые тщательно все фотографируют с тем, чтобы через некоторое время (обычно очень непродолжительное) сделать свой аналог, обычно намного дешевле и более низкого качества, хотя тут бывают и исключения. Зачастую, то же самое касается и программного обеспечения, но в данном случае цели и задачи могут отличаться.
Кому нужен реверс-инжиниринг программного обеспечения?
Если отбросить промышленный шпионаж, реверс-инжиниринг широко используется аналитиками для препарирования вирусов и создания средств защиты. В то же время, аналогичный подход применяется для анализа ПО с закрытым исходным кодом, поиска уязвимостей и создания вирусов. Также энтузиастами проводится анализ драйверов и некоторых других полезных утилит с закрытым исходным кодом для того, чтобы создавать аналоги для Linux с открытым кодом. Хотите поиграть бесплатно? Генераторы ключей для платного ПО, пиратские серверы онлайн-игр также создаются с помощью реверс-инжиниринга. Однако, взлом софта и обратная разработка это, в большинстве случаев, разные вещи, для взлома, как правило, достаточно разобрать процесс проверки ключа лицензии, а во втором случае придется потратить намного больше времени и сил.
Как бороться с реверсингом?
Прежде всего, можно затруднить анализ программы на уровне разработчика, продвинутый кодер может раздуть код искусственным образом, тогда, даже имея оригинальные исходники, зачастую будет непонятно, как все работает. Этот способ не рекомендуется, потому как над одним и тем же проектом в разное время могут вести работу различные команды разработчиков, искусственное усложнение исходного кода может сильно затруднить работу.
Самым известным и популярным способом защиты является обфускация – превращение исходного кода в кашу, понять что-либо в которой в принципе невозможно. Программа берет исходную инструкцию в коде и делает из нее несколько, делающих то же самое, плюс еще много ложных инструкций, которые предназначены исключительно для того, чтобы запутать реверс-инженера. Широко применяется как в обычных программах, так и в вирусах, особенно в полиморфных, что приводит к появлению многих копий одной и той же вредоносной программы, каждая новая копия которой отличается от оригинала и других копий. С шедеврами в области обфускации кода и признанными мастерами в этой области можно познакомиться, например, на этом сайте.
Что касается надежных программ для обфускации кода, с этим сложнее. На самом деле, их сотни, и многие являются платными. Ссылки не привожу по той причине, что надежность той или иной программы определить сложно. Если на торренте лежит взломанный обфускатор, значит он уже проанализирован, алгоритмы его работы, возможно, уже известны, значит он бесполезен.
Помните о том, что помимо защиты от посторонних обфускатор не дает разработчику возможности отлаживать собственный код, поэтому при отладке необходимо его отключать.
Как бороться с защитой от реверсинга?
На первом этапе бинарный код обычно преобразовывают дизассемблером или декомпилятором, иногда этого достаточно, если разработчик не применил каких-то специальных средств, затрудняющих анализ. Однако, в большинстве случаев не обойтись без отладчика и специальных скриптов, потому что разработчик не заинтересован в анализе своего кода сторонними пользователями — ведь это ведет к появлению бесплатных аналогов и взлому существующих версий программы.
Реверс-инжиниринг — это тема не для одной статьи, где я смог более-менее подробно остановиться только на основном — на обфускации кода.Хотите узнать больше — ставьте лайк, и мы более подробно обсудим эту тему в следующей статье.
А тем, кто хочет стать программистом, рекомендуем профессию «Веб-разработчик».
Обратная разработка — Anticopyright
Материал из Anticopyright
Обра́тная разрабо́тка (также реверс инжиниринг от англ. reverse engineering) — исследование некоторого устройства, формата, протокола или программы, а также создание документации на них с целью понять принцип его работы и, чаще всего, сделать устройство, программу или другой искусственный объект, с аналогичными функциями но без копирования как такового.
Применяется обычно в том случае, если создатель оригинального объекта не предоставил информации о структуре и способе создания (производства) объекта. Использование обратной разработки может противоречить закону об авторском праве и патентному законодательству.
В настоящее время под словами «reverse engineering» чаще всего понимается т. н. «clean room reverse engineering», то есть процесс, при котором одна группа разработчиков анализирует закрытый объект (в сленге хакеров для этого процесса используется также выражение «обратный инжиниринг» или «реверсный инжиниринг»), и составляет алгоритм работы закрытого объекта на псевдокоде и/или составляет исчерпывающие спецификации изучаемого закрытого объекта. После получения спецификаций другая группа разработчиков создает открытый аналог на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходный объект, так как по законам, к примеру, США, подпадает под понятие «fair use», то есть добросовестного использования оригинального объекта. Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом.
[править] Сферы применения обратной разработки
[править] Электроника
Копирование различных электронных блоков без фактической разработки. Известно, что очень большая часть советской цифровой электроники копировалась. Например, американская серия интегральных схем 74 и её советский аналог К(Р)155.
Ешё один пример обратной разработки — создание компанией AMD процессора Am386 на базе Intel 80386.
[править] Программное обеспечение
Исследование и обратная разработка программ обычно осуществляются с целью дальнейшей модификации, копирования, или, например, написания генераторов ключей, алгоритм работы которых получен на основе анализа алгоритма их проверки. Также исследование программ применяется с целью получения некоторых закрытых сведений о внутреннем устройстве программы — о протоколе сетевого обмена с сервером, устройством, ключом защиты, взаимодействия с другой программой. Ещё одна область применения — получение информации о способах экспортирования данных из многочисленных проприетарных форматов файлов[1].
С развитием Интернета исследуются популярные операционные системы и программы на предмет обнаружения уязвимостей или Шаблон:Nobr дыр в них. В дальнейшем найденные дыры могут использоваться для получения несанкционированного доступа к удаленному компьютеру или компьютерной сети.
Известный случай исследования BIOS персонального компьютера IBM — это был один из серьезных шагов для развития производства IBM-совместимых компьютеров от сторонних производителей. Также, создание сервера Samba (входящего в состав ОС GNU/Linux, работающего с серверами на базе ОС Microsoft Windows) потребовало обратной разработки используемого Microsoft протокола SMB.
Обратная разработка программного обеспечения производится с помощью следующих методик:
- Анализ обмена данными, наиболее распространённый в обратной разработке протоколов обмена данными, который производится с помощью анализатора шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.
- Дизассемблирование с помощью дизассемблера — означает то, что прямой машинный код программы читается и понимается в своём чистом виде, только с помощью мнемоник машинного языка. Этот способ работает на любой компьютерной программе, но требует достаточно много времени, особенно для неспециалиста.
- Декомпиляция с помощью декомпилятора — процесс создания исходного кода на некотором языке программирования высокого уровня.
[править] Промышленность
Обратная разработка некоторого продукта конкурента, с целью узнать как он устроен, как работает и как можно создать аналогичный.
[править] Военная промышленность
Самыми известными фактами обратной разработки во время второй мировой войны являлись:
- Немецкие канистры для бензина — британские и американские войска заметили, что немцы имели канистры превосходного дизайна. Они скопировали эти канистры и те получили название Jerry cans (от слова «gerrys» — Germans).
- Туполев Ту-4 — некоторое количество американских бомбардировщиков B-29(англ.) при совершении вылетов в Японию были вынуждены садиться в СССР. Советские военные, которые не имели подобных стратегических бомбардировщиков, решили скопировать B-29. Через несколько лет они разработали Ту-4, практически полную копию.
[править] Юридические последствия
Иногда увлечение обратной разработкой бывает опасно для исследователя. Например, словенский студент Dejan Ornig, изучавший протоколы коммуникации полиции, такие, как TETRA получил 15 месяцев тюрьмы[2].
- ↑ Часто применяется, например, в отношении форматов, поддерживаемых Microsoft Office.
- ↑ Student Who Found Flaws in Police Communications Protocol Gets Prison Sentence
Обратная разработка
Материал из Seo Wiki — Поисковая Оптимизация и Программирование
Обра́тная разрабо́тка (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering) — исследование некоторого устройства или программы, а также документации на них с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.
Применяется обычно в том случае, если создатель оригинального объекта не предоставил информации о структуре и способе создания (производства) объекта. Использование обратной разработки может противоречить закону об авторском праве и патентному законодательству.
В настоящее время под словами «reverse engineering» чаще всего понимается т. н. «clean room reverse engineering», то есть процесс, при котором одна группа разработчиков анализирует машинный код программы (в сленге хакеров для этого процесса используется также выражение «обратный инжиниринг» или «реверсный инжиниринг»), составляет алгоритм данной программы на псевдокоде, либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства. После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «fair use», то есть добросовестного использования оригинальной программы. Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом.
Сферы применения обратной разработки
Электроника
Программное обеспечение
Исследование и обратная разработка программ обычно осуществляются с целью дальнейшей модификации, копирования, или, например, написания генераторов ключей, алгоритм работы которых получен на основе анализа алгоритма их проверки. Также исследование программ применяется с целью получения некоторых закрытых сведений о внутреннем устройстве программы — о протоколе сетевого обмена с сервером, аппаратным средством, ключом защиты или о взаимодействии с другой программой. Ещё одна область применения — получение информации о способах экспортирования данных из многочисленных проприетарных форматов файлов.[1]
С развитием Интернета популярные операционные системы и программы всё интенсивнее исследуются на предмет обнаружения в них уязвимостей или т. н. «дыр». В дальнейшем найденные дыры могут использоваться для получения несанкционированного доступа к удалённому компьютеру или компьютерной сети. C другой стороны, обратная разработка применяется при исследовании антивирусными компаниями вредоносного ПО c целью добавления его сигнатур в базы своих продуктов.
Одним из широко известных[источник не указан 4106 дней] примеров обратной разработки является исследование BIOS персонального компьютера IBM, ставшее серьёзным шагом на пути развития производства IBM-совместимых компьютеров сторонними производителями. Создание сервера Samba (входящего в состав ОС GNU/Linux и работающего с серверами на базе ОС Windows) также потребовало обратной разработки используемого Microsoft протокола SMB.[источник не указан 4106 дней]
Обратная разработка программного обеспечения производится с помощью следующих методик.
- Анализ обмена данными, наиболее распространённый в обратной разработке протоколов обмена данными, который производится с помощью анализатора шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.
- Дизассемблирование с помощью дизассемблера, при котором прямой машинный код программы читается и понимается в своём чистом виде, только с помощью мнемоник машинного языка. Этот способ работает на любой компьютерной программе, но требует достаточно много времени, особенно для неспециалиста.
- Декомпиляция с помощью декомпилятора — процесс создания исходного кода на некотором языке программирования высокого уровня.
Базы данных
Может использоваться при создании реляционной модели базы данных.
Промышленность
Обратная разработка продукта конкурента с целью узнать его устройство, принцип работы и оценить возможности создания аналога.
Военная промышленность
Самыми известными фактами обратной разработки во время второй мировой войны являлись:
- Немецкие канистры для бензина — в британских и американских войсках заметили, что немцы имели очень удобные канистры. Они скопировали эти канистры, и те получили название Jerry cans (от слова «gerrys» — от «Germans»).[2]
- Туполев Ту-4 — некоторое количество американских бомбардировщиков B-29 при совершении вылетов в Японию были вынуждены садиться в СССР. Советские военные, которые не имели подобных стратегических бомбардировщиков, решили скопировать B-29. Через несколько лет они разработали Ту-4, практически полную копию[источник не указан 4200 дней].
BIOS
PhoenixBIOS, который фактически выполнял те же самые функции, что и PC BIOS фирмы IBM, но только в «клоне» IBM 5150 фирмы Compaq, против которой в 1982 году в Верховном Суде США проходили слушания по обвинению её со стороны IBM в нарушении патентного закона.[источник не указан 4106 дней] Однако IBM проиграл, так как фирме Phoenix Technologies Ltd удалось доказать, что PhoenixBIOS выполнен раскодированием оригинального PC BIOS методом обратного инжениринга.[источник не указан 4106 дней]
Программное обеспечение
Анализ исходного кода
С широким применением IDEF (и предшествующей методологии — SADT) связано возникновение основных идей популярного ныне понятия — BPR (бизнес-процесс-реинжиниринг).
Существуют программы, которые предоставляют как возможность восстановления (обратный, reverse) по исходному коду общего системного проекта (классы, связь между ними и т. п.), так и прямой генерации исходного кода на основе созданного проекта (функциональных блоков бизнес-процесса):
Реинжиниринг бизнес-процессов
См. также
Примечания
- ↑ Часто применяется, например, в отношении форматов, поддерживаемых Microsoft Office.
- ↑ [1]
Ссылки
ar:هندسة عكسية
ca:Enginyeria inversa
cs:Zpětné inženýrství
da:Reverse engineering
de:Reverse Engineering
en:Reverse engineering
es:Ingeniería inversa
fa:مهندسی معکوس
fi:Takaisinmallinnus
fr:Rétro-ingénierie
he:הנדסה הפוכה
it:Reingegnerizzazione
ja:リバースエンジニアリング
kn:ತಂತ್ರಜ್ಞಾನದ ಮೂಲತತ್ವದ ಆವಿಷ್ಕಾರ (ರಿವರ್ಸ್ ಇಂಜಿನಿಯರಿಂಗ್)
ko:리버스 엔지니어링
ml:റിവേഴ്സ് എഞ്ചിനീയറിംഗ്
ms:Kejuruteraan undur
nl:Reverse engineering
pl:Inżynieria odwrotna
pt:Engenharia reversa
ro:Inginerie inversă
sv:Reverse engineering
ta:பின்னோக்குப் பொறியியல்
th:วิศวกรรมผันกลับ
tr:Tersine mühendislik
uk:Зворотна розробка
vi:Kỹ nghệ đảo ngược
zh:逆向工程
↓
Реверс инжиниринг электроники — Обратное конструирование, обратная разработка, реинжиниринг
Получение конструкторской документации по образцу электронной схемы:
- Перечень электронных компонентов (BOM-лист или спецификация)
- Снятие трассировки печатной платы (до 16 слоев)
- Воспроизведение принципиальной электронной схемы
- Создание полноценного проекта в Altium
Восстановление документации на электронный модуль позволяет осуществлять его повторное производство даже в случае утери инженерных файлов. В результате проведения реверс инжиниринга вы получите документацию, полностью пригодную для последующего исследования, внесения изменений или производства.
Реверс инжиниринг или, другими словами, обратная разработка электроники используется для следующих целей:
- восстановление утерянной конструкторской документации
- подготовка сервисной документации
- обеспечение совместимости между сопрягаемыми модулями
- обнаружение аппаратных “закладок” и незадокументированных возможностей
- контроль соответствия предоставленной конструкторской документации
- изучение принципов работы и схемотехнических решений изделий
- анализ стоимости компонентов
Технология обратной разработки печатных плат позволяет перенести топологию печатной платы с физического модуля на чертежи. Электронные модули на печатных платах, проходя несколько этапов, будут переведены в Gerber файл, BOM лист, принципиальную схему, проект в Altium Designer.
Последовательность шагов реверс инжиниринга:
- Создание перечня и фиксация расположения всех компонентов на плате
- Удаление компонентов с платы, измерение номиналов пассивных компонентов
- Сканирование внешних слоев печатной платы
- Снятие внешних слоев меди и диэлектрика до следующего проводящего слоя
- Повторение шагов 3 и 4, пока все слои не будут отсканированы
- Перевод полученных изображений в файл Gerber PCB
- Преобразование файла Gerber в проект дизайна печатной платы, добавление в проект всех компонентов в соответствии с их местами
- Преобразование проекта в принципиальную схему
- Контроль целостности электронных цепей
1. Что такое обратная инженерия (RE)?
2. Как часто используется обратная инженерия?Согласно
Этот вид опроса вовлекает людей в конструктивный процесс обучения. Согласно методологии
С помощью обратного инжиниринга исследователь может собрать технические данные, необходимые для 3. Как юридически осуществляется реверс-инжиниринг?С реверс-инжинирингом связаны две основные законности:
Согласно npd-solutions патент
Обычно RE выполняется с использованием чистой комнаты или Китайской стены . Чистая комната, реверс-инжиниринг проводится последовательно:
4. Каковы некоторые юридические дела и этические вопросы, связанные с обратным проектированием?Новые судебные дела показывают, что методы обратного инжиниринга, которые используются для достижения 5. Является ли реверс-инжиниринг неэтичным?Этот вопрос широко обсуждается и, похоже, не имеет однозначного ответа.Аргумент номер один Есть также преимущества обратного проектирования. Обратный инжиниринг может использоваться как способ позволить продуктам 6. ЗаключениеХотя обратный инжиниринг является законным, если другое лицо или группа не копирует явно |
Что такое обратный инжиниринг? (с изображением)
Некоторые термины говорят сами за себя. Так обстоит дело с реверс-инжинирингом, который буквально разбирает что-то и снова собирает.Это можно сделать физически или виртуально, и цель состоит в том, чтобы выяснить, как что-то работает, чтобы создать нечто подобное.
Поврежденные или изношенные детали, которые использовались с самолетов-невидимок, таких как F-22 Raptor ВВС США, обычно уничтожаются, чтобы иностранные стороны не могли их реконструировать.
Обратный инжиниринг выполнялся на протяжении многих веков, почти столько же, сколько люди создавали вещи. Иногда обратный инжиниринг выполняется с целью улучшения существующего творения, в то время как другие примеры обратного инжиниринга включают в себя воровство технологий. Последнее особенно характерно для оружия на протяжении всей истории войн.
Не только оружие является предметом обратной инженерии.Повседневные вещи, такие как автомобили, DVD-диски и бытовая техника, являются предметом пристального внимания во всем мире. Некоторые компании имеют привычку импортировать товары из других стран, разбирать эти товары по частям, а затем использовать обратный инжиниринг для создания своих собственных.
Обратный инжиниринг также выполняется в виртуальном мире.Компьютерные художники и ученые практикуют реверс-инжиниринг, создавая трехмерные модели реальных устройств, а затем виртуально разбирая их, чтобы увидеть, как они работают. Иногда они собирают их обратно, либо точно, либо немного другим способом. Появление высокопроизводительных серверов и графических пакетов сделало это возможным и желательным.
Компьютеры также практикуют обратный инжиниринг на более фундаментальном уровне.Одна из форм такого рода обратной инженерии — декомпиляция. Декомпиляция — это процесс, во время которого компьютер преобразует информацию из низкоуровневого формата (компьютерный код) в высокоуровневый формат (текст и числа ASCII), чтобы люди могли читать такие вещи, как инструкции и веб-статьи. Распространенные случаи декомпиляции включают передачу файлов от одного пользователя другому, например, обмен данными или изображениями в электронной почте, или восстановление кода, который был поврежден или никогда не был завершен.Декомпиляция также может иметь форму нарушений безопасности, когда хакер будет использовать обратный инжиниринг, чтобы восстановить данные, которые кто-то так отчаянно хотел скрыть с помощью шифрования.
Другое двойное использование обратного проектирования — создание и предотвращение компьютерных вирусов.Создатели вирусов копаются во внутренностях компьютерного кода, чтобы найти места, где можно похоронить свои творения. Перестроив машинный код в исходный код, создатель вируса может найти то, что он или она ищет. На оборотной стороне этих действий находятся люди, которые стремятся предотвратить или уничтожить компьютерные вирусы. Они также используют обратный инжиниринг, чтобы деконструировать сам вирус и уничтожить или предвидеть вредоносные исполняемые файлы.
Обратный инжиниринг производственного веб-приложения
Давайте представим (пока гипотетически), что требования клиента требуют изменения, и вы понимаете, что у вас больше нет доступа к исходному коду или группе, которая разработала рабочее производственное приложение.Стоит ли начинать заново? Пересмотреть изменения? Может быть нет.
Подобные вещи случаются, и вот один из примеров реального проекта обратного инжиниринга, который недавно завершила RMCSoft.
Вызов
Наш клиент использовал веб-приложение, написанное на Java. Это приложение предоставляет отчеты в формате PDF через протокол передачи репрезентативного состояния (REST). Spring предлагает базовую структуру приложения, в то время как Spring MVC принимает запросы через REST от другого приложения, а затем предоставляет отчеты в формате PDF, созданные на основе данных, хранящихся в базе данных MySQL.
Заказчик хотел бы продолжить использование этого приложения и даже улучшить его, но у него нет исходного кода. На рабочем сервере доступен и развернут только ресурс веб-приложения (WAR), поэтому нашим инженерам пришлось восстанавливать структуру веб-приложения.
Давайте посмотрим, как можно быстро и эффективно решить эту проблему.
Приоритет 1: Получить исходный код приложения
Во-первых, мы рассмотрим структуру WAR, развернутого на производственном сервере.Наши инженеры нарисовали структуру веб-приложения и восстановили ее, чтобы разработать скелет веб-приложения.
Затем мы соединили исходный код и скелет, чтобы получить жизнеспособное приложение, которое можно было бы изменить и улучшить.
Приоритет 2: Обратное проектирование WAR
Доступно несколько служебных инструментов для получения исходного кода Java из байт-кода.
Вот лишь некоторые из них:
Для решения нашей задачи мы выбрали Bytecode Viewer.Это бесплатный инструмент с отличным графическим интерфейсом, который позволяет программисту сосредоточиться на структуре проекта. В качестве входных данных средство просмотра байт-кода принимает файлы JAR. И WAR, и JAR-файлы являются архивами, поэтому мы можем изменить расширение с .war на .jar.
Ниже вы можете найти результат нашего обратного проектирования:
Приоритет 3. Восстановление структуры веб-приложения
Чтобы восстановить структуру приложения, нам необходимо изучить нынешнюю структуру веб-архива.На этом этапе мы уже переименовали наш файл WAR, и теперь у нас есть файл JAR. Теперь мы можем распаковать его и изучить структуру.
Вот результат:
- WEB-INF
- web.xml
- библиотека
- * .jar (все библиотеки)
- классов
- applicationContext.xml
- log4j.properties
- config.properties
- ком
- пакетов с классами в байт-коде (*.класс)
- МЕТА-ИНФ
- изображений
- шаблонов
- HTML-шаблоны для отчетов (* .html)
- index.jsp
Как мы видим, WAR содержит pom.xml, который мы можем просто скопировать и вставить в наш проект.
Все файлы конфигурации, которые находятся в папке WEB-INF / classes , должны быть помещены в папку src / main / resources в соответствии со структурой веб-проекта Maven.Изображения, шаблоны, index.jsp будут в папке src / main / webapp . WEB-INF / web.xml переходит в src / main / webapp / WEB-INF .
Места назначения для всех этих артефактов выбираются на основе макета каталога веб-проекта Maven и правил упаковки веб-архива. Таким образом, мы получили восстановленную структуру WAR:
- src
- основная
- ресурсов
- applicationContext.xml
- конфиг.недвижимость
- log4j.properties
- веб-приложение
- WEB-INF
- изображений
- шаблонов
- HTML-шаблоны для отчетов (* .html)
- index.jsp
- ресурсов
- основная
- пом.xml
Приоритет №4. Собираем вместе
Теперь у нас есть исходный код в результате первого и второго этапов и структура проекта в результате третьего этапа.
Все полученные исходные коды Java будут находиться в папке src / main / java . Веб-проект теперь содержит следующую структуру:
- src
- основная
- java (исходники с первого этапа)
- ком
- все пакеты с исходным кодом
- ком
- ресурсов
- applicationContext.xml
- config.properties
- log4j.недвижимость
- веб-приложение
- WEB-INF
- изображений
- шаблонов
- HTML-шаблоны для отчетов (* .html)
- index.jsp
- java (исходники с первого этапа)
- основная
- пом.xml
Наконец, проект можно упаковать с помощью mvn clean install.
Конечный результат
Наша основная цель достигнута; мы предоставили нашему клиенту исходный код веб-приложения, работающего в производственной среде.Остальные проблемы довольно легко решить, поскольку теперь у нас есть исходный код. Преимущества наших усилий очевидны: наш заказчик может поддерживать и настраивать веб-приложение. В этом примере мы продемонстрировали один из способов извлечения источников из WAR и восстановления структуры веб-проекта, написанного на Java.
Надеемся, что вы никогда не попадете в описанную выше ситуацию. Однако, если это когда-нибудь случится, мы надеемся, что эта информация будет полезной.
[Обратный инжиниринг] — Дизайн нового потребительского продукта
Приложения:
Разработка и дизайн продукта,
Обратный инжиниринг
Отрасли: потребительские товары
Что нужно отрасли
Обратный инжиниринг — это процесс, с помощью которого дизайн продукта анализируется или воссоздается с использованием физической части в качестве отправной точки.В процессе проектирования нового продукта будут изготовлены глиняные модели и различные типы прототипов, чтобы проверить, оценить и подтвердить концептуальный дизайн. Этот процесс обычно является итеративным и требует внесения нескольких изменений в исходный дизайн. По этой причине обратный инжиниринг может стать ценным решением для извлечения размеров ручных моделей, глиняных моделей и прототипов; особенно с произвольной формой. Вы также можете получить трехмерную геометрию существующего объекта, чтобы включить некоторые его функции в дизайн нового продукта.В дополнение к этому, решение для 3D-сканирования также может предоставить мощный инструмент для документирования и архивирования различных итераций дизайна.
Важнейшими этапами реверс-инжиниринга являются точное и эффективное получение размеров объекта и извлечение необходимой информации из результатов сканирования для создания нового дизайна с правильным внешним видом и функциональностью.
Преимущества решения HandySCAN 3D
Обратный инжиниринг требует получения размеров деталей различной формы и сложности, которые потенциально могут быть выполнены в любой среде .HandySCAN 3D может выполнять сбор данных непосредственно в дизайн-студии, а также на объекте заказчика или в производственном цехе.
Поскольку разработчик хочет воссоздать проект с моделью или прототипом в качестве эталона, получение должно быть точным и давать всю информацию, необходимую для создания модели САПР для детали, которая будет изготовлена. Этот цифровой 3D-сканер предоставит полных и точных моделей сетки .
Решение HandySCAN 3D помогает значительно сэкономить время по сравнению с традиционными методами измерения.Размеры, необходимые для процесса обратного проектирования, быстро измеряются и становятся легко доступными, чтобы проектировщик мог выполнить работу.
.