Реверсивный инжиниринг, реинжиниринг, обратная инженерия, реверс-инжиниринг, обратная разработка, обратное проектирование, обратный инжиниринг или просто реверс — это все описани я одного процесса.
Реверс — это изучение готового устройства или программного обеспечения, чтобы понять суть его работы и принцип его строения.
Цели для реверсивного инжиниринга могут быть разные : начиная от желания внести доработки и корректировки в рабочую программу или устройство и заканчивая созданием собственной аналогичной программы или устройства.
Чаще всего реверс-инженерия связана с программированием и изучением закрытого программного обеспечения.
Например , кто-то создал программу и выпустил ее в свет, но исходный код не обнародовал. Появляются разные «энтузиасты», которые хотят от реда ктировать или доработать код программы. Для того чтобы это сделать , необходимо иметь в наличии исходный код программы, но его нет в открытом доступе. Таким образом, «энтузиасты» проводят реверсивные мероприятия или просто реверс, для того чтобы выяснить исходные код программы. Это что касается программирования, однако реверс-мероприятия применяются не только там .
Реверс — это не только программистское мероприятие
- Машиностроение и автомобилестроение. В этих отраслях всегда одни производители «копировали» что-то от других. Причем «копировали» как отдельные части, так и целые устройства.
- Электроника. Реплики дорогих флагманских телефонов — это реверс , и это не единичные случаи. В этой сфере «копирование» каких-то частей тоже не редкость: процессоры, части компьютеров, телефоны, фотоаппараты и др.
- Военная промышленность. Советский бомбардировщик Ту-4 был копией американского бомбардировщика В-29. Самое подделываемое оружие в мире — это автомат Калашникова. То ест ь б лагодаря реверс-инженерии легко подделывают даже оружие.
Реверс в программном обеспечении
- С открытым исходным кодом. Это те, которые не прячут собственный исходный код, поэтому каждый может его посмотреть, модифицировать и использовать , согласно определенной ему лицензии. Такие программы могут быть платными и бесплатными.
- С закрытым исходным кодом. Это программы, у которых исходный код закрыт и недоступен общественности. Обычно исходный код закрывают, чтобы защитить программу от копирования и модификаций. Такие программы бывают бесплатными, но чаще всего это платные программы, принадлежащие какой-то компании.
- Анализ обмена информации. При таком подходе проводят «прослушку» работы программы, просматривают , как она обменивается информацией с другими программами или серверами. Эта методика позволяет выяснить структуру работы программы.
- Дизассемблирование программы. Код любой программы, которая работает на устройстве, разными способами «превращается» в машинный код. Машинный код — это код , который исполняется внутри устройства. Его заполучить можно. Суть этой методики сводится к тому, чтобы из машинного кода, который непонятен человеку , получить код на языке ассемблера, который уже можно понять. Таким образом, п осле подобной обработки не получается исходный код программы, но получается код, на который можно воздействовать.
- Декомпиляция кода. Эта методика похожа на предыдущую. Тут также берут машинный код, байт код или скомпилированный код программы и пытаются получить из него код на языке более высокого уровня , т о ест ь п ытаются восстановить исходный код программы. Декомпиляция — это обратный процесс компиляции. Компиляция — это преобразование кода программы, написанного на языках высокого уровня, в низкоуровневый код, который понятен устройству. Пример скомпилированного файла — это любой исполняемый файл «.exe» в операционной системе Windows.
Заключение
Реверс — это процесс, который родился из-за человеческой лени или жадности. В быту, когда людям лень придумывать что-то свое, они «копируют» продукты других людей, слегка их изменяя, и выставляют за собственную разработку. В программировании несколько другие цели, но они все равно носят негативный характер.
РЕВЕРС-ИНЖИНИРИНГ | обратное проектирование или моделирование по сканированной модели
Реверс инжиниринг для начинающих. Что это такое?
Что такое обратная разработка и где она применяется
Обратная разработка — метод разборки объекта, который помогает понять, как сконструировано ранее созданное устройство, процесс, система или часть программного обеспечения. Инженер разбирает продукт на части, чтобы понять, как он работает, а потом воссоздать похожее или идентичное решение. Разработчик отвечает на вопрос: «Какие процессы провоцируют именно такое поведение продукта?».
Таким способом не удастся получить точный исходный код, но инженеры смогут понять общую логику работы и повторить функционал.
Часто встречаются названия «обратное проектирование», «обратный инжиниринг», «реверс-инжиниринг» — они означают одно и то же.
Где применяется реверс-инжиниринг
Обратный инжиниринг применяют в компьютерной инженерии, геймдеве, машиностроении, дизайне, электронной инженерии, разработке программного обеспечения, химической инженерии и даже системной биологии.
Компании часто используют обратный инжиниринг старых электронных компонентов, снятых с производства. Если у части компьютерного оборудования были функции, потерянные из-за изменений в технологии, реверс-инжиниринг позволяет производителям открыть и обновить эти формулы. Также метод помогает разрабатывать компоненты, соединяющие новое и старое, чтобы подключать устаревшее оборудование к новому.
В IT обратная разработка программ применяется для исследования софта и железа, их элементов и принципов работы.
Объектами могут быть:
- файлы — чтобы узнать, как именно работает приложение;
- часть операционной системы — чтобы использовать недокументированные функции;
- формат данных — чтобы получить структуру файлового формата;
- сетевой протокол — чтобы восстановить формат пакетов данных и последовательность обмена данными.
Для чего используют обратную разработку:
- поиск и исправление ошибок в программах, к исходному коду которых у разработчиков нет доступа;
- анализ вирусов для создания антивирусного программного обеспечения;
- улучшение функциональности приложения, когда связаться с предыдущим разработчиком не получается — например, компания-разработчик перестала существовать;
- описание механики игры, когда разработчик берет в пример существующую игру, наблюдает за ее развитием, анализирует сценарий и предлагает свой вариант;
- обучение: если разработчик не понимает какую-то часть своего продукта, он может проанализировать чужую и сделать выводы о ее функционировании.
Реверс-инжиниринг также применяют для нелегальных целей — кражи кода, обхода технических средств защиты авторских прав, бесконечного использования бесплатных версий приложения.
Типы реверс-инжиниринга
Существуют десятки видов обратной разработки, поскольку процесс может разбить объект на части по-разному — например, анализ системного уровня, извлечение схемы и разборка продукта.
Принципы обратной разработки
Процесс обратной разработки регулируют общие принципы:
- 1. Не путать гипотезы с выводами. Обратный инжиниринг дает гипотезы. Разработчик должен полностью понять приложение, прежде чем делать выводы.
- 2. Получить несколько интерпретаций. Альтернативные интерпретации данных могут давать разные результаты. Чем больше информации доступно, тем меньше должны различаться суждения реверс-инженеров.
- 3. Понимать, что результаты приблизительны. К примеру, 80% информации девелопер получит благодаря обратной разработке. Чтобы получить оставшиеся 20%, нужно использовать методы прямого проектирования, например, опрос пользователей.
- 4. Не удивляться странным конструкциям. Инженер не сможет воссоздать полную и точную модель, потому что такой модели до этого, возможно, не существовало.
- 5. Следить за единым стилем. Продукт разрабатывают с использованием последовательной стратегии, которую нужно найти и понять.
Этапы реверс-разработки на примере исполняемого файла:
- 1. Запустить и протестировать исполняемый файл, ознакомиться с приложением и его возможностями.
- 2. Проанализировать взаимодействие файла с внешним миром: библиотеками, процессами, системными API, файловой системой, сетевыми взаимодействиями, физическими портами и т. д.
- 3. Детально изучить код. Для этого применяют трансляцию двоичного кода на язык ассемблера, чтобы затем извлечь структуры, инструкции и вызовы функций.
Источник: robotdreams.cc
С чего начать изучение реверс-инжиниринга
Доброго времени суток. Желаю поведать о том, что такое реверс-инжиниринг . Почему это направление одно из самых увлекательных в ИБ и с чего начать изучение. И немного о моём обучении.
Что такое реверс-инжиниринг?
Реверс-инжиниринг дословно переводится на русский язык, как «обратная инженерия» или обратное проектирование. Это способ исследовать некоторое готовому устройство или программу, а также документации на него с целью понять принцип его работы. Другими словами — имеется программа, написанная на высокоуровневом языке программирования. Цель реверс-инженера — это понять, как работает это программа. Но исходного кода может не быть, следовательно, используют дизассемблер, и смотрят код программы на низкоуровневом языке ассемблер .
Почему реверс-инжиниринг одно из самых увлекательных направлений в ИБ?
При реверс-инжиниринге программ, специалист пытается понять, как устроена программа. Перед тем, как заниматься дизассемблированием программы необходимо понять, как работает защита если она есть, а только дальше анализировать весь код и разбираться, как он работает. Я считаю разбираться как устроена программа и “ломать голову” анализируя весть код – это самое увлекательное в данном ремесле + со стороны выглядит эффектно. Вот скриншот простой дизассемблированной программы. Выглядит страшно, но программа очень простая.
Реверс инжиниринг тесно связан с исследованием вредоносного ПО. Вирус — это тоже программа, которую можно исследовать.
Я задам вам вопрос – “Вы скачивали взломанные игры с торрента?” Наверняка ответ будет положительным. Программы также взламывают техниками реверс-инжиниринга, но этим лучше не заниматься.
С чего начать изучение?
С самого начала необходимо изучить основы в IT и Информационной Безопасности.
- Узнайте, как работают компьютерные сети на базовом уровне. Бесплатный курс Андрея Созыкина в помощь.
- Поработайте на виртуальной машине Linux или установите, как вторую операционную систему. Тут вам поможет VirtualBox .
- Начните изучать программирование. Рекомендую начать с Python. Он поможет вам понять концепции программирования.
- Разберитесь, какая деталь в вашем системном блоке за что отвечает. Например, для чего нужна оперативная память и т.д.
- Так же можете прочитать статьи 1 , 2 , 3 с чего начать изучение Информационной безопасности. Из этих статей вы можете узнать, где изучать интересующие вас темы.
Ресурсы про реверс-инжинирингу
Сейчас переходим к ресурсам и материалам на русском, где вы можете изучить реверс-инжиниринг. Большинство учебных пособий предпочтительно читать на оригинальном английском языке, однако, к счастью, некоторые из них перевели на русский. Я оставлю ссылки на те, с которыми я знаком или читал сам.
- Рекомендую приступить с изучения ассемблера. В реверс-инжиниринге знать ассемблер — это необходимая вещь. Начните с изучения x86. Этого на начальном этапе будет достаточно. Сайт Ravesli с уроками по ассемблеру.
- Изучите язык программирования Си. На нём пишутся многочисленные эксплоиты и вирусы. Книга по языку C .
- Про реверс инжиниринг и основы бинарных уязвимостей даже есть курс! Скачать .
- Прочитайте книгу про реверс инжиниринг. В интернете есть отличная книга — Вскрытие покажет! Практический анализ вредоносного ПО ,переведённая на русский язык, про реверс инжиниринг с лабораторными работами .
- Также про интересующую нас тему очень много написал наш земляк Крис Касперский. Его книги и заметки .
- Хотите больше узнать о работе OS Linux или Windows? Тогда эти книги помогут вам. Внутреннее устройство Windows и Внутренее устройство Linux .
- Отличный форум про отладку и дизассемблирование — это r0Crew .
- Другие книги про эту тему вы можете найти в интернете или на разных интернет-библиотеках. Например, библиотека книг сайта Codeby .
Обязательно всё повторяйте и конспектируйте в процессе обучения! Практика и ещё раз практика.
Моя история обучения в реверс-инжиниринге
Моё обучении ещё не окончилось и не закончится, но поделится информацией и мотивировать читателя хочется. Как и многие люди в ИБ я использовал на Kali Linux. Потом из-за обстоятельств я не мог работать на ПК. Но я отыскал у себя старенький ноутбук. На него я поставил antiX Linux. Затем я наткнулся на курс по реверсу. Впоследствии всё и закрутилось.
Изучал IDA PRO, radare2, ассемблер, базовые техники реверса. Хотел продолжить на изучении бинарных уязвимостей, но потом понял, что в этой теме недостаточно силён. Решено было повысить навыки работы реверс-инженера. Оказалось, что ничего секретного разыскивать не нужно в интернете. Многое валяется на поверхности.
Я говорю про книгу “Вскрытие покажет! Практический анализ вредоносного ПО”. Прочитав пару страниц из этой книги, стало понятно, что предстоит трудиться и трудиться над своими познаниями. Позже ПК починили и изучать реверс стало намного удобнее. Kali linux я поменял на обыкновенный дистрибутив linux, так как анализ ПО необходимо проводить в VirtualBox.
Параллельно с изучением реверс-инжиниринга появилась необходимость изучить язык СИ (Книга по языку C).
Спасибо за прочтение. Желаю читателям не лениться и не сдаваться. Рекомендую всё, что вы изучаете конспектировать и практиковаться больше. Не болейте.
Источник: codeby.school