4

Обратная инженерия

На написание этого поста меня сподвигли предостерегающие комментарии одного из здешних обитателей в духе "за тобой следят".

Обратная разработка (далее РИ) (обратный инжиниринг, реверс-инжиниринг; англ. reverse engineering) — исследование некоторого устройства или программы, а также документации на них с целью понять принцип его работы и, чаще всего, воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового.

Принцип РИ состоит в том, что имея некий "черный ящик" с определенным набором логики или принципов можно составить представление о его устройстве на основе анализа данных на выходе в зависимости от того, что подается на вход. Есть еще вариант разобрать ящик и заглянуть внутрь (как делалось в случае копирования импортных микросхем), но в программировании и работе с удаленными сервисами это не всегда возможно.

Кто же занимается РИ?

Да все. Все и каждый в своей области.

Например, физика как наука. Она строит теории мироустройства, свойств материи и тд. Но! Основывается все же на многочисленных подвержденных опытах по учету следствий определенных воздействий, событий. Многократно отпуская камень и наблюдая его падение, многократно нагревая воду и наблюдая ее кипение, делаются выводы о законах мироздания. Наука пытается "отреверсить" Вселенную. На основе подтвержденных опытов строятся догадки или гипотезы о принципах (законах) природы. Выведенные уравнения не являются абсолютно точными, они совпадают с реальных положением дел лишь до определенного знака и в определенных условиях. У нас все же есть формулы для житейских расчетов, где точность даже до второго знака уже избыточна, но в прецизионных расчетах дело обстоит несколько иначе.

Литературные критики анализируют труды и биографию автора и выносят свои предположения и суждения о том, что сподвигло его на написание тех или иных строк, раскрывая детали собственно личности писателя.

Дети. Короли РИ. Они не обладают каким-либо знанием или теориями, но отлично усваивают причинно-следственные связи, учитывая даже невербальные сигналы родителей и окружения. Они быстро вырабатывают методики достижения своих желаний (хотя пока и примитивных), причем они во много схожи с методами взлома: брутфорс через непрекращающийся крик, эксплуатация уязвимостей через использование слабостей родителей (типа онжеребенок, яжмать и тп.), сбор информации через наблюдение и тп.

Каждый мастер в искусстве берет чью-то работу и оценивает то, как она была сделана, каким путем, а также получают сведения о квалификации автора. Роскошный пример явлен в фильме "Парфюмер", где парень воссоздал рецепт духов по его запаху.

Геймеры. Это вообще непаханное поле. Ни один из действующих игровых движков не реализует принципы и законы природы достаточно точно, поэтому приходится во время игры выяснятьособенности каждого из движков и делать выводы о дальнейших действиях не на основе жизненного опыта, а на основе знания об устройстве движке и условиях срабатывания определенных событий, триггеров и тп. Обширное поле для такой деятельности мозга предоставили и предоставляют РПГ и ММОРПГ со своими системами прокачки навыков и развития персонажа. Кто-то даже публикует формулы расчета, например, урона, которые использует сама игра. Знание движка дает серьезное преимущество для победы. Часто развиваются до читеров.


Еще один плюс РИ заключается в том, что иногда в очень сложных системах позволяет найти "негласные зависимости", недокументированные возможности и неучтенные уязвимости, рожденные на местах склеивания компонентов системы. Причем эти возможности могли остаться неизвестными даже разработчикам системы, но предоставляют обходные пути для знающих.

Законодательная часть.


"Гражданский кодекс Российской Федерации (часть четвертая)" от 18.12.2006 N 230-ФЗ


Статья 1280. Право пользователя программы для ЭВМ и базы данных

3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой, при соблюдении следующих условий:


1) информация, необходимая для достижения способности к взаимодействию, ранее не была доступна этому лицу из других источников;


2) указанные действия осуществляются в отношении только тех частей декомпилируемой программы для ЭВМ, которые необходимы для достижения способности к взаимодействию;


3) информация, полученная в результате декомпилирования, может использоваться лишь для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, не может передаваться иным лицам, за исключением случаев, когда это необходимо для достижения способности к взаимодействию независимо разработанной программы для ЭВМ с другими программами, а также не может использоваться для разработки программы для ЭВМ, по своему виду существенно схожей с декомпилируемой программой для ЭВМ, или для осуществления другого действия, нарушающего исключительное право на программу для ЭВМ.

Без крайней необходимости нам не позволяют "разбирать" чужие творения. Результатом декомпиляции/реверс-инжиниринга будет псевдокод или алгоритм, из которого родится уже новый исходный код. Если записи об обратной разработке недоступны, то доказать неоригинальность кода становится непосильной задачей (особенно если код перенесен на другую платформу). Opensource в этом случае вообще предлагает открытые исходники для всех желающих заглянуть "под капот" приложения.


На правах итога.

РИ как способ познания через опыт - очень распространенное явление, часто даже не отслеживаемое сознанием (хорошо, что его еще не запатентовали). В сферах, где подобная практика затрагивает чьи-то шкурные интересы, закон регулирует подобную деятельность во избежание плагиата, и (на мой взгляд) не очень-то справляется. Изучение "черных ящиков" - довольно увлекательное занятие, своеобразное испытание, challenge. Конечно, закон нарушать не стоит, но я придерживаюсь мысли, что лучше просто не наступать змее на хвост, потому как сделать кого-то виноватым или найти крайнего для госслужб весьма несложно.