Статический и динамический анализ
Два фундаментальных способа изучать программу.
Статический анализ — изучение программы без её запуска; динамический — наблюдение за программой во время выполнения.
Статический анализ
Вы открываете файл в дизассемблере и читаете код, не запуская его. Видна вся структура сразу, можно изучать опасный код, не давая ему выполниться. Минус — сложно понять, что произойдёт в реальности (особенно если данные приходят извне или код «прячется»).
- Плюсы: безопасно (код не исполняется), видна вся программа, удобно для малвари.
- Минусы: трудно с обфускацией и упаковкой, не видно реальных значений.
Динамический анализ
Вы запускаете программу под отладчиком и смотрите, что происходит: какие значения в регистрах, по какой ветке пошло выполнение, какие функции вызываются. Реальные данные видны сразу. Минус — код исполняется (для малвари нужна изоляция), и вы видите только тот путь, который выполнился сейчас.
- Плюсы: видны реальные значения и поведение, обходит простую обфускацию.
- Минусы: код выполняется (опасно для малвари — нужна песочница), видно только один путь.
Как работает под капотом
Статический анализатор разбирает байты файла в инструкции (дизассемблирует). Динамический отладчик использует возможности процессора и ОС: ставит точки останова (breakpoint), перехватывает выполнение и даёт читать память и регистры в любой момент.
Их сочетают
На практике реверсер постоянно переключается: статически находит подозрительное место, затем динамически проверяет, что там происходит в реальности. Это самый эффективный подход.
Статика: "вот функция проверки" --> Динамика: "а что в регистрах, когда она вызвана?"
Частые ошибки
- Запускать неизвестную малварь динамически на основной машине — опасно. Только изоляция.
- Полагаться только на статику при упакованном коде — он «разворачивается» лишь при запуске.
Итог
- Статика — без запуска, безопасно, видна вся программа.
- Динамика — с запуском, видны реальные значения, но нужна осторожность.
- Лучший результат — сочетание двух подходов.