Инженерам иногда нужно думать наоборот, чтобы проанализировать продукт. Например, инженер-механик может делать выводы о производстве продукта на основе его конструкции и физических свойств. Они могут даже быть в состоянии производить тот же продукт, если они имеют полное представление о нем.
Вы также можете сравнить обратное проектирование с доказательствами математических уравнений. Итак, как используется реверс-инжиниринг?
Что такое обратный инжиниринг?
Обратный инжиниринг — это процесс анализа системы с целью ее воспроизведения или улучшения. Если вы посмотрите на рабочие области реверс-инжиниринга, вы увидите, что вы можете использовать его для самых разных целей. Если посмотреть на это с точки зрения кибербезопасности, можно выполнить следующие операции с помощью методов реверс-инжиниринга:
- Исходный анализ программного обеспечения с закрытым исходным кодом
- Анализ уязвимостей
- Анализ вредоносных программ
- Взлом и исправление
В настоящее время реверс-инжиниринг используется даже в компьютерных играх. Например, разработчики часто создают модификации программного обеспечения, используя методы реверс-инжиниринга.
В области реверс-инжиниринга есть два разных метода анализа: статический и динамический. Вы выполняете статический анализ, когда анализируете программу, фактически не запуская ее. С другой стороны, метод динамического анализа требует запуска программы для наблюдения за ее поведением и данными, которые она использует.
Но прежде чем проводить анализ для реверс-инжиниринга, необходимо знать некоторые важные термины. как работает архитектура компьютера.
Основные части компьютерной архитектуры
Реверс-инжиниринг практически невозможен, если вы не понимаете архитектуру компьютера. Вам необходимо изучить четыре основные части:
- Вход: Набор методов для ввода данных.
- Процессор: CPU обрабатывает входящие данные и передает их владельцам. Это центральный процессор.
- Память: Пространство, в котором временно хранятся данные во время обработки.
- Выход: результат, который видит конечный пользователь.
Вы можете запомнить все эти основные проблемы на примере, например, когда вы нажимаете букву A на клавиатуре. При ее нажатии происходит событие ввода. После этого этапа ЦП обрабатывает данные и использует небольшой объем памяти для их хранения. Наконец, вы увидите на экране букву A, завершающую процесс выводом.
Погрузитесь в глубины процессора
Если вы действительно хотите стать экспертом в обратном проектировании и глубоко погрузиться в эту тему, вам необходимо иметь подробные знания об оборудовании, низкоуровневых языках и особенно о процессоре. Ключевые темы, которые вам необходимо знать о ЦП:
- Устройство управления: отвечает за обработку данных в ЦП и их передачу в соответствующие поля. Вы можете думать об этом устройстве как о механизме управления маршрутизацией.
- АЛУ: это расшифровывается как арифметико-логическое устройство. Здесь происходят некоторые арифметические и логические операции. Если вы углубитесь в математику, вы увидите, что основные четыре операции по сути являются вариациями сложения. Таким образом, ALU основан на агрегации. Например, вычитание двух из трех равносильно прибавлению минус два к трем.
- Регистры: Это области внутри ЦП, которые содержат обработанные данные. Существуют различные типы регистров, как и различные типы переменных в языке программирования. Регистр отвечает за поддержание типа и атрибутов назначенных ему данных.
- Сигналы: Если вы хотите, чтобы ЦП выполнял множество различных операций одновременно, необходим какой-то метод их организации. Элементы, которые делают это, называются сигналами. Каждая транзакция действует в соответствии с сигналами, которые гарантируют, что она не будет мешать другому процессу.
- Автобус: Путь, используемый данными для перемещения от одного модуля к другому. Обратите внимание, как название предполагает транспорт.
Концепции, которые вы часто будете слышать в реверс-инжиниринге
Понимание того, как ЦП обрабатывает данные и сохраняет их в памяти, наряду с концепцией регистров, может быть очень полезным при обратном проектировании. В частности, вы можете использовать приведенную ниже схему, чтобы лучше понять концепцию памяти:
Наконец, для обратного инженерного анализа вам необходимо знать некоторые основные понятия о регистрах. Они являются одной из тем, на которых вы сосредоточитесь больше всего. Вот несколько кратких пояснений о данных, указателях и индексных регистрах, которые будут вам полезны:
- 1. EAX: Обозначает накопительный регистр. Обычно он сохраняет данные, которые подпадают под категорию арифметических операций.
- 2. EBX: Обозначает базовый регистр. Он играет роль в косвенной адресации.
- 3. EDX: Обозначает регистр данных. EDX помогает другим регистрам.
- 4. EIP: Обозначает указатель инструкций. Содержит адрес домена для запуска.
- 5. ЭСП: Содержит базовый адрес.
- 6. ЭСИ: содержит информацию об исходном индексе.
- 7. ЭОД: Сохраняет информацию об индексе назначения.
Вы должны исследовать все это отдельно, чтобы понять их нюансы. Но если вы посмотрите на основы и попытаетесь понять бизнес-логику, независимо от того, с какой архитектурой процессора вы работаете, анализ кода для реверс-инжиниринга будет достаточно легким.
Обратное проектирование часто начинается с машинного кода. Вы можете понять многие из приведенных выше терминов, если вы знакомы с ассемблером или владеете 32-битная или 64-битная архитектура процессора. Если вы хотите изучить ассемблер с нуля, это будет чрезвычайно полезно при реверс-инжиниринге.
Что вы будете делать со всем этим?
Если вы хорошо разбираетесь в реверс-инжиниринге, вы можете выполнять анализ кода независимо от того, с какой операционной системой или архитектурой процессора вы работаете. Например, можно найти взломанные версии многих программ или компьютерных игр. Это совершенно незаконный метод.
Однако, если вы собираетесь быть этичным профессионалом в области кибербезопасности, вам нужно будет использовать обратную инженерию, чтобы понять, почему взламываются эти взломанные программы. Если вы хотите продвинуться в обратном проектировании или только начинаете, было бы хорошим выбором, если вы попытаетесь узнать о взаимосвязи между аппаратным обеспечением и машинным кодом.