Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
BOF_RunPe — BOF para executar PE no Cobalt Strike Beacon sem criação de console | Kitploit
Ferramentas/GitHubGitHub/ntdallas/bof_runpe
Forensia de MemóriaShellcodePós-ExploraçãoRed Teaming
GitHubntdallas/bof_runpe

BOF_RunPe

BOF para executar PE no Cobalt Strike Beacon sem criação de console

Ver Repositório
200252há 9 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

BOF_RunPE

BOF RunPE é um Beacon Object File para o Cobalt Strike que executa arquivos PE inteiramente em memória dentro do processo do beacon. Diferentemente do tradicional fork&run, nenhum processo filho é criado, nenhum console é criado e nenhum pipe é usado - toda a saída é capturada via hooking de IAT e redirecionada para o console do beacon.

Arquitetura: apenas x64

Visão Geral

root@kitploit:~
┌──────────────────────────────────────────────────────────────┐
│                   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                        │  │
│  └────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────┘

Recursos Principais

  • Sem Criação de Processo: O PE executa dentro do processo do beacon
  • Sem Console/Pipe: Saída capturada via hooks de printf/WriteConsole
  • Múltiplos Métodos de Alocação: Heap, VirtualAlloc, Module Stomping
  • Carregamento por Proxy: Timer Queue, RegisterWait ou chamadas diretas
  • Unhooking do Ntdll: Cópia nova opcional do disco
  • RWX : Opcionalmente alocar memória em RWX
  • Spoofing de Início de Thread: Endereço inicial legítimo com sequestro de RIP

Opções de Configuração

O comportamento do BOF pode ser editado em Additionals postex -> RunPe Config

BOF Personalizado

Métodos de Proxy

MethodDescription
NoneChamadas diretas de API
DraugrChamadas de API com stack spoofing

Métodos de Alocação

MethodDescription
HeapHeap privado via RtlCreateHeap com Draugr
VirtualAllocNtAllocateVirtualMemory com Draugr
Module stompingSobrescreve a seção .text de uma DLL legítima

Opções Gerais

OptionDescription

Spoofing de Thread

OptionDescription
ModuleNameMódulo legítimo para o endereço inicial (ex.: Kernel32.dll)
ProcedureNameNome da função dentro do módulo (ex.: )

Captura de Saída

Toda a saída do PE é redirecionada para o console do beacon via hooks de IAT. Nenhuma janela de console ou pipe nomeado é criada.

Técnicas de Evasão

Vetores de Detecção

Telemetria do Kernel (ETW-TI)

NtGetContextThread / NtSetContextThread:

  • Manipulação do contexto da thread em threads suspensas e, em seguida, retomada

Operações de Memória:

  • Alocação de NtAllocateMemory, pode ser em RWX (depende da configuração)
  • Transições de NtProtectVirtualMemory (RW → RX)
  • Memória executável em regiões de heap é suspeita (depende da configuração)
  • Module stomping detectável via incompatibilidade de hash da seção (depende da configuração)

Indicadores Comportamentais

  • Thread suspensa criada, obter o contexto e alterar o valor do RIP
  • Memória do heap marcada como executável (se o alocador de memória for heap)
  • DLL carregada com DONT_RESOLVE_DLL_REFERENCES (se o alocador de memória for module stomping)
  • Seção .text da Ntdll modificada (se o unhooking estiver habilitado)

Uso

Carregando o Script

root@kitploit:~
Cobalt Strike → Script Manager → Load → BOF_RunPe.cna

Comandos do Aggressor

root@kitploit:~
beacon> runpe /path/to/binary.exe --arg1 value1

Mimikatz

root@kitploit:~
beacon> help runpe

Ajuda

Compilação

Requer GCC 13 (mingw-w64). Use o Dockerfile fornecido:

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

Saída: Bin/runpe.o

Limitações

LimitationDescription
CETA Control-flow Enforcement Technology pode bloquear stack frames sintéticos

Créditos / Recursos usados no desenvolvimento

Repositórios/blogposts

  • 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/

Livros

  • Windows Native API Programming por Pavel Yosifovich
  • Windows Internals, Part 1 por Pavel Yosifovich
  • Windows Internals, Part 2 por Andrea Allievi
Baixar ferramenta
Regwait
Callback de RegisterWaitForSingleObject
TimerCallback de Timer Queue
AllocRWXAlocar como RWX (vs transição RW→RX)
UnhookNtdllSubstituir a seção .text da ntdll.dll por uma cópia nova do disco
TimeoutTempo limite de execução em milissegundos (0 = infinito)
StompModuleCaminho da DLL para module stomping (ex.: chakra.dll)
BaseThreadInitThunk
OffsetOffset a partir do início da função
Hooked FunctionTarget
GetCommandLineA/WRetorna argumentos falsificados
__getmainargs / __wgetmainargsInicialização de argumentos do CRT
printf / wprintfRedirecionamento para BeaconPrintf
WriteConsoleA/WRedirecionamento para BeaconPrintf
__stdio_common_vfprintfFunções de impressão da UCRT
ExitProcess / exitConvertido em ExitThread
TechniqueBypasses
Syscalls IndiretosHooks de API em userland (EDR/AV)
Stack Spoofing do DraugrInspeção da pilha de chamadas (call stack)
Spoofing de Início de ThreadAnálise do endereço inicial da thread
Module StompingDetecção de memória não mapeada (unbacked)
Alocação de Heap PrivadoMonitoramento de VirtualAlloc
Unhooking do NtdllSubstitui a ntdll em memória pela ntdll do disco
Hook de IAT (sem pipes)Monitoramento de pipes nomeados
Apenas x64
Sem suporte a x86/WoW64
Visibilidade do KernelCriação de threads visível para callbacks do kernel
.NETExecutáveis gerenciados não suportados