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

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

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

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

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

Категории

Все категории
Loading categories
BOF_RunPe — BOF для запуска PE в Cobalt Strike Beacon без создания консоли | Kitploit
Инструменты/GitHubGitHub/ntdallas/bof_runpe
Криминалистика памятиШелл-кодПост-эксплуатацияRed Teaming
GitHubntdallas/bof_runpe

BOF_RunPe

BOF для запуска PE в Cobalt Strike Beacon без создания консоли

Репозиторий
200251110 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

BOF_RunPE

BOF RunPE — это Beacon Object File для Cobalt Strike, который выполняет PE-файлы полностью в памяти внутри процесса beacon. В отличие от традиционного fork&run, не создается дочерний процесс, не создается консоль и не используется канал (pipe) — весь вывод захватывается через перехват IAT и перенаправляется в консоль beacon.

Архитектура: только x64

Обзор

┌──────────────────────────────────────────────────────────────┐
│                   Cobalt Strike Beacon                       │
│                    (Current Process)                         │
└────────────────────────┬─────────────────────────────────────┘
                         │
                         │  beacon_inline_execute()
                         │
                         ▼
┌──────────────────────────────────────────────────────────────┐
│                    BOF RunPE                                 │
│  ┌────────────────────────────────────────────────────────┐  │
│  │  VxTable + Draugr Initialization                       │  │
│  │  (Syscall Resolution + Stack Spoofing)                 │  │
│  └──────────────────────┬─────────────────────────────────┘  │
│                         │                                    │
│  ┌──────────────────────▼─────────────────────────────────┐  │
│  │  PE Mapping                                            │  │
│  │  - Section Copy    - IAT Patching (with hooks)         │  │
│  │  - Relocations     - Memory Protection                 │  │
│  └──────────────────────┬─────────────────────────────────┘  │
│                         │                                    │
│  ┌──────────────────────▼─────────────────────────────────┐  │
│  │  Thread Execution                                      │  │
│  │  - Spoofed Start Address                               │  │
│  │  - RIP Hijacking to Entry Point                        │  │
│  │  - Output Redirection via Hooks                        │  │
│  └────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────┘

Ключевые возможности

  • Нет создания процесса: PE выполняется внутри процесса beacon
  • Нет консоли/канала: Вывод захватывается через перехват printf/WriteConsole
  • Несколько методов выделения памяти: Heap, VirtualAlloc, Module Stomping
  • Прокси-загрузка: Timer Queue, RegisterWait или прямые вызовы
  • Снятие перехвата ntdll: Опционально свежая копия с диска
  • RWX: Опционально выделять память как RWX
  • Спуфинг стартового адреса потока: Легитимный стартовый адрес с перехватом RIP

Параметры конфигурации

Поведение BOF можно настроить в Additionals postex -> RunPe Config

Custom BOF

Методы прокси

МетодОписание
NoneПрямые вызовы API
DraugrВызовы API со спуфингом стека
RegwaitОбратный вызов RegisterWaitForSingleObject
TimerОбратный вызов Timer Queue

Методы выделения памяти

МетодОписание
HeapПриватная куча через RtlCreateHeap с Draugr
VirtualAllocNtAllocateVirtualMemory с Draugr
Module stompingПерезапись секции .text легитимной DLL

Общие опции

ОпцияОписание
AllocRWXВыделять как RWX (вместо перехода RW→RX)
UnhookNtdllЗаменить .text ntdll.dll свежей копией с диска
TimeoutТаймаут выполнения в миллисекундах (0 = бесконечно)
StompModuleПуть к DLL для module stomping (например, chakra.dll)

Спуфинг потока

ОпцияОписание
ModuleNameЛегитимный модуль для стартового адреса (например, Kernel32.dll)
ProcedureNameИмя функции внутри модуля (например, BaseThreadInitThunk)
OffsetСмещение от начала функции

Захват вывода

Весь вывод PE перенаправляется в консоль beacon через перехваты IAT. Не создается ни окно консоли, ни именованный канал.

Перехваченная функцияЦель
GetCommandLineA/WВозвращает подставные аргументы
__getmainargs / __wgetmainargsИнициализация аргументов CRT
printf / wprintfПеренаправление в BeaconPrintf
WriteConsoleA/WПеренаправление в BeaconPrintf
__stdio_common_vfprintfФункции печати UCRT
ExitProcess / exitПреобразуется в ExitThread

Техники обхода

ТехникаОбход чего
Косвенные системные вызовыПерехваты API на уровне пользователя (EDR/AV)
Спуфинг стека DraugrАнализ стека вызовов
Спуфинг стартового адреса потокаАнализ стартового адреса потока
Module StompingОбнаружение незакрепленной памяти
Выделение приватной кучиМониторинг VirtualAlloc
Снятие перехвата ntdllПерезапись ntdll в памяти копией с диска
Перехват IAT (без каналов)Мониторинг именованных каналов

Векторы обнаружения

Телеметрия ядра (ETW-TI)

NtGetContextThread / NtSetContextThread:

  • Манипуляция контекстом потока на приостановленных потоках с последующим возобновлением

Операции с памятью:

  • NtAllocateMemory — выделение, может быть в RWX (зависит от конфигурации)
  • NtProtectVirtualMemory — переходы (RW → RX)
  • Исполняемая память в областях кучи подозрительна (зависит от конфигурации)
  • Module stomping обнаруживается через несоответствие хэша секции (зависит от конфигурации)

Поведенческие индикаторы

  • Создан приостановленный поток, получен контекст, затем изменено значение RIP
  • Память кучи помечена как исполняемая (если распределитель памяти — куча)
  • DLL загружена с флагом DONT_RESOLVE_DLL_REFERENCES (если распределитель памяти — module stomping)
  • Секция .text ntdll изменена (если включено снятие перехвата)

Использование

Загрузка скрипта

Cobalt Strike → Script Manager → Load → BOF_RunPe.cna

Команды Aggressor

beacon> runpe /path/to/binary.exe --arg1 value1

Mimikatz

beacon> help runpe

Help

Компиляция

Требуется GCC 13 (mingw-w64). Используйте предоставленный Dockerfile:

sudo docker build -t ubuntu-gcc-13 .
sudo docker run --rm -it -v "$PWD":/work -w /work ubuntu-gcc-13:latest make

Результат: Bin/runpe.o

Ограничения

ОграничениеОписание
CETТехнология Control-flow Enforcement может блокировать синтетические кадры стека
Только x64Нет поддержки x86/WoW64
Видимость на уровне ядраСоздание потока видимо для callback-функций ядра
.NETУправляемые исполняемые файлы не поддерживаются

Благодарности / Использованные ресурсы для разработки

Репозитории/статьи в блогах

  • https://github.com/susMdT/LoudSunRun
  • https://github.com/Octoberfest7/Inline-Execute-PE
  • https://www.coresecurity.com/core-labs/articles/running-pes-inline-without-console
  • https://0xdarkvortex.dev/proxying-dll-loads-for-hiding-etwti-stack-tracing/

Книги

  • Windows Native API Programming — Pavel Yosifovich
  • Windows Internals, Part 1 — Pavel Yosifovich
  • Windows Internals, Part 2 — Andrea Allievi
Скачать инструмент