← Все гайды AI Release
EN Подписаться на @ai_release1

Как использовать ИИ-агента для реверс-инжиниринга: анализ и патчинг бинарников

Обновлено: 15.10.2026 · AI Release · @ai_release1
Как использовать ИИ-агента для реверс-инжиниринга: анализ и патчинг бинарников

Реверс-инжиниринг (разбор готового исполняемого файла — «бинарника» — на логику и структуру) — это медленная ручная работа: часы на чтение дизассемблированного кода (текста машинных инструкций, переведённых в читаемый вид). Гайд показывает, как подключить к этому процессу ИИ-агента — программу, которая сама планирует шаги, вызывает инструменты и отвечает по результатам, — чтобы он готовил гипотезы, разбирал длинные листинги и подсказывал, где искать проверку лицензии или сетевой протокол. Подходит для ELF-файлов (формат исполняемых файлов в Linux) и PE-файлов (формат исполняемых файлов в Windows), как 64-битных, так и 32-битных, при анализе собственного ПО, учебных образцов и CTF-задач на изолированной машине.

Требования и подготовка

Иллюстрация к разделу «Требования и подготовка»
Иллюстрация к разделу «Требования и подготовка»

Чек-лист перед стартом:

Пошаговая инструкция

Иллюстрация к разделу «Пошаговая инструкция»
Иллюстрация к разделу «Пошаговая инструкция»

1. Создайте рабочую папку и снимок ВМ.

   mkdir -p ~/re/workspace
   cd ~/re/workspace

**Пример:** после команд `pwd` выводит `/home/user/re/workspace`.

*Почему так:* отдельная папка и снимок позволяют откатить всё состояние, если образец поведёт себя неожиданно. Ожидаемый результат: пустая папка и снимок с понятным именем, например `clean-before-analysis`.

2. Сделайте копию образца и посчитайте хеш.

   cp ./target.bin ~/re/workspace/target.bin
   sha256sum ~/re/workspace/target.bin

**Пример вывода:** `3b1f...9d2c /home/user/re/workspace/target.bin`.

Хеш — короткий «отпечаток» файла. Он нужен, чтобы позже доказать, что вы анализировали именно этот файл и не подменили его. Ожидаемый результат: одна строка с 64 символами.

3. Проведите первичную разведку, не запуская файл.

   file ~/re/workspace/target.bin
   strings -n 6 ~/re/workspace/target.bin | head -n 30 > strings.txt
   readelf -h ~/re/workspace/target.bin

**Пример вывода:** `ELF 64-bit LSB executable, x86-64` — вы сразу знаете архитектуру и разрядность.

Ожидаемый результат: в `strings.txt` появились подсказки — URL, имена библиотек, тексты ошибок. Это дешёвый способ понять назначение программы за минуту.

4. Соберите из результатов «пакет контекста» для агента. Не отдавайте ему весь файл — только то, что относится к задаче.

Что нашлиИнструментЧто передать агенту
Тип и архитектура`file`, `readelf -h`одна строка с типом файла
Подозрительные строки`strings`20–30 строк с подписями
Функции и импорты`objdump`, Ghidraсписок имён и адресов
Подозрительная функцияGhidraлистинг одной функции целиком

**Пример:** вы нашли строку `License key invalid` — передаёте агенту её и адрес, где она используется. Ожидаемый результат: у агента достаточно данных, чтобы не догадываться, а ссылаться на факты.

5. Задайте агенту роль и жёсткие правила. Готовый шаблон промпта:

   Ты помогаешь анализировать бинарник в изолированной ВМ.
   Данные: тип файла, список строк, листинг функции (см. ниже).
   Задача: найди, где проверяется лицензия.
   Правила: для каждой гипотезы указывай адрес и строку-доказательство;
   если данных нет — пиши "недостаточно данных", не выдумывай.

*Почему это работает:* запрет на выдумывание и требование цитировать адреса резко снижают число ложных выводов. Ожидаемый результат: ответ в формате «адрес → строка → вывод».

6. Проверяйте каждую гипотезу руками в отладчике.

   gdb -q ~/re/workspace/target.bin
   (gdb) info functions
   (gdb) disassemble main

**Пример:** агент предположил, что проверка идёт по адресу `0x401234` — вы ставите `break *0x401234`, запускаете `run` и видите, останавливается ли отладчик именно там.

Ожидаемый результат: гипотеза подтверждена или отброшена. Агент — источник версий, истина — отладчик.

7. Патчите только копию, по одному изменению за раз.

   path = "target_patched.bin"
   with open(path, "r+b") as f:
       f.seek(0x401234)      # адрес из шага 6
       f.write(bytes([0x90])) # 0x90 = NOP, инструкция "ничего не делать"

**Пример:** заменив первую инструкцию условного перехода на NOP, вы проверяете, изменилось ли поведение.

*Почему так:* байтовый патч — самое локальное изменение, по нему легко понять причину. Ожидаемый результат: файл `target_patched.bin` запускается и ведёт себя иначе, чем оригинал.

8. Сравните хеши и зафиксируйте результат.

   sha256sum target.bin target_patched.bin

**Пример вывода:** две разные строки — значит, патч действительно применён.

Ожидаемый результат: в логе появилась запись «адрес, что менял, что получилось». Без этого через день вы не вспомните логику правки.

Возможные проблемы и решения

Иллюстрация к разделу «Возможные проблемы и решения»
Иллюстрация к разделу «Возможные проблемы и решения»

Агент придумывает адреса, которых нет.Симптом: отладчик выдаёт ошибку вида `No symbol "0x402f10" in current context` или `Cannot access memory at address 0x402f10`.

Решение:

1. Вернитесь к шагу 5 и добавьте в промпт требование цитировать строку-доказательство.

2. Передайте агенту не весь листинг, а одну функцию — меньше простора для домыслов.

3. Каждую гипотезу прогоняйте через `info functions` и `disassemble`, пока адрес не подтвердится.

Ответ обрывается или приходит ошибка о превышении длины запроса.Симптом: сообщение вида «context length exceeded» или ответ обрывается на середине.

Решение:

1. Разбейте большую функцию на фрагменты по 100–200 строк.

2. Подавайте строки и импорты отдельно от листинга.

3. Сначала просите обзор («какие функции похожи на проверку ввода»), потом углубляйтесь в одну.

После патча программа падает.Симптом: `Segmentation fault` (нарушение доступа к памяти) или мгновенное завершение без вывода.

Решение:

1. Восстановите файл из копии `target.bin` и пересчитайте хеш.

2. Патчите по одному байту за раз и после каждого запуска фиксируйте поведение.

3. Проверьте, не попал ли байт внутрь инструкции: одна лишняя замена ломает выравнивание команд.

FAQ

Можно ли так анализировать чужой софт?

Только если у вас есть права на этот файл: собственный продукт, лицензия на исследование, учебный образец или CTF-задача. Анализ чужого ПО без разрешения — нарушение закона и условий лицензии.

Нужна ли видеокарта?

Для базового сценария — нет. `strings`, `readelf`, Ghidra и `gdb` работают на процессоре, а модель вызывается по API. Видеокарта понадобится, только если вы захотите держать модель локально.

ИИ заменяет дизассемблер и отладчик?

Нет. Агент ускоряет чтение и подсказывает направления поиска, но подтверждает факты только отладчик. Любую гипотезу проверяйте по адресу и по реальному поведению программы.

Что делать, если агент уверенно называет функцию проверкой лицензии?

Потребуйте доказательство: адрес, строку-ссылку и место вызова. Затем поставьте точку останова на этот адрес и запустите программу с заведомо неверным ключом — если останова не происходит, вывод ложный.

🤖 Кратко для ИИ