Несколько недель назад мне попался подозрительный скрипт. Не в смысле "что-то тут не так" — а буквально: коллега прислал файл с припиской "глянь, что это вообще делает". Файл был обфусцирован так, что читать его руками — это полчаса боли и стакан кофе. Я решил попробовать другой путь и закинул его в Claude.
За сорок секунд я получил разбор, который сам бы писал минут сорок. После этого я начал использовать ИИ для анализа подозрительного кода регулярно — и понял несколько вещей, которые не очевидны с первого раза.
Что умеет ИИ, а что — нет
Начну с честного: ИИ не заменяет реверс-инжиниринг. Он не запускает код, не строит граф вызовов динамически, не видит что происходит в памяти. Всё это по-прежнему делается инструментами вроде IDA, Ghidra или x64dbg.
Но есть класс задач, где ИИ работает быстрее любого другого инструмента — это понимание намерения кода. Когда у тебя есть кусок PowerShell с тремя уровнями base64 и переменными вида $a1b2c3, вопрос не "как это работает технически", а "что это пытается сделать". И вот здесь нейросеть даёт результат за секунды.
Я закидываю код с простым промптом: "объясни что делает этот скрипт, построчно, без воды". Модель разворачивает обфускацию в голове, объясняет логику, указывает на подозрительные вызовы. Иногда сразу называет семейство малвари — если паттерн известный.
Обфускация — главная точка применения
Большая часть малвари обфусцирована. Дело не в том, что авторы любят красивый код — просто обфускация обходит сигнатурные антивирусы и замедляет анализ. Слои base64, XOR-шифрование строк, подмена имён переменных на мусор — всё это делается автоматически.
Руками разворачивать это — честно, скучно. Берёшь строку, декодируешь, берёшь следующую. ИИ делает это моментально и при этом удерживает контекст — понимает, что вот эта раскодированная строка это URL следующей стадии загрузки, а вот это имя задачи в планировщике, которую малварь создаёт для закрепления в системе.
Несколько раз я ловил себя на том, что модель замечала связь между двумя кусками кода, которую я бы пропустил при линейном чтении.
Где я обжёгся
Первые несколько раз я слишком доверял выводам. ИИ уверенно объяснял что делает код — и я принимал это как факт. А потом один раз проверил вручную и обнаружил, что модель неверно интерпретировала один из вызовов: написала что функция читает реестр, а на деле она туда писала. Направление операции — критично. Это разница между "наблюдает" и "закрепляется".
С тех пор я использую ИИ как первый слой — чтобы быстро понять структуру и намерение. Критичные выводы перепроверяю. Это добавляет времени, но не много — зато снижает вероятность ошибки в отчёте.
Ещё одна ловушка — галлюцинации на малоизвестных семействах. Если код достаточно нестандартный, модель может начать "угадывать" и называть атрибуцию с уверенностью, которой нет оснований. Правило простое: атрибуцию по одному скрипту не делать в принципе, с ИИ или без.
Практика: как я это делаю
Мой рабочий порядок выглядит примерно так. Сначала смотрю на файл глазами — размер, тип, очевидные строки. Потом закидываю в ИИ с просьбой дать обзор: что делает, какие API вызывает, на что обратить внимание. Это занимает минуту.
Дальше — в зависимости от результата. Если ИИ говорит "тут три стадии загрузки и попытка отключить Windows Defender" — это уже карта для дальнейшего анализа. Я знаю куда смотреть, не трачу время на нерелевантные части.
Для PowerShell и Python это работает особенно хорошо — языки читаемые, ИИ с ними знаком хорошо. С нативным кодом после дизассемблирования хуже, но тоже полезно: можно скормить псевдокод из Ghidra и получить объяснение логики функции.
Про безопасность, которую все забывают упомянуть
Когда скармливаешь малварь в облачную модель — ты отправляешь потенциально чувствительные данные на чужой сервер. Если это семпл из корпоративного инцидента, там могут быть имена хостов, внутренние адреса, пути к файлам. Это утечка.
Я использую локальные модели для реального анализа инцидентов. Ollama с достаточно большой моделью справляется с большинством задач. Медленнее, чем Claude или GPT-4, но данные никуда не уходят. Облачные — только для учебных семплов или публично известных образцов, где конфиденциальности нет в принципе.
ИИ не сделал реверс-инжиниринг простым. Он сделал скучную часть — разворачивание обфускации и первичное понимание намерения — быстрой. Это уже немало. Год назад я бы потратил на тот скрипт сорок минут. Сейчас — пять, остальное время ушло на проверку того, что модель сказала правильно, а что — нет.
