Зачем нужен реверс-инжиниринг?

Зачем нужен реверс-инжиниринг?


15.04.2019
/
Алекс Айфонов

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

Реверс-инжиниринг применяется в следующих случаях:

Если отсутствует полная документация на софт. Если разработчик программного обеспечения не предоставляет никаких сведений о работе и функционировании программы, пользователь никак не сможет узнать, как на самом деле работает ПО изнутри. Простым обывателям это и не нужно, однако те, кто разбирается в программировании и желает изучить алгоритмы программы или убедиться в ее безопасности, захотят просмотреть исходный код. Часть функционала программного обеспечения может быть недоступной лишь по причине плохо составленной или поверхностной документации о ее возможностях. Лишь реверс-инжиниринг позволяет досконально изучить программу и выявить незадокументированные функции.

Для взлома и хакинга программ. Обратную разработку применяют хакеры для взлома лицензированного ПО. Исходный код дает возможность изучить защитные механизмы и создать специальный софт по их обходу. Во многих случаях реверс-инжиниринг позволяет пользоваться лицензированной программой бесплатно. На основе полученных данных от обратной разработки создаются активаторы, кряки, кейгены, патчи, обманывающие или ломающие защиту платных программ.

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

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

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

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

На первый взгляд обратная разработка — это спорная технология. С одной стороны, она позволяет воровать разработки других компаний, но с другой, дает возможность использовать технику по максимуму. Без реверс-инжиниринга не было бы прогресса ни в сфере промышленности, ни в сфере IT. Компании редко занимаются открытым копированием идей друг у друга, поскольку это не выгодно ни одной из сторон, зато реверс-инжиниринг позволяет разработчикам переосмысливать старые идеи и генерировать новые.



Поиск и проверка значений в массиве на Javascript

Примеры поиска значений в массиве с помощью методов find, findIndex, includes, every и других.

Тестировщик программного обеспечения – первый шаг в IT

Одним из старейших, но по-прежнему популярных направлений в IT является тестирование. Работа тестировщика помогает делать продукт, который выпускает компания, лучше, уменьшать количество отказов и находить различные ошибки до того, как продукт пройдет стадию релиза и будет доступен конечным пользователям.

Базовые сведения о языке программирования PHP

PHP — распространённый интерпретируемый серверный язык программирования. Чаще всего его применяют для написания серверной части веб-сайтов.