Реверсивный инжиниринг, реинжиниринг, обратная инженерия, реверс-инжиниринг, обратная разработка, обратное проектирование, обратный инжиниринг или просто реверс — это все описания одного процесса.
Реверс — это изучение готового устройства или программного обеспечения, чтобы понять суть его работы и принцип его строения. Цели для реверсивного инжиниринга могут быть разные: начиная от желания внести доработки и корректировки в рабочую программу или устройство и заканчивая созданием собственной аналогичной программы или устройства.
Чаще всего реверс-инженерия связана с программированием и изучением закрытого программного обеспечения. Например, кто-то создал программу и выпустил ее в свет, но исходный код не обнародовал. Появляются разные «энтузиасты», которые хотят отредактировать или доработать код программы. Для того чтобы это сделать, необходимо иметь в наличии исходный код программы, но его нет в открытом доступе. Таким образом, «энтузиасты» проводят реверсивные мероприятия или просто реверс, для того чтобы выяснить исходные код программы. Это что касается программирования, однако реверс-мероприятия применяются не только там.
Реверс — это не только программистское мероприятие
Реверсивный инжиниринг применялся и применяется в разных сферах человеческой деятельности. Люди, которые чуть постарше возрастом, прекрасно помнят ситуацию, связанную с китайскими товарами, которая происходила лет 15 назад. В то время китайцы подделывали все, что можно было подделать. Делали они очень некачественные товары, поэтому фраза «китайский товар» стала нарицательной и всегда относилась к чему-то плохому. Сегодня также присутствует низкокачественный товар из Китая, правда, уже не в таких объемах. Китайцы научились делать хорошо. Однако любая подделка — это результат реверсивной инженерии, когда оригинальный товар изучается, а затем воспроизводится собственными усилиями.
Реверс никуда от нас не ушел. Каждый, наверное, встречал такое понятие, как «реплика телефона». Самой распространенной репликой является реплика Айфона. Оригинальный телефон дорогой, а реплика стоит дешевле. Если разобраться, тогда видно, что реплика — это результат реверсивного инжиниринга.
Сферы жизнедеятельности, которые применяли или применяют реверс:
Машиностроение и автомобилестроение. В этих отраслях всегда одни производители «копировали» что-то от других. Причем «копировали» как отдельные части, так и целые устройства.
Электроника. Реплики дорогих флагманских телефонов — это реверс, и это не единичные случаи. В этой сфере «копирование» каких-то частей тоже не редкость: процессоры, части компьютеров, телефоны, фотоаппараты и др.
Военная промышленность. Советский бомбардировщик Ту-4 был копией американского бомбардировщика В-29. Самое подделываемое оружие в мире — это автомат Калашникова. То есть благодаря реверс-инженерии легко подделывают даже оружие.
В общем, любая подделка или реплика какого-либо устройства — это результат реверс-инжиниринга. Каждый человек вокруг себя может найти десятки примеров реверса, однако «пальма первенства» по применению реверса все равно принадлежит программному обеспечению.
Реверс в программном обеспечении
Ни для кого не секрет, что информационные технологии очень быстро развиваются вокруг нас. Пересчитать все доступные программы и приложения просто нереально. Все программы делятся на 2 большие категории:
С открытым исходным кодом. Это те, которые не прячут собственный исходный код, поэтому каждый может его посмотреть, модифицировать и использовать, согласно определенной ему лицензии. Такие программы могут быть платными и бесплатными.
С закрытым исходным кодом. Это программы, у которых исходный код закрыт и недоступен общественности. Обычно исходный код закрывают, чтобы защитить программу от копирования и модификаций. Такие программы бывают бесплатными, но чаще всего это платные программы, принадлежащие какой-то компании.
Как известно, есть такое выражение: «Запретный плод сладок». С программами происходит то же самое. Те, которые закрыты от общественности, вызывают наиболее сильный интерес и желание их скопировать или откорректировать. Так как их исходный код защищен, значит, нужно его восстановить. Чтобы восстановить исходный код, применяют реверс.
В программировании термин «реверсивная инженерия» часто относят к «хакерским» инструментам. В этом утверждении присутствует доля правды, так как хакеры очень часто применяют реверс для того, чтобы найти уязвимости в программах и потом использовать их по своему усмотрению. Им не нужно восстанавливать весь программный код, им нужно всего лишь понять его структурное строение и уязвимые точки, через которые можно атаковать.
Самый известный пример — это операционная система Windows. Ее код закрыт. Чтобы полностью восстановить исходный код системы, понадобится мощный компьютер и годы времени, поэтому восстанавливают код частично и не спеша до тех пор, пока не обнаруживают какую-то уязвимость. Обнаружили — атаковали, а затем продолжают реверсировать. Восстанавливать полностью исходный код не имеет смысла. Для чего? Ведь создать собственную операционную систему можно совершенно бесплатно, если применить возможности Линукс-систем, которые открыты для общественности. Но вот реверсировать Виндовс, чтобы обнаружить уязвимости и потом через них атаковать миллионы компьютеров, — это другое дело.
Важный момент. Даже самые продвинутые реверс-инструменты полностью не восстанавливают исходный код программы, они лишь создают его приближенную копию.
Реверс-инжиниринг — это не какая-то отдельная программа. Как правило, в этот процесс входят десятки разнообразных манипуляций и преобразований программы. Каждая отдельная манипуляция дает «каплю информации» о программе и потом из всех этих «капель» собирается структура и понимание самой программы.
Реверсивной инженерии свойственны несколько методик. Например:
Анализ обмена информации. При таком подходе проводят «прослушку» работы программы, просматривают, как она обменивается информацией с другими программами или серверами. Эта методика позволяет выяснить структуру работы программы.
Дизассемблирование программы. Код любой программы, которая работает на устройстве, разными способами «превращается» в машинный код. Машинный код — это код, который исполняется внутри устройства. Его заполучить можно. Суть этой методики сводится к тому, чтобы из машинного кода, который непонятен человеку, получить код на языке ассемблера, который уже можно понять. Таким образом, после подобной обработки не получается исходный код программы, но получается код, на который можно воздействовать.
Декомпиляция кода. Эта методика похожа на предыдущую. Тут также берут машинный код, байт код или скомпилированный код программы и пытаются получить из него код на языке более высокого уровня, то есть пытаются восстановить исходный код программы. Декомпиляция — это обратный процесс компиляции. Компиляция — это преобразование кода программы, написанного на языках высокого уровня, в низкоуровневый код, который понятен устройству. Пример скомпилированного файла — это любой исполняемый файл «.exe» в операционной системе Windows.
Заключение
Реверс — это процесс, который родился из-за человеческой лени или жадности. В быту, когда людям лень придумывать что-то свое, они «копируют» продукты других людей, слегка их изменяя, и выставляют за собственную разработку. В программировании несколько другие цели, но они все равно носят негативный характер.
Другое