Динамический анализ в отладчике: точки останова, регистры, шаг

Смотрим на проверку crackme не статически, а в реальном выполнении.

Шаг (single step) — выполнение ровно одной инструкции с остановкой, чтобы увидеть, как изменились регистры и память.

Зачем динамика поверх статики

Статически мы поняли структуру проверки. Но какие реальные значения сравниваются? Что лежит в регистре в момент cmp? Динамический анализ отвечает на это прямо во время работы программы.

Типичный сценарий разбора crackme

  1. Найти статически место проверки (например, по кросс-ссылке от строки «Wrong password»).
  2. Поставить breakpoint на инструкцию сравнения.
  3. Запустить, ввести любой пароль.
  4. Когда выполнение остановилось — посмотреть регистры и память: что с чем сравнивается.
  5. Сделать выводы о правильном вводе.

Команды gdb для этого

gdb ./crackme
break *0x401234        # точка останова на адресе проверки
run                    # запустить
# вводим любой пароль
info registers rax rdi # посмотреть нужные регистры
x/s $rsi               # показать строку по адресу в rsi
stepi                  # шаг на одну инструкцию
continue               # продолжить

Что наблюдаем

Например, на breakpoint перед cmp в регистре rsi может оказаться адрес эталонной строки, а в rdi — ваш ввод. Команда x/s $rsi покажет эталон. Так, не зная исходника, мы видим реальные данные в момент проверки. На учебном crackme это законно и наглядно.

Как работает под капотом

Отладчик через интерфейс ОС (например, ptrace в Linux) управляет процессом: ставит точки останова, читает и пишет регистры и память отлаживаемого процесса. Когда срабатывает breakpoint, процесс «замораживается», и вы получаете полный снимок состояния.

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

  • Ставить breakpoint по адресу из файла, не учитывая, что в памяти адрес может отличаться (ASLR, база загрузки).
  • Делать step вместо step over и «проваливаться» в библиотечные функции на тысячи инструкций.
  • Запускать под отладчиком что-то подозрительное вне изоляции.

Итог

  • Динамика дополняет статику: показывает реальные значения в момент проверки.
  • Алгоритм: найти проверку → breakpoint → запустить → читать регистры/память → выводы.
  • Отладчик управляет процессом через ОС (например, ptrace), замораживая его на точках останова.
Проверьте себя
1. Что показывает команда single step (stepi) в отладчике?
AСразу весь результат программы
BВыполняет одну инструкцию и останавливается, давая увидеть изменения
CУдаляет инструкцию
DПерезапускает программу
2. Какой системный механизм Linux обычно использует отладчик для управления процессом?
Aptrace
Bmalloc
Cfork без ptrace
Dstrings