Что нужно знать заранее: связь с ассемблером и архитектурой

Карта знаний, на которые опирается реверс-инжиниринг.

Машинный код — последовательность байтов-инструкций, которые напрямую исполняет процессор; ассемблер — его человекочитаемая запись.

Зачем нужен ассемблер

Дизассемблер показывает программу на языке ассемблера. Поэтому без базового ассемблера реверс невозможен. Из курса «Ассемблер» нам понадобятся: регистры, инструкции mov, add, cmp, jmp, условные переходы, вызовы функций call/ret и стек.

mov eax, 5      ; положить число 5 в регистр eax
add eax, 3      ; прибавить 3, теперь eax = 8
cmp eax, 8      ; сравнить eax с 8
je  equal       ; если равно — прыгнуть на метку equal

Что взять из архитектуры компьютера

  • Регистры — быстрые ячейки внутри процессора (eax, rbx, указатель стека rsp, счётчик команд rip).
  • Память и адреса — программа и данные лежат по адресам; реверс часто крутится вокруг «что лежит по этому адресу».
  • Стек — область для локальных переменных и адресов возврата; понимание стека критично для разбора функций.
  • Системы счисления — байты записывают в шестнадцатеричном виде (hex), адреса тоже.

Как работает под капотом: путь от 32 до 64 бит

Большинство современных программ — 64-битные (архитектура x86-64). Регистры стали шире: eaxrax, появилось больше регистров (r8r15), аргументы функций часто передаются через регистры, а не через стек. Для ARM (мобильные устройства) набор инструкций другой, но принципы те же.

Связь с этичным хакингом

Реверс — часть арсенала специалиста по безопасности. Из курса «Этичный хакинг» сюда переходят идеи: модель угроз, изоляция (песочница), ответственное раскрытие, и снова — работа только с разрешения. Реверс отвечает на вопрос «как именно устроена эта программа изнутри», а этичный хакинг — «как это знание применить для защиты».

Частые ошибки

  • Прыгать в реверс без ассемблера — будет непонятно вообще ничего.
  • Путать десятичные и шестнадцатеричные числа: 0x10 — это 16, а не 10.
  • Игнорировать стек — половина логики функций живёт именно там.

Итог

  • Реверс стоит на трёх китах: ассемблер, архитектура (регистры/память/стек), системы счисления.
  • Современная цель чаще всего x86-64; для мобильных — ARM.
  • Этика и изоляция приходят из этичного хакинга.
Проверьте себя
1. Чему равно шестнадцатеричное число 0x10 в десятичной системе?
A10
B16
C8
D32
2. Почему без ассемблера реверс невозможен?
AПотому что дизассемблер показывает программу именно на ассемблере
BПотому что ассемблер ускоряет компьютер
CПотому что без него не запустится отладчик
DПотому что ассемблер шифрует код