$ sudo teach IT

Фаззинг (Fuzzing):

  • Что это: Метод автоматизированного тестирования, при котором в программу подается большое количество случайных, невалидных или неожиданных входных данных с целью спровоцировать сбой, утечку памяти или найти уязвимость.
  • Типы: Dumb fuzzing (случайные данные) vs Smart fuzzing (на основе знания структуры данных, например, протокола). Coverage-guided fuzzing (AFL, libFuzzer) — "умный" фаззинг, который анализирует, какие ветви кода покрываются, и мутирует данные для достижения нового покрытия.
  • Применение: Идеально для тестирования парсеров, протоколов, библиотек.

Обфускация (Obfuscation):

  • Что это: Намеренное преобразование исходного или байт-кода с целью затруднить его понимание, анализ и реверс-инжиниринг, при сохранении функциональности.
  • Зачем: Защита интеллектуальной собственности (алгоритмов), затруднение анализа вредоносного ПО (в защитных целях), усложнение поиска уязвимостей для атакующего.
  • Методы: Переименование переменных/методов в бессмысленные имена, запутывание потока управления, шифрование строковых литералов.
  • Важно: Не является надежной защитой. Затрудняет, но не делает невозможным анализ для мотивированного противника.