Всем салют! Сегодня мы наконец поговорим про reverse engineering. А перед началом важно упомянуть, что говорить мы будем про обратную разработку программного обеспечения.
Чтобы понять термин «reverse engineering», важно знать, что многие вещи, в том числе в компьютере, работают по принципу «чёрного ящика» (black box). Он гласит, что существует некоторое устройство (программа или алгоритм) получающий на входе некоторые данные и обрабатывающий их неизвестным нам образом. После этого он выводит некий продукт. Поэтому этот ящик называют чёрным – мы не видим, что происходит внутри него. В этой ситуации, всё, что мы можем делать – подавать на входе разные данные и наблюдать за тем, какие выходные данные он производит.
Простой пример – механические часы. Мы их заводим и стрелки начинают двигаться. Однако, каким образом прокрутка заводной головки запускает механизм – обычные люди понимают только в самых общих чертах.
Естественно, пытливый ум всегда будет желать узнать, что находится в этом чёрном ящике. Однако, зачастую так получается, что механизм или, в нашем случае программный код, бывает очень сложным. Именно тогда к нам в помощь приходит reverse engeneering. Основная его задача такова: получить из имеющегося чёрного ящика некую структурированную модель того, что происходит внутри. Reverse engeneering будет считаться успешным, когда «ревёрс инженер» сможет на каком-нибудь высокоуровневом языке объяснить, что именно происходит в коде.
Для чего нужен reverse engineering?
Бывают ситуации, когда есть компилируемая версия, однако исходников нет. Чтобы добавить новый функционал или же исправить ошибку, необходимо будет применить обратную разработку.
Также бывают более редкие случаи, когда исходников изначально не было и программа была написана на ассемблере. Ассемблер – тема довольно большая, поэтому оставим её на потом. Пока важно знать, что код, разрабатываемый программистом на высокоуровневых языках, превращается в бинарный код, который понимает компьютер (нули и единицы). Между ними есть промежуточный этап – ассемблер. В таком случае, если нужно что-то добавить или исправить, также потребуется обратная разработка. Она позволит бинарный код превратить в код ассемблера. Это единственный возможный вариант, когда исходников в принципе не существовало.
Теперь поговорим про более популярное. Уверен, многие используют антивирусы в своём компьютере. А задумывались ли вы, как именно антивирус может определить вирусную программу? А всё благодаря обратной разработке. Именно в сфере информационной безопасности обратная разработка используется чаще всего.
Когда появляется новый вирус, ясное дело, доступ к его исходному коду никто не выдаст. В этом случае начинается гонка на время, поскольку неизвестно, на что способно новое ПО от киберпреступников. Тогда в дело вступает reverse engineer, который по кусочкам разберёт вредоносный код и определит, что он делает, как влияет на систему и каким образом его можно остановить.
В итоге становится ясно, что обратная разработка – очень актуальная сфера в IT. Задачи обратной разработки нельзя назвать лёгкими, однако за их решение обеспечена достойная выплата. А на этом у меня всё. Увидимся в следующей статье.