Динамический анализ в отладчике: точки останова, регистры, шаг
Смотрим на проверку crackme не статически, а в реальном выполнении.
Шаг (single step) — выполнение ровно одной инструкции с остановкой, чтобы увидеть, как изменились регистры и память.
Зачем динамика поверх статики
Статически мы поняли структуру проверки. Но какие реальные значения сравниваются? Что лежит в регистре в момент cmp? Динамический анализ отвечает на это прямо во время работы программы.
Типичный сценарий разбора crackme
- Найти статически место проверки (например, по кросс-ссылке от строки «Wrong password»).
- Поставить breakpoint на инструкцию сравнения.
- Запустить, ввести любой пароль.
- Когда выполнение остановилось — посмотреть регистры и память: что с чем сравнивается.
- Сделать выводы о правильном вводе.
Команды 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), замораживая его на точках останова.