Реверсинг (от английского Reverse Engineering — обратная разработка) – процесс восстановления исходных кодов того или иного продукта из конечного программного продукта или конструкторского устройства.

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

  1. Анализ вредоносного программного обеспечения (троянов, вирусов и т.д.) с целью поиска в нем ошибок и уязвимостей для защиты от него, либо же наоборот – анализ программного обеспечения с целью написания вирусов, троянов и т.д. Сюда же относится реверсинг программ для изготовления кряков для них, генераторов серийных номеров и прочего с целью понизить жадность владельца программы.
  2. Создание описаний для различных форматов данных и протоколов.
  3. Анализ работы закрытых драйверов с целью создания их открытых аналогов.
  4. Различые пиратские цели – создание клонов игровых серверов и их изменение и т.д.

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

Перечислим основные инструменты для проведения реверсинга.

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

Отладчик (по-другому также называется отладчик) – это программа, служащая для контролируемого исполнения программы, фрагмента кода или какой-либо отдельной библиотеки DLL. Популярной программой-отладчиком является SoftIce.

Декомпилятор – программа, служащая для восстановления практически исходного кода программного продукта, если он был написан на одном из языков высокого уровня и автор его не применил для защиты своего творения обфускацию (о ней мы поговорим ниже).

Для защиты программных продуктов от восстановления путем реверсинга авторы часто применяют различные методы:

  • Обфускация – процесс запутывания исходного кода путем внедрения в программу ряда ложных инструкций таким образом, чтобы после декомпиляции в принципах ее работы было крайне затруднительно разобраться.
  • Паковщики – утилиты, сжимающие готовые программы для сокращения занимаемого ими места на диске. Сами по себе защиту не обеспечивают, но отладить программу и понять как она работает, без предварительной распаковки практически невозможно.
  • Антиотладка – приемы затруднениядля хакера самого процесса отладки и копания в исходном коде.

Применяются и другие методы, но эти являются основными.