Статический и динамический анализ

Два фундаментальных способа изучать программу.

Статический анализ — изучение программы без её запуска; динамический — наблюдение за программой во время выполнения.

Статический анализ

Вы открываете файл в дизассемблере и читаете код, не запуская его. Видна вся структура сразу, можно изучать опасный код, не давая ему выполниться. Минус — сложно понять, что произойдёт в реальности (особенно если данные приходят извне или код «прячется»).

  • Плюсы: безопасно (код не исполняется), видна вся программа, удобно для малвари.
  • Минусы: трудно с обфускацией и упаковкой, не видно реальных значений.

Динамический анализ

Вы запускаете программу под отладчиком и смотрите, что происходит: какие значения в регистрах, по какой ветке пошло выполнение, какие функции вызываются. Реальные данные видны сразу. Минус — код исполняется (для малвари нужна изоляция), и вы видите только тот путь, который выполнился сейчас.

  • Плюсы: видны реальные значения и поведение, обходит простую обфускацию.
  • Минусы: код выполняется (опасно для малвари — нужна песочница), видно только один путь.

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

Статический анализатор разбирает байты файла в инструкции (дизассемблирует). Динамический отладчик использует возможности процессора и ОС: ставит точки останова (breakpoint), перехватывает выполнение и даёт читать память и регистры в любой момент.

Их сочетают

На практике реверсер постоянно переключается: статически находит подозрительное место, затем динамически проверяет, что там происходит в реальности. Это самый эффективный подход.

Статика: "вот функция проверки" --> Динамика: "а что в регистрах, когда она вызвана?"

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

  • Запускать неизвестную малварь динамически на основной машине — опасно. Только изоляция.
  • Полагаться только на статику при упакованном коде — он «разворачивается» лишь при запуске.

Итог

  • Статика — без запуска, безопасно, видна вся программа.
  • Динамика — с запуском, видны реальные значения, но нужна осторожность.
  • Лучший результат — сочетание двух подходов.
Проверьте себя
1. В чём ключевое отличие статического анализа от динамического?
AСтатический анализ платный, динамический бесплатный
BПри статическом программа не запускается, при динамическом — выполняется
CСтатический работает только с PE, динамический только с ELF
DЭто синонимы
2. Почему динамический анализ неизвестной малвари требует особой осторожности?
AОн медленный
BКод реально выполняется и может навредить — нужна изолированная среда
CОн не показывает регистры
DОн работает только в Linux