Обратный инжиниринг: Реверс-инжиниринг – Расковырять и понять как работает / Хабр
Обратный инжиниринг — это… Что такое Обратный инжиниринг?
Обра́тная разрабо́тка (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering) — исследование некоторого устройства или программы, а также документации на них с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.
Применяется обычно в том случае, если создатель оригинального объекта не предоставил информации о структуре и способе создания (производства) объекта. Использование обратной разработки может противоречить закону об авторском праве и патентному законодательству.
В настоящее время под словами «reverse engineering» чаще всего понимается т. н. «clean room reverse engineering», то есть процесс, при котором одна группа разработчиков анализирует машинный код программы (в сленге хакеров для этого процесса используется также выражение «обратный инжиниринг» или «реверсный инжиниринг»), составляет алгоритм данной программы на псевдокоде, либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства. После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «fair use», то есть добросовестного использования оригинальной программы. Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом.
Сферы применения обратной разработки
Электроника
Копирование различных электронных блоков без фактической разработки. Известно, что часть советской цифровой электроники копировалась. Например, американская серия интегральных схем 74 и её советский аналог К(Р)155.
Ещё один пример обратной разработки — создание компанией AMD процессора Intel 80386.
Программное обеспечение
Исследование и обратная разработка программ обычно осуществляются с целью дальнейшей модификации, копирования, или, например, написания генераторов ключей, алгоритм работы которых получен на основе анализа алгоритма их проверки. Также исследование программ применяется с целью получения некоторых закрытых сведений о внутреннем устройстве программы — о протоколе сетевого обмена с сервером, аппаратным средством, ключом защиты или о взаимодействии с другой программой. Ещё одна область применения — получение информации о способах экспортирования данных из многочисленных проприетарных форматов файлов[1].
С развитием Интернета популярные операционные системы и программы всё интенсивнее исследуются на предмет обнаружения в них уязвимостей или т. н. дыр. В дальнейшем найденные дыры могут использоваться для получения несанкционированного доступа к удалённому компьютеру или компьютерной сети.
Одним из широко известных примеров обратной разработки является исследование IBM, ставшее серьёзным шагом на пути развития производства IBM-совместимых компьютеров сторонними производителями. Создание сервера GNU/Linux и работающего с серверами на базе ОС Microsoft Windows) также потребовало обратной разработки используемого SMB.
Обратная разработка программного обеспечения производится с помощью следующих методик.
- Анализ обмена данными, наиболее распространённый в обратной разработке протоколов обмена данными, который производится с помощью анализатора шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.
- Дизассемблирование с помощью дизассемблера, при котором прямой машинный код программы читается и понимается в своём чистом виде, только с помощью мнемоник машинного языка. Этот способ работает на любой компьютерной программе, но требует достаточно много времени, особенно для неспециалиста.
- Декомпиляция с помощью декомпилятора — процесс создания исходного кода на некотором языке программирования высокого уровня.
Базы данных
может использоваться при создании реляционной модели базы данных.
Промышленность
Обратная разработка продукта конкурента с целью узнать его устройство, принцип работы и оценить возможности создания аналога.
Военная промышленность
Jerry cans
Самыми известными фактами обратной разработки во время второй мировой войны являлись:
- Немецкие канистры для бензина — британские и американские войска заметили, что немцы имели очень удобные канистры. Они скопировали эти канистры, и те получили название Jerry cans (от слова «gerrys» — от «Germans»).
- Туполев Ту-4 — некоторое количество американских бомбардировщиков B-29 при совершении вылетов в Японию были вынуждены садиться в СССР. Советские военные, которые не имели подобных стратегических бомбардировщиков, решили скопировать B-29. Через несколько лет они разработали Ту-4, практически полную копию.
Для анализа исходного кода
С широким применением SADT) связано возникновение основных идей популярного ныне понятия — BPR (бизнес-процесс реинжиниринг).
Существуют программы, которые предоставляют как возможность восстановления (обратный, reverse) по исходному коду общего системного проекта (классы, связь между ними и т.п.), так и прямой генерации исходного кода на основе созданного проекта (функциональных блоков бизнес-процесса):
Примечания
- ↑ Часто применяется, например, в отношении форматов, поддерживаемых Microsoft Office.
См. также
Ссылки
Wikimedia Foundation.
2010.
Что такое обратный инжиниринг | Инженерные расчеты
Обратный инжиниринг (обратное проектирование, реверсивный инжиниринг) играет жизненно важную роль в современном проектировании и производстве. Он используется для воссоздания дорогостоящих деталей в приборостроении, оборонной промышленности, нефтегазовой, химической и энергетической отраслях.
Реверсивный инжиниринг используется для производства разнообразных деталей, таких как уплотнения, прокладки, детали корпуса или двигателя, и может быть применен при восстановлении работоспособности устаревшего оборудования и при проектировании новых конструкций на базе имеющихся.
Реверс изделия — творческий процесс, предполагающий, понимание технологий, принципа работы устройства, умения соединить все детали изделия так, чтобы достичь заданных характеристик работы. Инженер, занимающийся обратным инжинирингом, работает в некоторой степени как археолог. Перед ним стоит задача восстановить неизвестную технологию создания детали, для получения точно такого же результата. Для этого они изучают как деталь работает, где применяется, какие могут быть способы создания копии.
Ключевой элемент процесса обратного инжиниринга – создание цифровой копии с помощью программного обеспечения CAD (computer-aided design, САПР). Цифровая копия создается вручную или с помощью технологии сканирования в CAD-модель. После того как геометрия детали воспроизведена, инженеру необходимо выбрать технологию изготовления – традиционную или аддитивную.
Законность обратного инжиниринга зависит от ситуации. При копировании деталей необходимо консультироваться с юристом и соблюдать законы об авторском праве и условия патентов. Если обратный инжиниринг применяется для восстановления работоспособности машины или механизма, при отсутствии возможности приобрести запасные части (например, если компания-поставщик больше их не выпускает, или прекратила свое существование), то данная деятельность в целом не может быть признана незаконной. Если речь идет о массовом создании и производстве копий детали, то такая деятельность может быть признана созданием контрафактной продукции. Прямое копирование запатентованной детали может повлечь в дальнейшем проблемы с законом. Поэтому при обратном инжиниринге стараются уходить от прямого копирования и разрабатывать новые изделия на основе аналогов, внедряя туда усовершенствования и избегая запатентованных узлов.
На первом этапе производится сканирование детали. С помощью 3D сканера проводятся необходимые замеры и создается облако точек. Есть ряд средств измерения объектов при 3D-сканировании, например: лазерные сканеры, световые сканеры, координатно-измерительные машины (CMM) и промышленные КТ-сканеры. 3D сканер может быть совсем простым, как камера телефона, или сложным — с лазерным устройством на роботизированном манипуляторе.
Полученное с помощью сканера облако точек переводится в формат STL. Следует подчеркнуть, что после 3D сканирования в распоряжении инженера имеется только полигональная модель, требующая обязательной доработки. Зачастую данные сканирования содержат неточности и погрешности, поэтому необходим инструмент, позволяющий быстро и просто исправить 3D модель и сделать ее пригодной для последующей работы. Для перевода STL файла в 3D модель и ее последующего исправления можно использовать программное обеспечение ANSYS Discovery SpaceClaim. В SpaiceClaim имеются встроенные средства исправления STL файлов, которые позволяют в автоматическом режиме заполнить разрывы, мелкие отверстия, отсутствующие грани. После того, как получена точная 3D модель создана, инженер может подготовить деталь к традиционному производству с помощью САМ приложения, или передать геометрию в специализированное ПО для печати на 3D принтере.
Таким образом, современный обратный инжиниринг позволяет быстро получать цифровые модели физических объектов, а затем создавать их дубликаты с помощью доступных технологий производства.
Реверс-инжиниринг ПО и российское право
Этот материал представляет собой взгляд на реверс-инжиниринг программного обеспечения с позиций российского права. Помимо анализа норм закона, приведены примеры как договорной практики, так и судебной.
Рассмотрение с позиций российского права такого вида деятельности, как реверс-инжиниринг программного обеспечения, предлагаю начать с представления следующей абстрактной ситуации:
Есть компьютерная программа. Есть компания, которая приобрела лицензию на такое ПО и использует его в своей деятельности. По неизвестной причине на серверах компании программа работает нестабильно. Руководство компании планирует поручить группе сторонних специалистов провести реверс-инжиниринг этой программы для определения причин нестабильности ее работы на серверах компании в целях их устранения.
Такая ситуация – лишь один из примеров, когда встает вопрос о проведении реверс-инжиниринга нужного софта. Причины для этого могут быть самыми разными. Еще пара абстрактных примеров:
- требуется доработать программу, автор которой не известен и нет никакой возможности его установить и связаться с ним для общения насчет кода программы;
- чтобы не отстать от конкурирующей компании, опубликовавшего новый релиз своего ПО, надо как можно быстрее изучить, что за код содержится в последней версии ПО такой компании с целью сделать свой продукт еще лучше, чем у нее.
Словом, таких причин наберется немало. И если приступать к этому делу вплотную, то возникает не только техническая сторона вопроса, но и юридическая. А именно, можно ли с точки зрения закона заниматься такой деятельностью в принципе? Предусмотрена ли какая-нибудь ответственность для лица, которое выполнило обратную разработку программы? А предусмотрена ли она для того, кто заказал такое выполнение? Как понимаете, таких вопросов наберется немало, поэтому предлагаю перейти к самой сути дела.
Если среди читателей этого материала есть те, кому не достаточно хорошо знаком сам термин реверс-инжиниринг, то полагаю, будет уместным сразу определить, что под этим понимается. Под реверс-инжинирингом программного обеспечения понимается следующее:
- Обратная разработка (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering) — исследование некоторого устройства или программы, а также документации на них с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.[1]
- Обратная инженерия (процесс систематического разбора программы (восстановления её исходного текста и структуры) или микросхемы для изучения алгоритмов её работы с целью имитации или повторения некоторых или всех её функций в другой форме или на более высоком уровне абстракции, снятия защиты, изучения алгоритмов, добавления новых возможностей, восстановления протоколов или исправления ошибок и др. [2]
- Реверс-инжиниринг (Reverse Engineering) или, как его еще называют, обратная разработка, а иногда — обратное проектирование — это процесс анализа приложения для определения его функциональных характеристик, внутренней архитектуры и, собственно, его работы: модулей, функций, алгоритмов. [3]
Обобщая, можно утверждать, что реверс-инжиниринг (или обратная разработка) программного обеспечения представляет собой процесс исследования содержимого программы путем ее преобразования в исходный код для определения ее структуры и принципов ее работы.
Если вопрос о самом термине можно считать решенным, предлагаю обратить свое внимание к юридической стороне реверс-инжиниринга. Содержание этой стороны изложено в настоящем материале в следующей последовательности: положения законодательства, договорная практика, судебная практика.
Положения законодательства
Начнем, прежде всего, с законодательных норм. Возможно, это кого-то и удивит, но такое явление, как реверс-инжиниринг, вполне знакомо российскому законодательству. О нем идет речь в статье 1280 Гражданского кодекса РФ:
«Гражданский кодекс Российской Федерации (часть четвертая)» от 18.12.2006 N 230-ФЗ
Статья 1280. Право пользователя программы для ЭВМ и базы данных
<…>3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий:
1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников;
2) указанные действия осуществляются в отношении только тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию;
3) информация, полученная в результате декомпилирования, может использоваться лишь для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, не может передаваться иным лицам, за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, а также не может использоваться для разработки программы для ЭВМ, по своему виду существенно схожей с декомпилируемой программой для ЭВМ, или для осуществления другого действия, нарушающего исключительное право на программу для ЭВМ.
Эта правовая норма дает понять, что обратная разработка допустима с точки зрения закона только в случае выполнения определенных критериев. Предлагаю обратить внимание на следующие из них:
1. Правомерное получение экземпляра (копии) программы. Экземпляр (копия) программы, которая будет являться объектом реверс-инжиниринга, изначально должен быть получен любым правомерным способом.
Т.е. приобретение ПО в официальном магазине цифровых приложений – это правильный подход для реверс-инжиниринга. Если же нелегальная (пиратская) версия программы скачивается на торрент-трекере, реверс-инжиниринг такой программы будет неправомерен.
2. Цель реверс-инжиниринга. Целью реверс-инжиниринга должно выступать достижение способности к взаимодействию программы (версии программы), созданной в ходе реверс-инжиниринга, с другими программами.
Т.е. когда цель обратной разработки – это только лишь изучение новой версии продукта конкурента для необходимости понять, как сделать аналогичный функционал в своем продукте, то такая цель по общему правилу позволит говорить о неправомерности проведенного реверс-инжиниринга.
3. Отсутствие необходимой информации в других источниках. Информация, необходимая для достижения способности к взаимодействию, ранее не была доступна из других источников.
Т.е. в случае наличия в свободном доступе где-то в Интернете документации к программе, являющейся объектом реверс-инжиниринга, содержание которой позволит достигнуть эффект, уже достигнутый с помощью реверс-инжиниринга, но такая документация не была найдена, то этот факт с высокой долей вероятности может быть использован как доказательство неправомерности проведенной обратной разработки.
Остальные критерии также можно определить, исходя из текста вышеприведенной статьи. Но в любом случае, одними положениями закона дело не ограничивается. Практическое применение этой нормы выражено как в договорной, так и в судебной практике.
Договорная практика
На мой взгляд, наиболее широкое распространение в рамках договорной практики деятельность по реверс-инжинирингу нашла в виде ее прямого запрета, закрепленного в текстах различных соглашений на использование программных продуктов и сервисов (EULA, ToS, ToU и т.д.). Впрочем, это вполне ожидаемо – многие правообладатели хотят ограничить действия пользователя в части исследования полученной по лицензии программы, сводя ограничение свободы действий пользователя в том числе и к такому запрету.
Несколько примеров из различных текстов подобных документов:
Лицензионное соглашение для Kaspersky Rescue Disk 10
https://support.kaspersky.ru/4128Запрещается декомпилировать, дизассемблировать, модифицировать или выполнять производные работы, основанные на ПО, целиком или частично за исключением случаев, предусмотренных применимым законодательством.
Условия использования Skype
https://www.skype.com/ru/legal/tou-connect/4.2 Ограничения. Вы не должны предпринимать указанные ниже действия и обязуетесь воздержаться от того, чтобы:
<…>
(b) предпринимать, побуждать, разрешать или санкционировать модификацию, создание аналогичных продуктов или усовершенствований, перевод на другие языки, инженерный анализ в целях воспроизводства, декомпилирование, обратное ассемблирование, декодирование, эмуляцию, нарушение целостности защитной системы, восстановление или попытки восстановить исходный код или протоколы Программного обеспечения или каких-либо его частей или функциональных возможностей Программного обеспечения за исключением случаев, когда такие действия допустимы в соответствии с законодательством;
Лицензионное соглашение на использование программы «2GIS Dialer»
http://law.2gis.ru/dialer-licensing-agreement/5.1. Пользователь не имеет права самостоятельно или с привлечением третьих лиц:
5.1.1. Вскрывать технологию, эмулировать, создавать новые версии, изменять, декомпилировать, дизассемблировать, дешифровать и производить иные действия с кодом Программы, имеющие целью нарушение системы защиты Программы от несанкционированного использования, а также получение информации о реализации алгоритмов, используемых в Программе.
Лицензионное соглашение RoboForm
http://www.roboform.com/ru/support/licenseНЕ РАЗРЕШАЕТСЯ: Потребитель не должен: (a) удалять уведомления об авторском праве или ограничения из программы; (б) извлекать алгоритмы из программы или пытаться декомпилировать программу.
По сути, такие формулировки про запрет на осуществление реверс-инжиниринга – это своего рода юридическая перестраховка для правообладателя от действий пользователя на исследование «начинки» программного продукта с закрытым исходным кодом (проприетарный софт). А гарантией соблюдения пользователем такого запрета является перспектива наступления различных негативных последствий к нему (начиная от досрочного прекращения лицензии и заканчивая взысканием с него понесенных правообладателем убытков или денежной компенсации за нарушение авторских прав). Между прочим, в примерах зарубежной судебной практики (например, дело Blizzard v. MDY Industries, LLC), позиция о нарушенных правах истца строится не только на нарушении авторских прав, но и в том числе на нарушении договорных обязательств ответчиком (поскольку предполагается, что ответчик, начав использование исследуемой программы, согласился с положениями ее лицензионного соглашения, т.е. стал стороной в договорных отношениях с истцом как лицензиаром такой программы).
Что касается привлечения третьих лиц (специалистов, обладающих необходимыми техническими познаниями) для выполнения обратной разработки интересующего заказчика программного обеспечения, то здесь договорные отношения, на мой взгляд, сводятся к следующему:
- если действия исполнителя в конечном итоге предполагают создание результатов интеллектуальной деятельности (например, когда реверс-инжиниринг предполагает написание кода и создание каких-либо программ, скриптов и т.п.), то в этом случае следует заключать договор на выполнение работ (а в случае его заключения с физическим лицом будет применим и договор авторского заказа) с конкретизацией в нем статуса интеллектуальных прав заказчика на результаты работ по такому договору;
- Если действия исполнителя не предполагают создание результатов интеллектуальной деятельности (например, если для исследуемой программы необходимо сделать ее тестирование), в этом случае следует заключать договор на оказание услуг.
По большому счету, особой специфики в подобных договорах нет, они мало чем будут отличаться по своему содержанию от иных договоров на выполнение работ или оказание услуг в сфере программного обеспечения, поэтому предлагаю в рамках этого материала отдельно на них не останавливаться, а перейти к следующей части статьи.
Судебная практика
Конечно, наибольший интерес по теме представляет собой судебная практика, поскольку она через призму конфликта сторон позволяет как проследить трактовку и применение норм закона, так и применение положений договора (в случае наличия между сторонами спора договорных отношений), а это, в свою очередь, позволит сделать для самих себя определенные выводы на будущее касательно конкретных формулировок, используемых (или планируемых к использованию) в документах, их юридической силе и практике применения.
Говоря о судебной практике российских судов в отношении реверс-инжиниринга программного обеспечения, сразу отмечу, что она пока не успела накопить такие яркие судебные дела, какими обладают другие страны (по крайней мере, если говорить о тех делах, что были изучены при подготовке текста этого материала). Под яркими делами имеются в виду такие процессы, как Sega Enterprises v. Accolade, Atari Games Corp. v. Nintendo of America, Inc, Blizzard v. Internet Gateway, Inc (все – США), Microsoft v. Vest Corporation (Франция), SAS Institute Inc v World Programming Ltd (Великобритания). Тем не менее, и у нас в российской практике есть примеры, которые вполне будут подходить к обсуждаемой теме и на которые точно стоит обратить свое внимание (см., например, дело № 09АП-23848/2013-ГК по иску ООО «Фирма СтройСофт» к Национальной ассоциации сметного ценообразования и стоимостного инжиринга и ООО «Бюро экономического консалтинга»).
Обзор судебной практики, я думаю, следует начать со следующего судебного документа:
Постановление Пленума Верховного Суда РФ N 5, Пленума ВАС РФ N 29 от 26.03.2009
«О некоторых вопросах, возникших в связи с введением в действие части четвертой Гражданского кодекса Российской Федерации»36. Судам следует учитывать, что право совершения в отношении программы для ЭВМ или базы данных действий, предусмотренных статьей 1280 ГК РФ, принадлежит только лицу, правомерно владеющему экземпляром такой программы для ЭВМ или базы данных (пользователю).
Он говорит ровно о том, что в случае определения правомерности совершения реверс-инжиниринга программы должен быть проанализирован вопрос, действительно ли лицо, которое выполняло реверс-инжиниринг программы, правомерно обладало экземпляром такой программы или нет. Если неправомерно, то, скорее всего, исход дела будет не в пользу такого лица. Именно про это уже было указано выше в пояснении про первый критерий допустимости совершения действий по обратной разработке ПО.
Подобное утверждение фактически продублировано и в таких решениях, как, например, Постановление Пятнадцатого арбитражного апелляционного суда от 6 августа 2014 г. по делу № А32-42112/2013, Решение Арбитражного суда Кировской области от 28 марта 2014 г. по делу № А28-152/2014.
Далее, второй момент, на который стоит обратить внимание: имеет ли право одно лицо привлекать других лиц для выполнения реверс-инжиниринга или это лицо должно осуществлять его самостоятельно? Ответ на этот вопрос может дать следующее решение суда:
Решение Арбитражного суда города Москвы от 29 мая 2013 г. по делу № А40-10750/2013По смыслу ст.1274 ГК РФ и п.2 ст.1280 ГК РФ исследование программы для ЭВМ, как и любого другого объекта исключительных прав, может быть проведено как пользователем самостоятельно, так и любым иным лицом, обладающим специальными знаниями, но в интересах пользователя, с его ведома и по его согласию. Это объясняется тем, что само по себе исследование в силу ст.1270 ГК РФ не указано в качестве способа использования объекта исключительных прав и не предполагает его возмездное отчуждение или иное введение в оборот.
Т.е. оно позволяет сделать следующий вывод: исследование программы для ЭВМ может быть проведено как пользователем самостоятельно, так и любым иным лицом, обладающим специальными знаниями, но в интересах пользователя, с его ведома и по его согласию.
Тем более что прямого запрета на такое проведение исследования одним лицом и в интересах другого в действующем законодательстве нет. Это также следует из судебной практики:
Постановление Девятого арбитражного апелляционного суда от 12 августа 2013 г. N 09АП-23848/2013-ГКПрямой запрет на осуществление исследования в интересах пользователя, с его ведома и по его согласию любым лицом, обладающим необходимыми специальными познаниями, в действующем законодательстве отсутствует.
Тот же самый вывод можете найти и в вышеуказанном Решении Арбитражного суда города Москвы от 29 мая 2013 г. по делу № А40-10750/2013.
Следуем далее. Если в соглашении, на условиях которого распространяется программа (представляющая собой объект для реверс-инжиниринга) ничего не говорится о праве пользователя такой программы на осуществление реверс-инжиниринга, то допустимо ли его проведение без закрепления такого права в содержании соглашения или нет?
Ответ на этот вопрос можно найти в этом постановлении:
Постановление Одиннадцатого арбитражного апелляционного суда от 25 октября 2012 года по делу № А55-13189/2012Заключение лицензионного договора означает, что пользователь программы вправе совершать в отношении ее действия, предусмотренные ст. 1280 ГК РФ, а также иные действия, обусловленные договором и связанные с эксплуатацией программы. <…> На этот договор в отличие от иных лицензионных соглашений не распространяются правила, установленные пунктами 2 — 6 статьи 1235 Кодекса.
Аналогичный ответ, кстати, содержится и в вышеуказанном Постановлении Пленума ВС РФ и Пленума ВАС РФ от 26 марта 2009 года №№ 5, 29 «О некоторых вопросах, возникших в связи с введением в действие части четвертой Гражданского кодекса Российской Федерации».
Интересно, что есть судебная практика, согласно которой внесение исправлений в выявленные ошибки ПО может быть нарушением прав правообладателя:
Постановление Федерального Арбитражного Суда Северо-Западного округа от 07 июня 2013 года по делу N А13-6254/2012В пункте 6.6.1 названных лицензионных договоров ограничено право лицензиата осуществлять действия: деассемблировать, декомпилировать (преобразовывать объектный код в исходный текст), адаптировать и модифицировать программы и другие компоненты программного обеспечения. <…>
Исследовав и оценив представленные лицами, участвующими в деле, доказательства по правилам статей 65 и 71 АПК РФ, в том числе заключенные Обществом в 2010-2011 годах договоры на оказание услуг по сопровождению программного обеспечения <…>, судебные инстанции установили, что внесение изменений в программное обеспечение, <…> исправление выявленных ошибок в программном обеспечении <…> без согласия правообладателя <…> приведет к нарушению исключительного права <…> на результат интеллектуальной деятельности.
По такой логике, попытка устранить ошибки в программе (для того, чтобы обеспечить ее функционирование для себя правильным образом, без ошибок) самостоятельно, без привлечения к этому самого правообладателя, может привести к появлению ответственности. Тогда получается, что в случае совершения реверс-инжиниринга, для соблюдения всех критериев правомерности, предусмотренных вышеуказанным п. 3 ст. 1280 ГК, необходимо будет иметь обоснование, что самостоятельное (имеется в виду, без привлечения самого правообладателя) устранение ошибок было необходимо для достижения способности к взаимодействию программы правообладателя с другими программами.
Следующий момент: если реверс-инжиниринг исследуемой программы выполняется только в целях проверки, не является ли такая программа объектом нарушения прав, то допустим ли реверс-инжиниринг в подобных целях?
В этой ситуации не все так однозначно. Конечно, многое зависит от конкретных обстоятельств дела, но следующий пример из практики (о котором речь уже шла выше по тексту) говорит о том, что исследование программы в целях подобной проверки и для сбора доказательной базы ответчиками в свою защиту было правомерным действием:
Постановление Девятого арбитражного апелляционного суда от 12 августа 2013 г. N 09АП-23848/2013-ГК<…> исследование программы было произведено ответчиками в рамках добросовестной и обоснованной необходимости, исключительно в целях исполнения обязанности по доказыванию исковых требований в соответствии со статьей 65 АПК РФ, не имело цели создания для истца каких-либо негативных последствий и не привело к возникновению таких последствий.
На мой взгляд, это достаточно значимый судебный акт, из которого можно сделать вывод, что исследование сторонней программы в целях сбора доказательств вполне может быть признано правомерным действием по отношению к исследуемой программе (а следовательно, и отсутствию нарушения авторских прав ее правообладателя).
Поэтому кому интересна эта тема в деталях, рекомендую ознакомиться с делом по иску ООО «Фирма СтройСофт» к Национальной ассоциации сметного ценообразования и стоимостного инжиринга и ООО «Бюро экономического консалтинга»: почитать Постановление Девятого арбитражного апелляционного суда от 12 августа 2013 г. N 09АП-23848/2013-ГК и иные документы по нему.
Что же касается общих выводов по судебной практике по предмету темы, то стоит отметить следующее:
- Поскольку судам надлежит устанавливать, была ли программа, которая являлась объектом реверс-инжиниринга, получена для исследования правомерно или нет, то в первую очередь, следует обратить свое внимание на этот аспект. Если окажется, что была получена неправомерно, то, скорее всего, никакие другие аргументы не сыграют на пользу защитной позиции исследователя;
- Исследование может проводить как сам пользователь, так и любое другое лицо, но с его ведома и согласия. Поэтому в случае привлечения стороннего специалиста необходимо будет подтверждать факт наличия такого ведома и согласия;
- Проведение реверс-инжиниринга программы в целях сбора доказательств может быть признано правомерным действием.
-
↑
Словари и энциклопедии на Академике //
http://dic.academic.ru/dic.nsf/ruwiki/1070713 дата обращения: 01.10.2016.
-
↑
Мультитран //
http://www.multitran.ru/c/M.exe?l1=2&l2=1&s=Reverse+engineering дата обращения: 08.10.2016.
-
↑
Анна Андреева, «Реверс-инжиниринг в контексте безопасности настольных и мобильных приложений» //
http://www.a1qa.ru/blog/revers-inzhiniring-v-kontekste-bezopa/ дата обращения: 05.10.2016.
P.S. Кому интересно почитать дополнительные материалы про реверс-инжиниринг программного обеспечения на русском, могу предложить к ознакомлению свой перевод справочного материала по юридическим вопросам реверс-инжиниринга, подготовленного фондом Electronic Frontier Foundation (перевод см. здесь, оригинал доступен по этой ссылке).
Применение технологии обратного инжиниринга в машиностроении
Библиографическое описание:
Водин, Д. В. Применение технологии обратного инжиниринга в машиностроении / Д. В. Водин. — Текст : непосредственный // Технические науки: проблемы и перспективы : материалы IV Междунар. науч. конф. (г. Санкт-Петербург, июль 2016 г.). — Санкт-Петербург : Свое издательство, 2016. — С. 67-69. — URL: https://moluch.ru/conf/tech/archive/166/10534/ (дата обращения: 25.10.2020).
Рассмотрено применение обратного инжиниринга в машиностроении как одного из перспективных методов, способствующих эффективному развитию производства.
Ключевые слова: обратный инжиниринг, производство.
В настоящее время применение обратного инжиниринга как одного из перспективных методов становится одной из необходимых альтернатив стабильного развития предприятий в машиностроении.
Применение обратного инжиниринга достаточно широко, но наиболее часто оно применяется в машиностроении, автомобилестроении и электронике.
Обратный или реверс инжиниринг в машиностроении — это комплекс технологий, аппаратных и программных средств, необходимых для создания свойств объекта с внесением в него ряда доработок и когда проектировщик данного объекта не предоставил полную информацию о структуре и технологии создания.
Для данной технологии аппаратными средствами являются 3D сканеры, 3D-принтеры, компьютеры для сбора и обработки полученной информации и создания модели объекта. Применение аппаратных средств для использования технологии обратного инжиниринга показана на рис.1.
Рис. 1.
Первоначально данный метод применялся в военной промышленности с целью копирования удачных образцов военной техники. Одним из примеров такого копирования и применения метода обратного инжиниринга во время Второй мировой войны являются:
‒копирование и использование в американских и британских войсках немецких канистр для бензина;
‒копирование и создание Ту-4 советского самолета с американского бомбардировщика В-29. Американские бомбардировщики B-29 совершая вылеты на территорию Японии были вынуждены садиться в СССР. Советские военные, у которых не было аналога таких бомбардировщиков, решили сделать копию B-29. Через несколько лет они создали Ту-4 аналог В-29. Однако двигатели, вооружение и радиоэлектронное оборудование Ту-4 было собственной разработкой,которого не было на В-29.
Применение в машиностроении обратного инжиниринга необходимо для:
‒воссоздания утраченных или изношенных деталей, при исключении возможности закупки запчастей, при необходимости срочного ремонта;
‒в случаях применения новых механизмов и деталей;
‒воссоздание изделия, снятого с производства;
Основными преимуществами обратного инжиниринга являются:
‒сокращение временных и иных затрат на этапе создания продукции;
‒высокая производительность процесса;
‒экологичность;
‒возможность внесения доработок и автоматизации процесса.
Основными недостатками обратного инжиниринга являются:
‒при создании новых разработок возможно нарушение патентных и авторских прав;
‒высокая стоимость оборудования;
‒возможность раскрытия свойств того объекта, которого мы разработали и создания аналога конкурентами.
К основным этапам обратного инжиниринга относятся:
‒первый этап. Это получение математической модели образца. Для этих целей применяется 3D сканирование и 3D проектирование;
‒второй этап. Это этап когда из данных полученных от 3 D модели образца в CAD системе создают и оформляют документацию на него;
‒третий этап. Это этап самого изготовления образца на основе модели, но при копировании данный этап не проводится.
На рис.2. и рис3. показан один из этапов обратного инжиниринга.
Рис. 2.
Рис. 3.
Создание новых объектов и технологических изделий — это очень трудный и трудоемкий процесс, облегчить который помогает применение новых технологий, таких как обратный инжиниринг и др. Такие процессы начинаются с разработки новой идеи, и заканчиваются производством продукции.
Достаточно часто обратный инжиниринг используют для создания дубликата станка, агрегата, механизма отечественного или иностранного производства. Для этого необходимо не простое копирование готового изделия, но и создание чертежа с учетом особенностей российского производства.
С точки зрения защиты интеллектуальной собственности обратный инжиниринг является спорным явлением. Так как создание точной копии устройства или программы нарушает авторские и патентные права то использование обратного инжиниринга в качестве анализа продукта, с последующим созданием нового, не повторяющим исследуемый объект, а лишь учитывающий детали и взаимосвязи в нем, не является нарушением прав, а способствует эффективному развитию технологий.
Литература:
- Водин, Д.В., Соколов, М. В. Применение 3D принтеров и 3D печати для создания прототипа технических систем. Виртуальное моделирование, прототипирование и промышленный дизайн: материалы II международной научно-практической конференции. — Вып. 2: в 2 т. / под общ. ред. В. А. Немтинова; ФГБОУ ВПО «ТГТУ». — Тамбов: Изд-во ФГБОУ ВПО «ТГТУ», 2016. — Вып. 2. –Т. I.
- forum.astrakhan.ru/index.php?showtopic=101351;
- ru.wikipedia.org/wiki/Обратная_разработка.;
- www.ddmlab.ru/service/revers-inzhiniring/;
- dic.academic.ru/dic.nsf/ruwiki/17172;
- dic.academic.ru/dic.nsf/ruwiki/1070687;
- Реверсный инжиниринг: нарушение прав или развитияе технологии? Лю К. Е., главный специалист НОО УрО РАН, г. Екатеринбург;
- ОАО «Туполев» — История создания самолета 68 (Ту-4)
- IT консультант, Обратный инжиниринг [Электронный ресурс]. Режим доступа: режим доступа: http://www.it-konsultant.ru/knowledge/19.html
- Обратный инжиниринг и коммерческая тайна, Milgrom & Associates, [Электронный ресурс]. Режимдоступа: http://usa- patent.ru/commercial_secret/revers_engineering.html
- Алтунин, К. А. Концепция создания информационного обеспечения интеллектуальной системы автоматизированного проектирования процессов резания в технологии машиностроения: монография /К. А. Алтунин, М. В. Соколов — Тамбов: Студия печати Павла Золотова, 2015. — 112 с.;
Основные термины (генерируются автоматически): обратный инжиниринг, этап, CAD, машиностроение.
Похожие статьи
Реализация процессов обратного инжиниринга при обучении на…
Студенты кафедры Института машиностроения Тольяттинского государственного университета осваивают процессы обратного инжиниринга при выполнении комплекса лабораторных работ, в основу которых входит
в. г. Рис. 2. Этапы создания CAD-модели. Как видно (рис. 2б), при…
Компьютерный инжиниринг как инструмент инженерной…
Тренды развития программного инжиниринга: – Интеграция CAD/CAE-систем и составляющими PLM-продуктов
– Машиностроение: Проектирование, расчетно-конструкторские работы, дизайн-услуги.
Применение инструментов системного инжиниринга…
Поэтому сфера применения системного инжиниринга в аэрокосмической отрасли больше не ограничивается синтезом проекта. [1] Мало кто задумывается, что тот же подход может быть успешно применен и к другим этапам жизненного цикла изделия.
Применение макросов при проектировании несущих конструкций…
К системам проектирования CAD (Computer Aided Design) относят программные комплексы
Далее показаны этапы построения листового элемента рамы коробчатого сечения с помощью макроса (рис. 2) и (рис. 3).
Реализация процессов обратного инжиниринга при обучении на…
Тенденции современного компьютерного инжиниринга
Тренды развития программного инжиниринга: – Интеграция CAD/CAE-систем и.
Процесс разработки и сопровождения проекта на всех этапах могут также поддерживать специалисты инжиниринговых компаний.
Системы автоматического проектирования в судостроении
Трехмерные CAD-системы позволяют значительно ускорить процесс выпуска проектно-сметной документации, а также повысить точность проектирования.
организовано автоматизированное формирование заданий по раскрытию состава изделия машиностроения и внесению…
Выполнение и редактирование спецификаций сборочных чертежей…
Системы автоматизированного проектирования в машиностроении можно
Реализация процессов обратного инжиниринга при обучении на…
CATIA V5 — CAD/CAM/CAE — система для описания изделия и его моделирования на разных этапах жизненного цикла.
Системная инженерия проектирования инноваций | Молодой ученый
Такие этапы ЖЦИ, как маркетинг и разработка продукта активно используют инструменты системного инжиниринга, но нужно идти дальше. Например, трудоемкость технологической подготовки производства по отношению к общей трудоемкости технического проекта изделия в…
Reverse engineering — Национальная библиотека им. Н. Э. Баумана
Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:26, 21 января 2019.
Reverse engineering – исследование некоторого готового устройства или программы, а также документации на него с целью понять принцип его работы. Фактически Reverse engineering заключается в процессе разбора приложения с целью понять, как оно работает, чтобы в будущем воссоздать этот процесс с внесением необходимых изменений. Обычно для этих целей используются отладчик и ассемблер. В зависимости от качества используемого программного обеспечения будут отличаться результат и количество времени, которое необходимо потратить на его приведение в нормальный вид.
Нельзя сказать, что реверс-инжиниринг можно представить как что-то однородно плохое или хорошее. Конечно, с точки зрения разработчиков, которые создали приложение, это совсем не радостное событие. Но с другой стороны, во многих случаях написание опытными программистами необходимых файлов может быть по времени менее затратным, нежели использование подобного инструментария. Хотя для начинающих разработчиков реверс-инжиниринг может сослужить неплохую службу, если нет представления о том, как реализовать что-то, даже примерные и не совсем понятные наброски могут помочь с достижением поставленной цели.[Источник 1]
Виды
Существуют следующие виды реверс-инжиниринга:
- Реверс-инжиниринг программного обеспечения — это когда постигают суть неведомой программы с закрытым исходным кодом. Процесс нередко происходит с применением специализированного софта: декомпиляторов, отладчиков, дизассемблеров, распаковщиков и прочих хитрых инструментов.
- Реверсинг «железок» — определение структуры и спецификаций устройства. Создание альтернативных драйверов, а ещё «прошивки», которые иногда хочется менять и переделывать под свои цели. [Источник 2]
Безопасность
Если нужна защита от реверс-инжиниринга, то в таком случае есть два варианта: использование специальных программ или создание кодовой конструкции, которая будет мешать совершать разбор написанного. Последний вариант подходит исключительно опытным специалистам. Для Android- приложений в качестве специализированного программного обеспечения используется ProGuard. Это приложение, которое используется для сокращения, обфускации и оптимизации кода. Если программу «прогнать» через него, то получим файл с расширением *.apk меньшего размера, чем он был. В таком случае его будет значительно сложней разобрать. Причем преимуществом данной программы является то, что она даже была внедрена в систему сборки Android-приложений с обновления r9. Поэтому воспользоваться ею может любой разработчик, который имеет стандартные инструменты создания и разработки.
Также есть способ узнать, подключен ли отладчик к вашему коду. Но есть одна проблема. Эта проверка определяет, подключен ли отладчик в данное конкретное время. Хакер может подключиться к приложению после этой проверки, когда приложение уже не подозревает об опасности. Эту проблему можно решить двумя способами:
- Включить проверку в цикл выполнения (run loop), так что проверка будет выполняться постоянно.
- Поставить проверку в наиболее критичных участках кода, где нас больше всего волнует безопасность.
Первый вариант обычно нежелателен. Его цена — трата драгоценного процессорного времени.[Источник 3]
Сферы применения
Машиностроение, автомобилестроение, авиация
Копирование различных механизмов и машин без фактической разработки. Позволяет минимальными затратами воспроизвести удачную конструкцию, но есть случаи копирования и неудачных машин.
Примеры:
- Советский грузовик АМО-3 был практически полной копией американского грузовика «AutoCar-SA».
- Советский лодочный мотор «Москва» был практически полной копией очень удачного американского мотора ScottAtWater.
- Пример неудачного выбора прототипа для обратной разработки — советский лодочный мотор «Вихрь», копия немецкого мотора Koening.
- Советский самолет Ту-4, за исключением двигателей, является почти точной копией американского Boeing B-29 Superfortress.
- Практически все бензиновые двигатели, установленные на мотоблоках, генераторах и других малогабаритных машинах китайского производства — копии японских моторов Honda GX.
- Знаменитые японские АКПП Aisin A130 и A140 — несколько доработанные нелицензионные копии АКПП Chrysler 1940—1950-х годов, которые производились американской компанией на заводах в Японии после Второй мировой войны.
- Первые китайские внедорожники Admiral, Great Wall и другие — нелицензионные практически точные копии внедорожника Toyota Hilux Surf.
Электроника
Обратная разработка электронных устройств появилась ещё на заре радиотехники. В 1920—1930 годах различные фирмы копировали друг у друга радиолампы и схемотехнические решения их применения. Именно с обратной разработкой, а не с лицензионным производством, связано то, что радиолампы одного назначения почти всех производителей оказались унифицированными и взаимозаменяемыми. Например европейская лампа EL95 клон более ранней американской лампы 6KA5. Есть и обратные примеры: американские 6CA5 и KT88 — клоны европейской лампы EL34. То же самое относится и к советским радиолампам, многие из которых являются клонами американских ламп, получаемых по ленд-лизу (например 6Ж4, 6П9) или немецких из трофейной аппаратуры (6Г2, ГУ50). Вместе с лампами копировались и типовые схемы их включения, то есть фактически схемы блоков радиоаппаратуры. Поэтому именно благодаря обратной разработке ламповая эпоха охарактеризовалась по сути переходом к типовому проектированию в электронике. В частности, все выпускаемые в мире бытовые приемники-супергетеродины строились фактически по трем схемам, которая определялась лампой смесительно-гетеродинного узла: двойной триод, триод-гептод или пентагрид. То же самое относилось и к усилителям низкой частоты. Существовало не более десятка типовых схем их построения в зависимости от выходной мощности: маломощные однотактные на комбинированной лампе типа 6Ф3П, маломощные однотактные с темброблоком на двойном триоде (типа 6Н1П) и выходном пентоде (6П14П, EL84) или лучевом тетроде (6П3С, EL34), двухтактные с триодным фазоинвертором (6Н1П + 2х6П14П), двухтактные многокаскадные (6Н8П + 2х6П6С + ГУ50). Черно-белые телевизоры и вовсе строились по одной-двум схемам.
Примеры:
- Копирование различных электронных блоков без фактической разработки. Известно, что многие элементы, в частности, ТТЛ различных компаний и национальных стандартов, взаимозаменяемы. Например, американская серия интегральных схем 7400 и её советский аналог К(Р)155.
- Процессор Am386 компании AMD создан ради совместимости с чипом 80386 фирмы Intel и в пользу экономической целесообразности.
- Процессоры Super386 38600SX и 38600DX компании Chips and Technologies созданы методом ОР.
Программное обеспечение
Исследование и обратная разработка программ обычно осуществляются с целью дальнейшей модификации, копирования, или, например, написания генераторов ключей, алгоритм работы которых получен на основе анализа алгоритма их проверки. Также исследование программ применяется с целью получения некоторых закрытых сведений о внутреннем устройстве программы — о протоколе сетевого обмена с сервером, аппаратным средством, ключом защиты или о взаимодействии с другой программой. Ещё одна область применения — получение информации о способах экспортирования данных из многочисленных проприетарных форматов файлов.
С развитием Интернета популярные операционные системы и программы всё интенсивнее исследуются на предмет обнаружения в них уязвимостей или т. н. «дыр». В дальнейшем найденные дыры могут использоваться для получения несанкционированного доступа к удалённому компьютеру или компьютерной сети. C другой стороны, обратная разработка применяется при исследовании антивирусными компаниями вредоносного ПО c целью добавления его сигнатур в базы своих продуктов.
Одним из широко известных примеров обратной разработки является исследование BIOS персонального компьютера IBM, ставшее серьёзным шагом на пути развития производства IBM-совместимых компьютеров сторонними производителями. Создание сервера Samba (входящего в состав ОС GNU/Linux и работающего с серверами на базе ОС Microsoft) также потребовало обратной разработки используемого Microsoft протокола SMB. Создание многих ICQ-клиентов также потребовало обратной разработки протокола ICQ.
Обратная разработка программного обеспечения производится с помощью следующих методик:
- Анализ обмена данными, наиболее распространённый в обратной разработке протоколов обмена данными, который производится с помощью анализатора шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.
- Дизассемблирование машинного кода программы для получения её листинга на языке ассемблера. Этот способ работает на любой компьютерной программе, но требует достаточно много времени, особенно для неспециалиста.
- Декомпиляция машинного или байт-кода программы для создания исходного кода на некотором языке программирования высокого уровня.
В настоящее время под словами «reverse engineering» чаще всего понимается т. н. clean room reverse engineering, то есть процесс, при котором одна группа разработчиков анализирует машинный код программы, составляет алгоритм данной программы на псевдокоде либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства. После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении авторских прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «fair use», то есть добросовестного использования оригинальной программы. Результат обратной разработки редко идентичен оригиналу, что и позволяет избежать ответственности перед законом, особенно при условии контроля отсутствия этой идентичности первой группой разработчиков и отсутствия нарушений торговых марок и патентов.
Базы данных
Может использоваться при создании реляционной модели базы данных. [Источник 4]
Reverse engineering на примере Android
Декомпиляция
Этот процесс будет проводиться с использованием программы Apk Manger. Прежде чем приступать к работе, необходимо убедиться, что есть нужные драйверы для работы девайса, а также функционирует режим USB-debugging. Первоначально необходимо будет переместить файл, который будет разбираться в директиву apk_manager\place-apk-here-for-modding. После этого следует запустить Script.bat. Если никаких проблем нет, то запуститься консоль. Надо выбрать пункт номер девять – «Декомпилировать». После того как будет запущен процесс, необходимо не закрывать консоль. Потом следует открыть интересующий apk-файл с помощью архиватора и извлечь из него classes.dex, который нужно обработать программой dex2jar. Для необходимого нам результата его надо переместить на объект с расширением .bat. Появится файл, который будет заканчиваться на .jar.
Анализ данных
Чтобы получить информацию о приложении, необходимо открыть его манифест. По нему определяется, что выступает в роли главной активности. Она-то и представляет наибольшую важность. Необходимо проверить наличие информации о менеджере лицензий, если она есть, то это существенно усложнит проведение реверсного инжиниринга. Если переключиться на jd-gui и развернуть дерево, то появится несколько пространств имён. Необходимо зайти в пространство имен, в котором находятся необходимые данные. Здесь необходимо найти и удалить ключ, а потом и остальные строки, которые проверяют, является ли лицензионной работающая версия. Потом в Apk Manager ищем место, куда указано размещать байт-код. После этого осталось только скомпилировать программу.
Сборка приложения
В этом поможет всё тот же Apk Manager. В окне консоли выбираем пункт №14. Далее дело техники. Если приложение довольно сложное, то при запуске оно может частично или полностью потерять свою работоспособность. Сказать, что нужно делать в конкретном случае, общими словами невозможно, поэтому искать проблемное место придётся самостоятельно. Так, если окно приложения блокируется всплывающим окном, то необходимо просмотреть код и удалить ту его часть, что отвечает за данный диалог. Помочь с этим сможет jd-gui. Реверсный инжиниринг не является лёгким делом, и он требует наличия значительного багажа знаний. Даже если всё без проблем запустилось, необходимо будет протестировать работоспособность приложения. То есть реверс-инжиниринг является ещё затратным по времени действием. Необходимо продолжать работать, пока не будут выявлены все проблемы.
Источники
Обратный инжиниринг – моделируем ‘микрошкатулку’
На выставке «РОСМОЛД – 2013» на одном из стендов, посвященных 3D печати, представитель компании предоставил нам образец своей продукции – маленькую коробочку с крышкой на резьбе. Сейчас не помню название компании, но мне очень понравилась эта «микрошкатулка». По габаритам — примерно 30х30х30 (миллиметров 🙂 ). Не понятно, что можно хранить в ней? Может быть, какие- нибудь мелочи, вроде бисера или чего-то другого.
Когда у меня появился 3D принтер «Evolution» летом того же года, я решил его испытать. Сможет ли мой принтер напечатать такой же «наноларчик»? Но, сначала, нужно получить математическую модель. Я покажу, как такую деталь можно смоделировать в CATIA. «Но где взять CATIA?», — скажете вы. Здесь есть два варианта:
- Пойти работать на крупный завод в качестве ИТР. Подойдут ГАЗ, ВАЗ, УАЗ и многие другие заводы 🙂 . Смотрите Google, Yandex и прочие информационные ресурсы.
- Реализовать те же идеи построения, но только в ваших любимых программах.
В свое время, когда CATIA V5 еще не существовала, я прочитал в книге, обучающей 3DSMax, про один интересный прием в моделировании. Там моделировался банан. Тот, что на пальме растет 🙂 . Поясняю, чтобы потом не было недопонимания и споров о формообразующей 🙂 . Так, вот, банан получался «протаскиванием» шестиугольника вдоль центральной дуги. Вся «фишка» была в том, что сечение при «движении» масштабировалось в соответствии с заданным законом. «Закон» можно было нарисовать графически. 3DSMax-а у меня не было, поэтому я на работе использовал CATIA V4 для этого «трюка». В пятой версии, которая для персоналок, такой «трюк» не предусмотрен, зато там множество других возможностей. После «четверки», «пятерка» показалась мне настолько простой, что я решил, что даже школьник в первый же день освоения сможет спроектировать космический корабль или что-нибудь подобное по сложности 😉 . Тем удивительней мне было читать в комментариях многих постов 3DToday о сложности использования CATIA V5. Желая выступить в защиту любимой программы, я и написал этот пост.
1 шаг: Заходим в модуль «Поверхностное моделирование» («Surface design»). Моделируем в каком-нибудь «Геометрическом набор» или создаем новый. «Геометрический набор» отображается в «дереве модели» желтой иконкой. Рисуем шестиугольник .
2 шаг: переносим (копируем) шестиугольник на нужную высоту.
3 шаг: рисуем две вертикальные линии, как показано на рисунке
Обратите внимание, что линии мы рисуем не «одна под другой», а со смещением.
4 шаг: рисуем сплайн – указываем начальную и конечную точки и, обязательно, указываем к каждой точке «свою» прямую (условие касательности). Можно и без касательных, но получится не так красиво. 🙂
5 шаг: копируем сплайн вращением вокруг центральной оси. (Ось не показана, чтобы не загромождать рисунок)
6 шаг: Используем команду «Поверхность лофта». Это построение поверхности по сечениям. Можно задать направляющие и условия касательности для всех участвующих кривых. Выбираем первый шестиугольник, потом второй. Направляющими назначаем все 6 сплайнов. Касательность можно не назначать.
7 шаг: Переходим в модуль «Проектирование деталей» («Part design»). Моделируем в «твердом теле» (или создаем новое) («Solid» по терминологии CATIA V4 или «Part» по терминологии CATIA V5). Используем команду «Замыкание поверхности» («Close»). Указываем построенную нами ранее поверхность. Команда создает «твердое тело» замкнутое нашей поверхностью и двумя плоскостями сверху и снизу. Если в вашей поверхности кромка отверстия не является плоской кривой, такое отверстие нужно «заделать», и можно будет применять эту команду. В нашем случае, оба отверстия – плоские.
Теоретически, можно пойти другим путем. У меня не получилось. Можно было бы «запустить» шестиугольник вдоль прямой, и задать ему поворот от нуля до 60 градусов. В «твердых» телах CATIA V5 эту возможность не поддерживает, а в поверхностях она «заупрямилась» 🙂 . Пришлось идти «дальним» путем.
8 шаг: Скругляем кромки.
9 шаг: Создаем оболочку нужной толщины. Никакие грани не указываем. Внутри модели образовалась полость, но мы ее увидим позднее.
10 шаг: строим горлышко: чертим окружность на верхней грани, потом «протягиваем» ее на нужную высоту с помощью команды «Призма» («Pad»).
11 шаг: «Сверлим» горлышко командой «Полость» («Pocket»).
Мне пришлось внутри скруглять острые кромки отдельной командой, но если наружные радиусы больше, чем толщина стенки, то внутренние радиусы получатся автоматически.
Построение резьбы.
На «микрошкатулке» резьба была своя, нестандартная.
12 шаг: снова возвращаемся к «Поверхностному моделированию» и к «Геометрическому набору». Команда: «Винтовая линия» («Helix»). Здесь нужно указать начальную точку, откуда начнется пружина, ось вращения, шаг, высоту. Строим от основания горлышка вверх с запасом.
13 шаг: Запускаем команду «Сдвиг» («Sweep»). Тип профиля: «Окружность», подтип: «Центр и радиус». Центральная кривая – указываем нашу пружину, пишем нужный радиус.
14 шаг: Нам понадобится не вся резьба, а один ее виток. Определяем плоскости в начальной и конечной точке резьбы.
15 шаг: Находим линии пересечения плоскостей и винтовой поверхности, которую мы нарисовали с запасом.
16 шаг: Отрезаем лишнее. Резать нужно окружностями, а не плоскостями.
На концах резьбы можно нарисовать маленькие сферы тем же диаметром. Половины сферы обрезать кромкой винтовой поверхности и соединить в единую винтовую поверхность. Потом используем уже известную команду «Замыкание поверхности» («Close»), предварительно перейдя в модуль «Проектирование деталей» («Part design») и в то же самое твердое тело, в котором мы строим «микрошкатулку».
Шкатулка построена!
Построение крышки
1 шаг: Строим призму из шестиугольника.
2 шаг: Строем круглую полость.
3 шаг: строим два отверстия, как на оригинале.
4 шаг: Резьбу строим на основе той же винтовой линии, но увеличиваем радиус и используем команду «Рассечение» («Сплит»).
Получение STL файла.
CATIA V5 позволяет создавать STL файл. В случае, если вы моделируете «твердотельные» детали, вы получите нормальный STL файл, который без доработки можно отправить на 3D печать.
У меня сама «микрошкатулка» получилась нормально. Крышка с выставочного образца на нее легко навинтилась. А, вот, резьба на крышке не получилась, забилась материалом. Сейчас, после модернизации принтера, крышка должна получиться. Впрочем, эксперимент покажет…
Обратный инжиниринг в ИТ больше не ругательство
Sorry, this entry is only available in Russian. For the sake of viewer convenience, the content is shown below in the alternative language. You may click the link to switch the active language.
Обратный инжиниринг в ИТ — вполне легальный инструмент решения определенных задач бизнеса. Он применяется для получения полезной информации о продукте. Проблема возникает позже, когда встает вопрос, как эти данные использовать: во благо, повышая уровень безопасности, дорабатывая технологию, или в ущерб производителю, делая точную копию программы или устройства.
«Цифровые пираты» и этика бизнеса
Для большинства людей слова «обратный (реверсный) инжиниринг» несут лишь негативные ассоциации. Это не вполне справедливо. Важно понять две вещи. Во-первых, обратный инжиниринг не подразумевает прямого копирования устройства или программы. Его используют, чтобы понять принцип их работы, исследовать не прописанные в документации возможности. Он может вести к созданию аналога. Нередко на вполне законных основаниях.
Во-вторых, реверсный инжиниринг (RE) уже давно стал нормальной практикой для средних и небольших компаний, помогающей оставаться конкурентоспособными на рынке. Самые известные примеры, когда суд встал на сторону создателей аналога: эмуляция игровых консолей Sega Enterprises и Sony Computer Entertainment. Его активно применяют производители антивирусных программ, разбирая вредоносное ПО в шестнадцатиричных редакторах.
Обратный инжиниринг способствует технологическому развитию, если мы смотрим на этот процесс с точки зрения потребителя, и облегчает поиск и устранение угроз информационной безопасности.
Не случайно польза RE, к примеру, в США признается на государственном уровне. Осенью прошлого года регулятор убрал из списка исключений закона Digital Millennium Copyright Act несколько пунктов, по сути, разрешив частным разработчикам заниматься реверсным инжинирингом программных продуктов «с целью повышения их безопасности».
В развивающихся странах к обратному «вскрытию» относятся более чем лояльно. В Индии на этом построена практически вся фармацевтическая промышленность. Перечислять «достижения» китайских копирайтеров можно до бесконечности. Тайваньская ASUS вырвалась в лидеры рынка, во многом благодаря тому, что быстро научилась изготавливать более дешевые реплики CPU Intel, а затем и продукции HP, с которыми активно сотрудничала.
На сегодняшний день реверсный инжиниринг — отдельная специализация в ИТ. Существует огромное количество онлайн-курсов RE. В интернете выложена масса полезных ресурсов для изучения навыков обратного вскрытия ПО и «железа». Подобные списки можно найти здесь и здесь.
Темная сторона обратного инжиниринга
Не многие знают, но даже греческая цивилизация началась с банального пиратства. Позже историки назвали это нейтральным термином «колонизация». По схожему сценарию зарождалась индустрия полупроводников, когда копирование чипов было в порядке вещей. До середины 1980-х — начала 1990-х не существовало законодательной базы, защищающей производителей hardware и software от копирования их продукции.
Хрестоматийным примером обратного инжиниринга на более-менее законных основаниях считается история создания копии BIOS IBM компанией Phoenix Technologies Ltd. Для того чтобы избежать юридических последствий и уйти от практики топорного копирайта, здесь изобрели подход, позже названный «чистой комнатой» или «китайской стеной».
На первом этапе команда инженеров детально изучила BIOS IBM и описала все, что он делает, без ссылок на оригинальный код. Затем вторая команда программистов на основе этих спецификаций написала свой BIOS, функционировавший в точности, как указано в документации.
Метод чистой комнаты
В СССР с 1969 года электротехническая промышленность практически полностью перешла на копирование западных образцов, когда была принята программа «Единая система ЭВМ». Изначально с ее помощью пытались решить чисто утилитарную задачу совместимости отечественных машин и ПО, выработки стандарта. За основу взяли систему IBM 360. Разобрали код и, конечном счете, решили скопировать все, плоть до очевидных ошибок.
С помощью оригинального масс-спектрометра с аргоновым травлением советские инженеры разбирали послойно любые микросхемы, получая точный состав процессоров и компьютерных плат IBM. В итоге процессоры всех серий стали точной копией Intel. Ходит легенда, что американские рабочие стали даже оставлять нецензурные послания на платах для своих российских коллег.
Польза реверсного инжиниринга в ИТ
Примеров обратного инжиниринга в индустрии ИТ великое множество. О самых известных случаях пиратства в ИТ можно почитать на сайте Quora. Компания AMD после 5 лет работы получила клон чипа Intel 80386 и смогла предложить его рынку по более низкой цене, потому что затраты на R&D у нее были в десятки раз меньше. Компания Marcan сумела взломать сенсорный игровой контроллер Microsoft Kinect за три часа.
В разных странах законодательство, ограничивающее RE, может разниться. Но в общем случае директивы, защищающие производителей от копирования, достаточно жесткие.
Кроме того, лицензионные соглашения между правообладателем и пользователем, как правило, полностью исключают декoмпиляцию, дизассемблирование, реверс-инжиниринг и прочие «опасные» для бизнеса вещи.
На практике обратный инжиниринг в ИТ продолжают широко применять для решения различных задач. Далеко не всегда цель вскрытия — умышленно навредить производителю и создать точный аналог его продукта. Однако про «светлую сторону» реверсинга мы знаем гораздо меньше.
В 2014 году автор блога в журнале EE Times предложил отказаться использовать слова «реверсный инжиниринг» как ругательство. Многим технологическим компаниям RE приносил и продолжает приносить ощутимую пользу. Вот лишь несколько позитивных сторон применения обратного инжиниринга в ИТ:
- Его можно использовать как инструмент обучения технического персонала.
- Он помогает создавать доступные, конкурентные продукты (если не нарушать закон и применять правило «чистой комнаты»).
- Находить не задокументированные производителем полезные свойства информационного продукта.
- Повышать безопасность приобретенного «железа» и софта самостоятельно.
На последнем пункте стоит остановиться подробнее. Многие компании озабочены вопросом информационной безопасности. Самый простой способ обеспечить надежность инфраструктуры — использовать проверенные программные продукты и оборудование.
Обратный инжиниринг помогает выявлять уязвимости ПО и «железа» и настраивать систему безопасности под конкретные запросы компании. Здесь можно прочитать пример вскрытия IP-камеры, которое обнаружила бэкдор, позволяющий получить доступ к FTP-серверу, паролю Wi-Fi и административному интерфейсу устройства. Для корпоративного пользователя эта уязвимость представляет реальную угрозу. Минимальные изменения в системном файле решают проблему.
По существу, обратный инжиниринг — это работа с информацией. При правильном подходе реверсинг помогает получить массу полезных аналитических данных, сделать работу информационной системы более надежной. В большинстве стран это легальная практика, рассчитанная на решение понятных и вполне законных задач бизнеса.
Материал оказался полезным? Поделитесь с друзьями:
Обратный инжиниринг — Национальная библиотека им. Н. Э. Баумана
Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:26, 21 января 2019.
Обратный инжиниринг — исследование некоторого готового устройства или программы, а также документации на него с целью понять принцип его работы. Фактически обратное проектирование — это в процессе разбора приложения с целью понять, как оно работает, чтобы в будущем воссоздать этот процесс с внесением необходимых изменений.Обычно для этих целей используются отладчик и ассемблер. В зависимости от качества используемого программного обеспечения будут отличаться результат и количество времени, которое необходимо потратить на его приведение в нормальный вид.
Нельзя сказать, что реверс-инжиниринг можно представить как что-то однородно плохое или хорошее. Конечно, с точки зрения разработчиков, которые создают приложение, это совсем не радостное событие. Использование подобного инструментария менее затратным, чем использование других программ.Хотя для начинающих разработчиков реверс-инжиниринг может сослужить службу, если нет представлений неплохо, как реализовать что-то, даже примерные и не совсем понятные наброски с достижением поставленной цели. [Источник 1]
Виды
Существуют следующие виды реверс-инжиниринга:
- Реверс-инжиниринг программного обеспечения — это когда постигают суть неведомой программы с закрытым исходным кодом. Процесс нередко происходит с применением специализированного софта: декомпиляторов, отладчиков, дизассемблеров, распаковщиков и прочих хитрых инструментов.
- Реверсинг «железок» — определение структуры и спецификаций устройства. Создание альтернативных драйверов, а ещё «прошивки», иногда хочется менять и переделывать под свои цели. [Источник 2]
Безопасность
Если нужна защита от реверс-инжиниринга, то в таком случае есть два варианта: использование специальных программ или создание кодовой конструкции, которая будет совершать разбор написанного. Последний вариант подходит исключительно опытным специалистам.Для Android-приложений в качестве специализированного программного обеспечения используется ProGuard. Это приложение, которое используется для сокращения, обфускации и оптимизации. Если программа «прогнать» через него, то получим файл с расширением * .apk меньшего размера, чем он был. В таком случае его будет значительно сложней разобрать. Причем преимуществом данной программы является то, что она даже была внедрена в систему сборки Android-приложений с обновлениями r9. Поэтому используйте ее может любой разработчик, который имеет стандартные инструменты создания и разработки.
Также есть способ узнать, подключен ли отладчик к вашему коду. Но есть одна проблема. Эта проверка определена, подключен ли отладчик в конкретное время. Хакер может подключиться к приложению после этой проверки, когда приложение уже не подозревает об опасности. Эту проблему можно решить двумя способами:
- Включить проверка в цикл выполнения (цикл выполнения), так что проверка будет постоянно работать.
- Поставить проверку наиболее критичных участков кода, где нас больше всего волнует безопасность.
Первый вариант обычно нежелателен. Его цена — трата драгоценного процессорного времени. [Источник 3]
Сферы применения
Машиностроение, автомобилестроение, авиация
Копирование различных механизмов и машин без фактической разработки. Позволяет минимальными затратами воспроизвести удачную конструкцию, но есть попытки копирования и неудачных машин.
Примеры:
- Советский грузовик АМО-3 был практически полной копией американского грузовика «AutoCar-SA».
- Советский лодочный мотор «Москва» был практически полной копией очень удачного американского мотора ScottAtWater.
- Пример неудачного выбора прототипа для обратной разработки — советский лодочный мотор «Вихрь», копия немецкого мотора Koening.
- Советский самолет Ту-4, за исключением двигателей, является почти точной копией американского Boeing B-29 Superfortress.
- Практически все бензиновые двигатели, установленные на мотоблоках, генераторах и других малогабаритных машинах китайского производства — копии японских моторов Honda GX.
- Знаменитые японские АКПП Aisin A130 и A140 — несколько доработанных нелицензионных копий АКПП Chrysler 1940–1950-х годов, которые производились американской компанией на заводах в Японии после Второй мировой войны.
- Первые китайские внедорожники Admiral, Great Wall и другие — нелицензионные практически точные копии внедорожника Toyota Hilux Surf.
Электроника
Обратная разработка электронных устройств появилась ещё на заре радиотехники. В 1920-1930 годах различные фирмы копировали друг у друга радиолампы и схемотехнические решения их применения.Именно с обратной разработкой, а не с лицензионным производством, что радиолампы одного назначения почти всех производителей оказались унифицированными и взаимозаменяемыми. Например, европейская лампа EL95 клон более ранней американской лампы 6KA5. Есть и обратные примеры: американские 6CA5 и KT88 — клоны европейские лампы EL34. То же самое относится и к советским радиолампам, многие из которых являются клонами американских ламп, получаемых по ленд-лизу (например, 6Ж4, 6П9) или немецких из трофейной аппаратуры (6Г2, ГУ50).Вместе с лампами копировались и типовые схемы их включения, то есть фактически схемы блоков радиоаппаратуры. Поэтому именно благодаря обратной разработке ламповая эпоха по сути к типу проектирования в электронике. В частности, все выпускаемые в мире приемники-супергетеродины строились фактически по трем схемам, которая определялась лампой смесительно-гетеродинного узла: двойной триод, триод-гептод или пентагрид. То же самое относилось и к усилителям низкой частоты.Существовало не более десятка типовых схем построения в зависимости от выходной мощности: маломощные однотактные на комбинированной лампе типа 6Ф3П, маломощные однотактные с темброблоком на двойном триоде (типа 6Н1П) и выходном пентоде (6П14П, EL84) или лучевом тетроде (6П3С, EL34), двухтактные с триодным фазоинвертором (6Н1П + 2х6П14П), двухтактные многокаскадные (6Н8П + 2х6П6С + ГУ50). Черно-белые телевизоры и вовсе строились по одной-двум схемам.
Примеры:
- Копирование различных электронных блоков без фактической разработки.Известно, что многие элементы, в ТТЛ различных национальных стандартов, взаимозаменяемы. Например, американская серия интегральных схем 7400 и её советский аналог К (Р) 155.
- Процессор Am386 компании AMD создан ради совместимости с чипом 80386 фирмы Intel и пользуется экономической целесообразностью.
- Процессоры Super386 38600SX и 38600DX компании Микросхемы и технологии созданным методом ОР.
Программное обеспечение
Исследование и обратная разработка программ обычно осуществляются с помощью алгоритма дальнейшей обработки, копирование, например, написания генераторов ключей, алгоритм работы получен на основе анализама их проверки алгоритма проверки.Также исследование программных средств защиты некоторых закрытых сведений о внутреннем устройстве программы — о протоколе сетевого обмена с сервером, аппаратным средством, ключом защиты или взаимодействии с другой программой. Ещё одна область применения — получение информации о способах экспортирования данных из списка проприетарных форматов файлов.
С Интернет популярными системами и программы всё интенсивнее исследуются на предмет обнаружения в них уязвимостей или т.н. «Дыр». В дальнейшем найденные дырыры установка для получения несанкционированного доступа к удалённому компьютеру или компьютерной сети. C другой стороны, обратная разработка при исследовании антивирусными атакными приложениями с помощью добавления его сигнатур в базы своих продуктов.
Одним из широко известных обратных разработок является исследование BIOS персонального компьютера IBM, ставшее серьёзным шагом на пути развития производства IBM-совместимых компьютерными производителями.Создание сервера Samba (входящего в состав ОС GNU / Linux и работающего с серверами на базе ОС Microsoft) также потребовало обратной разработки используемого Microsoft протокола SMB. Создание многих ICQ-клиентов также потребовало обратной разработки протокола ICQ.
Обратная разработка программного обеспечения осуществляется с помощью следующего методик:
- Анализ обмена данными, наиболее распространенный в обратной разработке протоколов обмена данными, который производится с помощью анализа шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.
- Дизассемблирование машинного кода для получения её листинга на языке ассемблера. Этот способ работает на любой компьютерной программе, но требует достаточно много времени, особенно для неспециалиста.
- Декомпиляция машинного или байт-кода программы для создания исходного кода на некотором языке программирования высокого уровня.
В настоящее время под словами «обратный инжиниринг» чаще всего понимается т. н. обратное проектирование чистой комнаты, то есть процесс, в котором одна группа разработчиков анализирует машинный код программы, представляет собой алгоритм программы на псевдокоде либо, если программа является драйвером какого-либо устройства, составляет исчерпывающие спецификации интересующего устройства.После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении автор прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «добросовестное использование», то есть добросовестного использования оригинальной программы. Результат обратной разработки идентичен оригиналу, что позволяет избежать ответственности перед законом, особенно при условии контроля этой идентичности первой группы разработчиков и нарушений торговых марок и патентов.
Базы данных
Может Любовь при создании реляционной модели базы данных. [Источник 4]
Обратный инжиниринг на примере Android
Декомпиляция
Этот процесс будет проводиться с использованием программы Apk Manger. Прежде чем приступать к работе, необходимо убедиться, что есть нужные драйверы для работы девайса, а также функционирует режим отладки USB. Первоначально необходимо будет заменить файл, который будет разбираться в директиве apk_manager \ place-apk-here-for-modding.После этого следует запустить Script.bat. Если никаких проблем нет, то запустить консоль. Надо выбрать пункт номер девять — «Декомпилировать». После того как будет запущен процесс, необходимо не закрывать консоль. Потом следует открыть интересующий apk-файл с помощью архиватора и извлечь из него classes.dex, который нужно обработать программой dex2jar. Для необходимого результата его надо переместить объект с расширением .bat. Появится файл, который будет заканчиваться на .jar.
Анализ данных
Чтобы получить информацию о приложении, необходимо открыть его манифест.По нему выполняет роль главной активности. Она-то и представляет наивысшую важность. Необходимо проверить наличие информации о менеджере реверсивного инжиниринга. Если переключиться на jd-gui и развернуть дерево, появится несколько пространств имён. Необходимо зайти в пространство имен, в котором находятся необходимые данные. Здесь необходимо найти и удалить ключ, а затем и остальные строки, которые проверяют, является ли лицензионная версия работающей версии.Потом в Apk Manager ищем место, куда указано размещать байт-код. После этого осталось только скомпилировать программу.
Сборка приложения
В этом всё тот же Apk Manager. В окне консоли выбираем пункт №14. Далее дело техники. Если приложение довольно сложное, при запуске оно может частично или полностью потерять свою работоспособность. Сказать, что нужно делать в конкретном случае, общими словами, искать проблемное место придётся самостоятельно.Так, если приложение блокируется всплывающим окном, необходимо просмотреть код и удалить ту его часть, что отвечает за данный диалог. Помочь с этим сможет jd-gui. Реверсный инжиниринг не является лёгким делом, и он требует наличия значительного багажа знаний. Даже если всё без проблем запустилось, необходимо будет протестировать работоспособность приложения. То есть реверс-инжиниринг является ещё затратным по времени. Необходимо продолжать работать, пока не будут выявлены все проблемы.
Источники
.
Обратный инжиниринг — это … Что такое Обратный инжиниринг?
Обра́тная разрабо́тка ( обратный инжиниринг , реверс-инжиниринг ; англ. обратный инжиниринг ) — исследование некоторого устройства или программы, а также на них с целью понять его принцип работы и, чаще всего, реализовать устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.
Применяется обычно в том случае, если создатель оригинального объекта не предоставил информацию о структуре и способе создания (производства) объекта.Использование обратной может противоречить закону об авторском праве и патентному законодательству.
В настоящее время под словами «обратный инжиниринг» чаще всего понимается т. н. «Обратный инжиниринг чистой комнаты», то есть процесс, в котором одна группа разработчиков анализирует машинный код программы (в этом процессе используется также выражение «обратный инжиниринг» или «реверсный инжиниринг»), составляет данную программу на псевдокоде, либо, если программа является драйвером какого-либо, составляет исчерпывающие спецификации интересующего устройства.После получения спецификаций другая группа разработчиков пишет собственный драйвер на основе полученных спецификаций или алгоритмов. Такой подход позволяет избежать обвинений в нарушении автор прав на исходную программу, так как по законам, к примеру в США, подпадает под понятие «добросовестное использование», то есть добросовестного использования оригинальной программы. Результат обратной разработки редко идентичен оригиналу, что позволяет избежать ответственности перед законом.
Сферы обратной разработки
Электроника
Копирование электронных блоков без фактической разработки.Известно, что часть советской цифровой электроники копировалась. Например, американская серия интегральных схем 74 и её советский аналог К (Р) 155.
Ещё один пример обратной разработки — создание компанией AMD процессора Intel 80386.
Программное обеспечение
Исследование и обратная разработка программ обычно осуществляются с помощью алгоритма дальнейшей обработки, копирование, например, написания генераторов ключей, алгоритм работы получен на основе анализама их проверки алгоритма проверки.Также исследование программных средств защиты некоторых закрытых сведений о внутреннем устройстве программы — о протоколе сетевого обмена с сервером, аппаратным средством, ключом защиты или взаимодействии с другой программой. Ещё одна область применения — получение информации о способах экспортирования данных из списка проприетарных форматов файлов [1] .
С Интернет популярными операционными системами и программы всё интенсивнее исследуются на предмет обнаружения в них уязвимостей или т.н. дыр. В дальнейшем найденные дырыры установка для получения несанкционированного доступа к удалённому компьютеру или компьютерной сети.
Одним из широко известных примеров обратной разработки является исследование IBM, ставшее серьёзным шагом на пути развития производства IBM-совместимых компьютеров сторонними производителями. Создание сервера GNU / Linux и работающего с серверами на базе Microsoft Windows) также потребовало обратной разработки используемого SMB.
разработка программного обеспечения производится с помощью следующего методик.
- Анализ обмена данными, наиболее распространенный в обратной разработке протоколов обмена данными, который производится с помощью анализа шины и пакетного сниффера для прослушивания шины компьютера и компьютерной сети соответственно.
- Дизассемблирование с помощью дизассемблера, при котором прямой машинный код программы читается и понимается в своём чистом виде, только с помощью мнемоник машинного языка. Этот способ работает на любой компьютерной программе, но требует достаточно много времени, особенно для неспециалиста.
- Декомпиляция с помощью декомпилятора — процесс создания исходного кода на некотором языке программирования высокого уровня.
Базы данных
может быть при создании реляционной модели базы данных.
Промышленность
Новая разработка продукта конкурента с целью узнать его устройство, оценить возможности аналога.
Военная промышленность
Канистры
Самыми известными фактами обратной разработки во время второй мировой войны являлись:
- Немецкие канистры для бензина — британские и американские войска заметили, что немцы имели очень удобные канистры.Они скопировали эти канистры, и те получили название канистр (от слова «gerrys» — от «немцы»).
- Туполев Ту-4 — некоторое количество американских бомбардировщиков B-29 при совершении вылетов в Японию были вынуждены садиться в СССР. Советские военные, которые не имели подобных стратегических бомбардировщиков, решили скопировать B-29. Через несколько лет они разработали Ту-4, практически полную копию.
Для анализа исходного кода
С широким применением SADT возникло основное понятие популярного ныне понятия — BPR (бизнес-процесс реинжиниринг).
Существуют программы, которые предоставляют возможность восстановления (обратный, обратный) по исходному коду общего системного проекта (классы, связь между ними и т.п.), так и прямой генерации исходного кода на основе созданного проекта (функциональных блоков бизнес-процесса) :
Примечания
- ↑ Часто применяют, например, в отношении форматов, поддерживаемых Microsoft Office.
См.также
Ссылки
Фонд Викимедиа.
2010.
.
Право на реверс. Как обратная разработка выглядит с юридической точки зрения
Содержание статьи
Как российское законодательство относится к обратной разработке программ? В каких случаях за такую деятельность можно понести наказание, а когда реверс-инжиниринг разрешен? Что, если ты не сам реверсишь, а кто-то делает это по твоему заказу? Ответы могут разниться от случая к случаю, но давай разберемся, на что нужно ориентироваться в первую очередь.
Введение
Фанаты Starcraft наверняка помнят те времена, когда можно было играть не через Battle.net, а через левый сервер на эмуляторе bnetd (или даже поднять собственный). Игра была той же, но лицензионный ключ не требовался. Или вспомнить другой случай: несколько лет назад многие радовались новости о том, что американский простой парень Джордж Френсис Хоц — младший aka geohot (тот самый, что в году объявил о создании своего автопилота для автомобилей) корпорация Sony взломав защиту PlayStation 3.
Ни Blizzard, ни Sony, ясное дело, не были рады публичным пощечинам и в указании крайних. В первом деле такой оказался компания Интернет-шлюз, во втором — Джордж и сотоварищи из сообщества fail0verflow. В том числе кейсах дело касалось в том числе реверс-инжиниринга программного кода.
К чему мы это вспомнили? К тому, что занятие обратной стороны софта без согласия правообладателя законно и ненаказуемо только в очень редких случаях. Да-да, букве закона (и нашего) знакомо такое явление, как реверс-инжиниринг.Конечно, не настолько хорошо и детально, как хотелось бы, но и то, что есть, — это намного лучше, чем. Но давай-ка начнем с самого начала.
Обратная разработка и закон
Итак, обратная разработка (обратный инжиниринг, реверс-инжиниринг или кратко, реверсинг; от англ. Обратный инжиниринг) — это «исследование некоторого устройства или программы, а также документации на них с целью понять принцип его работы и, чаще всего, реализовать» устройство, программа или иной объект с аналогичными функциями, но без копирования как такового ».
Реверс-инжиниринг программного обеспечения — это когда исследователь изучает программу с закрытым исходным кодом и, возможно, вносит какие-то изменения. В процессе нередко участвует специальный софт: декомпиляторы, отладчики, дизассемблеры, распаковщики и прочие хитрые инструменты. То есть, если упростить, программу неким образом превращают в исходный код, чтобы преобразовать ее в исходный код, чтобы преобразовать ее и принципы работы.
Законы, которые ограничивают реверсинг, в каждой стране штат (а в США) — в личном кабинете, и их нормы могут различаться.Давай пройдемся по основным из них.
США
- Закон об авторском праве и положении о добросовестном мире (раздел 17 Свода законов США (США) и статья 107 Раздел раздела)
- Закон о секрете производства
- Положения о запрете обхода технических мер защиты Закона об авторском праве в цифровую эпоху (он же тот самый DMCA) (статья 1201 раздела 17 Свода США)
- Закон о конфиденциальности электронной связи (статья 2510 раздела 18 Свода современной США)
Россия
- Гражданский кодекс (часть четвертая)
- Федеральный закон «О коммерческой тайне»
- Федеральный закон «Об информации, информационных технологиях и о защите»
Евросоюз
- Директива 2009/24 / ЕС о правовой охране компьютерных программ
Но одними положениями закона дело не ограничивается — помимо норм закона, есть еще и положения договоров и соглашений, заключающиеся между правообладателями софта и его пользователями.
Производители софта обычно включают пользовательское соглашение (EULA), по которому запрещается выполнять декомпиляцию, дизассемблирование, реверс-инжиниринг и все остальное.
Вот, например, как выглядит лицензионное соглашение для Kaspersky Rescue Disk 10:
«Запрещается декомпилировать, дизассемблировать, модифицировать или выполнять производные работы, основанные на ПО, целиком или частично за исключением случаев, предусмотренных применимым законодательством».
А вот EULA для продуктов Cisco:
Заказчик прямо соглашается не:
(iii) осуществлять обратный инжиниринг или декомпилировать, расшифровывать, дизассемблировать или иным образом преобразовывать Программное обеспечение в удобочитаемую форму, за исключением случаев, когда иное прямо разрешено применимым законодательством, несмотря на это ограничение или за исключением случаев, когда Cisco требуется по закону для разрешения такой конкретной деятельности в соответствии с любой применимой лицензией с открытым исходным кодом …
Такие формулировки часто встречаются в пользовательских соглашениях.Их задача — ограничить возможности пользователя там, где закон прямо не запрещает обратную разрешающую способность. Это своего рода юридическая перестраховка от посягательств на программный код. Нарушение EULA напрямую ведет к разным негативным последствиям — начиная с досрочного прекращения лицензии и заканчивая денежной компенсацией за нарушение авторских прав.
Но законодательство и договоры — не самое интересное. Важнее всего судебная практика, поскольку она через призму конфликта двух сторон напрямую определяет трактовку норм закона.То есть только на практике становится понятно, в каком виде закон понимают и применяют суды при вынесении решений. Заодно эффективно и насколько грамотно их действительно можно применить в разрешении конфликтной ситуации.
В России дел, связанных с реверсом, почти нет, так что детали пока не успели накопиться. Гораздо интереснее изучить прецеденты в США, где много примеров. В этой статье я рассмотрю упомянутый в начале кейс Blizzard.
Blizzard против bnetd
Началась эта история еще в 1998 году, когда фирма Blizzard приступила к продажам игры Starcraft.Спустя несколько месяцев студент Калифорнийского университета в Сан-Диего Марк Бейзингер (Марк Бейзингер) занялся реверс-инжинирингом протокола, по используемой игре подключалась к серверу Battle.net.
Результатом работы стал эмулятор StarHack. И почти сразу же Бейзингер получил от Blizzard письмо с предупреждением о нарушении компании и требованием прекратить нарушение. В ответ он поинтересовался, в каких именно действиях было выражено нарушение авторских прав компании. Не получив ответа на свой вопрос, Бейзингер решил все же прекратить развитие проекта, но выложил в интернет исходники под лицензией GPL.Так появился опенсорсный проект bnetd — клон Battle.net, который, в частности, использовался на сервере bnetd.org.
В 2002 году в Blizzard начали бета-тестирование следующей игры — Warcraft III. А в 2003 году умельцы зареверсили протокол новой игры и написали форк bnetd под названием Warforge — с поддержкой Warcraft III.
Через несколько дней после релиза Warforge компания Internet Gateway, предоставляющая хостинг проекту bnetd, получила аналогичное письменное предупреждение (так называемое C&D, письмо о прекращении и прекращении действия) от Blizzard, содержание которого сводилось к тому, что создатели bnetd нарушили права Blizzard.После отправки предупреждения проект bnetd не был закрыт, руководство Blizzard приняло решение обратиться в суд.
В 2002 году адвокаты Blizzard подали иск к хостеру bnetd.org, а также Тиму Джангу (Тим Юнг), президенту компании Internet Gateway и одному из разработчиков проекта bnetd. Иски получили и системные администраторы домена bnetd.org, а затем список ответчиков еще вырос. В иске Blizzard говорилось, что bnetd — серверная программа, которая эмулирует сервис Battle.net, но при этом не проверяет подлинность ключа, чтобы определить, легальное ли используется клиентское ПО. Помимо этого, разработчики bnetd обвинили незаконным копированием фрагментов кода компьютерных программ Blizzard.
В общем, в Blizzard заявили о нарушении ее авторских прав, прав на товарный знак (в отношении Battle.net), а также недобросовестной конкуренции со стороны ответчиков. В ходе рассмотрения судебных претензий в 2004 году нарушено решение в истце, признав, что ответчики используют авторское право, осуществив реверс-инжиниринг, а также обход систем защиты авторских прав (то есть не реализован на своем сервере верификация ключей клиентских программ).
Ответчики решили обжаловать решение и подали апелляцию. В 2005 году Восьмой апелляционный суд поддержал решение первой инстанции по обоим важным позициям и подтвердил неправомерность реверс-инжиниринга и отсутствия механизма верификации ключей.
Кейс bnetd привлекательным для индустрии, поскольку в ту поруновые онлайн сервисы только начинали обретать популярность. Этот судебный процесс стал своеобразным руководством для подобных опенсорсных проектов.
Российские законы
Если говорить о российском законодательстве, то в целом оно допускает проведение реверс-инжиниринга, о чем идет речь в статье 1280 Гражданского кодекса РФ. Эта статья дает понять, что обратная разработка допустима только в случае соблюдения установленных критериев.
Вот фрагмент текста самой статьи Кодекса.
Гражданский кодекс Российской Федерации (часть четвертая), статья 1280 «Право пользователя программы для ЭВМ и базы данных»
Лицо, правомерно владеющим экземплярами программы для ЭВМ, вправе без согласия правообладателя и без дополнительного вознаграждения. разработанной этой программой для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий:
1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников;
2) действия осуществляются только в отношении тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию;
3) информация, полученная в результате декомпилирования, самостоятельно разработанной программы для ЭВМ с другими программами, за исключением случаев, когда это необходимо для достижения способности к независимой разработке программы для ЭВМ. с помощью программы ЭВМ, нарушающей исключительное право на программу ЭВМ.
Как видишь, в законе упоминается только старомодный термин «программа для ЭВМ» — Гражданский кодекс не оперирует более узкие понятия вроде мобильных и веб-приложений, протоколов, базовых данных и подобных вещей.
Здесь можно три важных момента:
- копия программы должна быть получена легальным путем;
- целью реверс-инжиниринга должна быть реализация игры с другими программами;
- информация, необходимая для достижения возможностей взаимодействия, ранее не была доступна из других источников.
Теперь рассмотрим наиболее важные вопросы, которые относятся к сфере легальности реверс-инжиниринга.
Можно ли привлекать других лиц для выполнения реверс-инжиниринга?
Ответ на этот вопрос может дать следующее решение суда:
Решение Арбитражного суда города Москвы от 29 мая 2013 года по делу № А40-10750 / 2013
По смыслу ст. 1274 ГК РФ и п. 2 ст. 1280 ГК РФ исследование программы для ЭВМ, каким-либо другим объектом исключительных прав, может быть проведено самостоятельно, так и любым лицом, обладающим специальными знаниями и интересами, с его ведома по его согласию.Это объясняется тем, что само по себе исследование в силу ст. 1270 ГК РФ не указано возмещение в качестве метода использования объекта исключительных прав. Кроме того, прямого запрета на осуществление исследования в интересах пользователя, с его ведома любым лицом, имеющим необходимыми специальными познаниями, действующее законодательство не содержит.
То есть можно сделать следующий вывод: исследование программы для ЭВМ может быть проведено самостоятельно, так и любым иным лицом, обладающими специальными знаниями, но в интересах пользователя, с его ведома и по его согласию.
Прямого запрета на такое исследование одним лицом в другом в действующем законодательстве нет. Это также следует из судебной практики, например из следующего документа.
Постановление Девятого арбитражного апелляционного суда от 12 августа 2013 года № 09АП-23848/2013-ГК
Прямой запрет на осуществление исследования в интересах пользователя, с его ведома по его любым необходимым специальным познаниям, в действующем законодательстве.
Допустимо ли проведение реверс-инжиниринга, если в лицензионном соглашении, на условиях которого распространяется программа, ничего об этом не говорится?
Ответ опять же можно найти в одном из постановлений:
Постановление Одиннадцатого арбитражного апелляционного суда от 25 октября 2012 года по делу № А55-13189 / 2012
Заключение лицензионного договора означает, что пользователь программы вправе совершать в отношении ее действия, предусмотренные ст.1280 ГК РФ, а также другие действия, обусловленные договорами и связанными с эксплуатацией программы. Договор действует до продажи или иного отчуждения экземпляра программы или базы. На этот договор в отличие от стандартных соглашений не распространяются правила, установленные пунктами 2–6 статьи Кодекса 1235.
Аналогичный ответ, кстати, содержание и в Постановлении Пленума ВС РФ и Пленума ВАС РФ от 26 марта 2009 года № 5, 29 «О некоторых вопросах, возникших в связи с введением в действие части четвертого Кодекса Российской Федерации».
Допускается ли проводить реверс-инжиниринг, чтобы проверить, не исследуем ли исследуемую программу нарушения прав?
Однозначного на этот вопрос нет, и все будет зависеть от обстоятельств дела. В уже упомянутом примере практики было признано, что исследование программы производилось в целях подобной проверки — ответчик доказательства в свою защиту.
Постановление Девятого арбитражного апелляционного суда от 12 августа 2013 года № 09АП-23848/2013-ГК
Кроме того, как следует из материалов дела, исследование программы было произведено ответчиками в рамках добросовестной и специальной необходимости, исключительно в исполнении требований по доказыванию исковых требований в соответствии со статьей 65 АПК РФ, не имело цели создания для истца каких-либо негативных последствий и не возникает к возникновению таких последствий.
. Но имей в виду, что сейчас судебные решения не являются прецедентами в буквальном смысле слова. То есть решение по одной ситуации не обязательно станет примером для всех схожих дел. Так что и воспринимать их лучше скорее как справочную информацию.
Выводы
Законодательство предусматривает нормы по которым допустимо проведение реверс-инжиниринга. Они содержат ряд условий, необходимо соблюсти.Это позволит признать правомерным, даже если правообладатель не проведенный реверс-инжиниринг. Российская практика в этом вопросе развита пока плохо, но ей известны дела, которые так или иначе касались обратной разработки.
.
Обратный инжиниринг / PWN · Курс молодого CTF бойца v 1.5
Заголовок 12345678890q989q9q8293q8239q839q2398
О Проекте
О CTF
Основные команды Bash
Крипто
Мануал по методу кодирования базы 16/32/64.
Шифр Цезаря
Шифр простой замены
Взлом Шифр ограждения рельсов
Строковое шифрование
Шифр Виженера
XOR, XORtool
Судебно-медицинская экспертиза
Что такое редактор 010?
Сеть
Сетевые утилиты
Основы работы с sqlmap.
Обратный инжиниринг / PWN
Эксплуатация / PWN
Стегано
Работа с изображениями
Stegsolve
Что такое виртуальная машина?
Создание предложенной машины
Установка VirtualBox
Установка Kali Linux
Настройка VirtualBox
Настройка предлагаемой машины
Интернет
Люкс Burp
Cookie-файлы
CSRF
Инструменты разработки Chrome
HTTP
.мерзавец
Заголовки HTTP
Включение локального файла
OWASP DirBuster
.