Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ghidra-llm-pipeline — Детерминированный конвейер извлечения, триажа и локальной LLM-компиляции на основе PyGhidra для реимплементации на C. | Kitploit
Инструменты/GitHubGitHub/happytotoro116/ghidra-llm-pipeline
Статический анализАнализ КодаОбратная инженерияСкриптинг и автоматизацияАнализ Бинарных ФайловМашинное ОбучениеОбратная Разработка с Помощью ИИБезопасность ИИ
GitHub
happytotoro116/ghidra-llm-pipeline

ghidra-llm-pipeline

Детерминированный конвейер извлечения, триажа и локальной LLM-компиляции на основе PyGhidra для реимплементации на C.

Репозиторий
41471 день назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

ghidra-llm-pipeline

Спасибо за скачивание моего конвейера Ghidra + LLM.

Это мой первый README. ASL (американский жестовый язык) — мой первый язык, поэтому мой английский не идеален. Я старался как мог.


----- Зачем я это сделал -----

Я люблю старую PC-симуляцию, в которую играю с детства, и хочу улучшить её под капотом.

Глядя на open-source игры вроде OpenRA и OpenTTD, я понял вот что: любительская реимплементация — это не про получение оригинального исходного кода. Это про создание новой open-source версии игры, которая может загружать ассеты оригинала. Тогда любой сможет её расширять или вносить вклад.

Для работы я использую два вида ИИ вместе:

  • Облачный ИИ для знаний и советов (и для помощи со скриптами на Python).
  • Локальные LLM для тяжёлой работы (написания кода).

----- Конвейер -----

  1. PyGhidra выгружает программу в виде ассемблера и C-псевдокода.
  2. Заголовки — самая важная часть. Каждая функция получает заголовок с функциями и глобальными переменными, которые она использует.
  3. Группировка: Python группирует функции, которые вызывают друг друга, в «классы».
  4. Триаж: Python читает строки, используемые каждой группой, чтобы предположить, для чего она нужна.
  5. Роли: скрипт перечисляет вероятную роль каждого класса и формирует рабочие очереди.

----- Метки (триаж) -----

Каждая функция получает одну метку. Это экономит много времени, потому что я не трачу усилия на большую массу мусора из ОС и рантайма.

|-----------|------------------------------------------------------------------------------------------------------------------

МеткаЗначение
KEEPСобственная логика игры (например, модель полёта, модель повреждений, TrackIR)
WRAPСвязующий код для Java, вызывающий API ОС или ввода: сохранить сигнатуру, написать новое тело.
(IL-2 1946 — интересный движок: C++ и Java вместе.)
REPLACEСтарый C-рантайм, аллокатор, thunks: их предоставляет компилятор или ОС, поэтому новой 64-битной версии они не нужны
UNKNOWNНеясно: посмотреть вручную
-----------------------------------------------------------------------------------------------------------------------------

В моей тестовой программе около 44% функций были REPLACE, так что их вообще не нужно было конвертировать.


----- Ассемблер, а не C-псевдокод -----

Вначале я доверял C-псевдокоду как содержащему все ответы. Это было наивно. Это интерпретация ассемблера от Ghidra, и она догадывается (типы переменных, потерянные аргументы).

Ассемблер — это сырая правда. В нём нет типов переменных, но он содержит точное поведение каждой функции. Поэтому скрипты читают ассемблер и превращают его в чертёж в C-подобной форме. C от Ghidra сохраняется только как подсказка.


----- LLM как компилятор, а не ассемблер -----

Мои ранние тесты использовали локальные LLM (Qwen 2.5 Coder, DeepSeek Coder V2 Lite, Mellum 2) для чтения ассемблера напрямую. Это никогда не работало надёжно. Они галлюцинировали, потому что созданы писать код, а не читать сырой машинный код.

После многих неудачных экспериментов я разделил работу:

  • Python — это ассемблер. Он читает ассемблер и пишет чертёж: точные факты, C-черновик на уровне регистров и контрольный список.
  • LLM — это компилятор. Он свободно пишет настоящий C по чертежу.
  • Python проверяет ответ (текстовые проверки и настоящий компилятор) и исправляет мелкие огрехи.

ПРИМЕЧАНИЕ: Как Python проверяет ответ

  • Текстовые проверки: имя функции, каждый вызов, глобальная переменная и строка из чертежа, циклы, размеры шагов, сравниваемые константы, возвращаемое значение, а также отсутствие оставшихся имён регистров или выдуманных имён.

  • проверка компиляции gcc: код компилируется с помощью gcc (только синтаксис, ничего не запускается). Это очень помогло. В одном из ранних прогонов текстовые проверки пропустили ответы Mellum 2, но ни один из них не скомпилировался из-за заголовочного комментария, написанного вне комментария. gcc ловит то, чего не видят текстовые проверки: необъявленные или повторно объявленные переменные, неверные типы, а также сломанные скобки или точки с запятой. Функция считается PASS только тогда, когда и текстовые проверки, и компиляция прошли успешно. gcc не доказывает правильность логики, поэтому я по-прежнему сверяю код с чертежом.

  • Если проверка не проходит, LLM получает список того, что не удалось, и пробует ещё раз.

  • Python сам исправляет мелкие огрехи, без участия LLM: объявляет каждую переменную один раз, оборачивает свободные строки заголовка в комментарий, заставляет последний return возвращать правильный результат, а также добавляет include и объявления.

Чек-лист появился после того, как я увидел, что LLM спотыкаются на очень длинных функциях. Он работает как чек-лист, которым пользуется пилот перед взлётом и посадкой. Python составляет его по функции и сверяет с ним ответ. В моих тестах длинные функции начали проходить, а прогоны стали быстрее.


----- Что находится в этом репозитории -----

|-------------------|---------------------------------------|---------------------------------------------

ПапкаЧто она делаетЧитать
ghidra_pipelineДамп, группировка, триаж, ролиghidra_pipeline/INSTRUCTION.txt
llm_pipelineЧертежи и запуск LLM (v3)llm_pipeline/INSTRUCTION_BLUEPRINT_LLM.txt
-------------------------------------------------------------------------------------------------------

Начните с ghidra_pipeline, затем переходите к llm_pipeline, когда будете готовы использовать свои локальные LLM.


----- Быстрый старт -----

Сначала проанализируйте свою программу в PyGhidra и запустите PyGhidra Scripts/decompile_full_dump.py. Два файла INSTRUCTION объясняют настройку папок. Затем:

Сначала проанализируйте свою программу в PyGhidra и запустите PyGhidra Scripts/decompile_full_dump.py. Два файла INSTRUCTION объясняют настройку папок. Затем:

python .\make_full_lite_v2.py --in . --out .\OUT
python .\triage_evidence_v2.py --lite .\OUT\LITE_AC
python .\build_roles_v2.py --triage .\OUT\TRIAGE

python .\blueprint_v3.py --group ".\SOURCE\LITE_AC\<GroupName>" --out ".\G_<GroupName>\BLUEPRINT_v3"
python .\run_blueprint_llm_v3.py --bp ".\G_<GroupName>\BLUEPRINT_v3" --out ".\G_<GroupName>\RUN1_v3_<model>" --model <model name>

Для работы нужны Ghidra с PyGhidra, Python 3, LM Studio (с загруженной моделью) и gcc (рекомендуется, используется для проверки компиляции).


----- Текущие результаты -----

  • Одна группа из 6 функций из одной 32-битной программы Windows, три локальные модели.
  • Все три модели выдали логически корректный код (я сверял его с эталонными описаниями). Автоматическая проверка прошла 6/6, 6/6 и 5/6.
  • Я продолжаю над этим работать. Это первый релиз.

----- Ограничения -----

Скачать инструмент