
Ambiente autônomo de emulação e teste para Cobalt Strike Aggressor Scripts (.cna) que valida a sintaxe, simula as APIs do Beacon e executa BOFs via COFFLoader sem um teamserver.
CnaEmulator é um harness de desenvolvimento, emulação e teste autônomo e de propósito geral para Cobalt Strike Aggressor Scripts (.cna). Ele permite que pesquisadores de segurança, desenvolvedores de ferramentas e autores de BOF validem a sintaxe de scripts, simulem comandos de alias do console do Beacon e executem Beacon Object Files (BOFs) em memória diretamente via COFFLoader64.exe sem iniciar um teamserver ou cliente GUI.
[!WARNING] Aviso Legal: Este código foi totalmente gerado com Antigravity e ainda não foi revisado.
check):
.cna usando o motor subjacente Sleep 2.1.bof_pack):
datap do Cobalt Strike:
'i': inteiro de 4 bytes's': short de 2 bytes'z': string terminada em nulo com prefixo de comprimento (prefixo strlen + 1)'Z': string UTF-16LE larga com prefixo de comprimento'b': buffer binário com prefixo de comprimentobeacon_inline_execute):
beacon_inline_execute($bid, $bof_data, "go", $packed_args).COFFLoader64.exe go <bof_path> <hex_args> como subprocesso filho.test):
<script>.cna.tests ou <script>.tests.console):
beacon> ) com suporte a aliases registrados, argumentos, documentação de ajuda e execução ao vivo..
├── .gitignore # Git ignore rules for compiled binaries & bytecode
├── COFFLoader64.exe # 64-bit Standalone in-memory COFF relocator and loader
├── cna_emulator.bat # Convenient CLI launcher script
├── README.md # Comprehensive documentation and usage guide
├── TESTING.md # Component verification report & quality gates
├── TEST_SPEC.md # 48-scenario 7-category test specification
└── CnaEmulator/ # Java CNA Emulator component
├── .gitignore # Git ignore rules for CnaEmulator subfolder
├── CnaEmulator.java # Emulator source code and Sleep engine bridge
├── CnaEmulator.class # Compiled bytecode
├── CnaEmulator.jar # Packaged bytecode JAR
├── build.bat # Build script to compile and package CnaEmulator
├── test.bat # Standalone test runner script (48 scenarios)
└── tests/ # Test suite and fixtures
├── TestCnaEmulator.java # 48-scenario test harness
└── fixtures/ # Universal test fixtures
├── sample_bof.cna # Standalone sample Aggressor Script
├── sample_bof.cna.tests # Companion test suite
├── multi_alias.cna # Multi-alias sample script
└── multi_alias.cna.tests # Multi-alias companion test suite
| Requisito | Descrição e Configuração |
|---|---|
| Java JDK (17+) | Binários java e javac. Defina JAVA_HOME para o caminho do seu JDK e garanta que %JAVA_HOME%\bin esteja no PATH. |
Sleep 2.1 (sleep.jar) | Motor de scripting para Aggressor Scripts. Baixe de Sleep 2.1 ou copie do Cobalt Strike. Defina SLEEP_JAR (por exemplo, set "SLEEP_JAR=C:\path\to\sleep.jar"), ou coloque sleep.jar na pasta raiz ou em CnaEmulator\. |
Carregador em Memória (COFFLoader64.exe) | Binário de carregamento autônomo (por exemplo, compilado de trustedsec/COFFLoader). Colocado no diretório raiz ou substituído via COFFLOADER_PATH. |
Configuração Rápida do Ambiente (cmd.exe):
set "JAVA_HOME=C:\path\to\jdk-17"
set "PATH=%JAVA_HOME%\bin;%PATH%"
set "SLEEP_JAR=C:\path\to\sleep.jar"
Antes de executar as classes compiladas ou o JAR, compile CnaEmulator.java:
Usando o Script de Build:
CnaEmulator\build.bat
Ou Compilação e Empacotamento Manual:
:: Compile source to bytecode
javac -cp "%SLEEP_JAR%" -d CnaEmulator CnaEmulator\CnaEmulator.java
:: Package into executable bytecode JAR
cd CnaEmulator
jar cfe CnaEmulator.jar CnaEmulator *.class
cd ..
Você pode invocar CnaEmulator usando qualquer um dos seguintes métodos a partir do diretório raiz do projeto:
O script launcher lida automaticamente com a descoberta do JDK, configuração do classpath e resolução de caminhos:
cna_emulator.bat <action> [arguments...]
java -cp "CnaEmulator\CnaEmulator.jar;%SLEEP_JAR%" CnaEmulator <action> [arguments...]
java -cp "CnaEmulator;%SLEEP_JAR%" CnaEmulator <action> [arguments...]
check)Valida a sintaxe do Aggressor Script e compila árvores AST via Sleep 2.1 sem executar código:
cna_emulator.bat check <path\to\script.cna>
Exemplo com fixture incluída:
cna_emulator.bat check CnaEmulator\tests\fixtures\sample_bof.cna
Saída de Exemplo:
[*] Checking syntax of: CnaEmulator\tests\fixtures\sample_bof.cna
[+] sample_bof.cna syntax OK
run)Executa um alias Aggressor declarado, empacota argumentos em formato binário (bof_pack), resolve o arquivo objeto (script_resource) e invoca COFFLoader64.exe para executar o BOF na memória do chamador:
cna_emulator.bat run <path\to\script.cna> <alias_name> [arguments...]
Exemplo com fixture incluída:
cna_emulator.bat run CnaEmulator\tests\fixtures\sample_bof.cna sample_bof run test_target
Saída de Exemplo:
[*] Invoking: sample_bof 1 run test_target
[*] Tasked beacon: Executing sample_bof with action: run
[+] [COFFLoader Bridge] Executing: COFFLoader64.exe go sample_bof.o
| Got contents of COFF file
| Running/Parsing the COFF file
| Ran/parsed the coff
| Outdata Below:
| ...
[+] [COFFLoader Bridge] Completed with exit code: 0
test)CnaEmulator test fornece execução automatizada de testes:
cna_emulator.bat test <path\to\script.cna> [alias] [arguments...]
Modos de Execução:
<alias> e [arguments...] forem especificados na linha de comando, apenas esse cenário específico é executado.CnaEmulator verifica a existência de um arquivo de teste complementar adjacente ao script:
<script_dir>\<script_name>.cna.tests<script_dir>\<script_name>.tests
Se encontrado, todas as linhas de cenário no arquivo complementar são executadas sequencialmente.CnaEmulator inspeciona todos os aliases de comando registrados e executa um teste de cláusula de guarda para garantir que contagens de argumentos inválidas produzam erros de uso sem lançar exceções não tratadas.Exemplos:
:: Run automated tests on the bundled sample script (executes sample_bof.cna.tests)
cna_emulator.bat test CnaEmulator\tests\fixtures\sample_bof.cna
:: Run automated tests on the bundled multi-alias script (executes multi_alias.cna.tests)
cna_emulator.bat test CnaEmulator\tests\fixtures\multi_alias.cna
:: Run a targeted scenario directly via CLI
cna_emulator.bat test CnaEmulator\tests\fixtures\sample_bof.cna sample_bof query
Criando Arquivos de Teste Complementares (<script>.cna.tests):
Crie um arquivo de texto simples adjacente ao seu script .cna. Cada linha não vazia e não comentada especifica um alias e seus parâmetros:
# Sample BOF Companion Test Suite
# Format: <alias> [arguments...]
sample_bof run test_target
sample_bof query
console)Inicia um prompt interativo beacon> com suporte a aliases registrados, histórico de comandos e execução simulada:
cna_emulator.bat console <path\to\script.cna>
Exemplo de Sessão Interativa:
====================================================================
CnaEmulator Interactive Beacon Console
Loaded Script: sample_bof.cna
====================================================================
Type 'help' to see registered commands, or 'exit' to quit.
beacon> help
Registered Beacon Commands:
- sample_bof : Sample BOF execution command
beacon> sample_bof run local_target
[*] Tasked beacon: Executing sample_bof with action: run
[+] [COFFLoader Bridge] Executing: COFFLoader64.exe go sample_bof.o
...
beacon> exit
CnaEmulator é completamente de propósito geral e pode testar Aggressor Scripts e binários BOF localizados em qualquer diretório ou repositório externo em seu sistema de arquivos:
:: Validate any external script syntax
cna_emulator.bat check C:\Projects\CustomBof\my_bof.cna
:: Execute external BOF alias commands with live arguments
cna_emulator.bat run C:\Projects\CustomBof\my_bof.cna my_command target_argument
:: Run companion test suites for external scripts
cna_emulator.bat test C:\Projects\CustomBof\my_bof.cna
:: Open interactive console with external script
cna_emulator.bat console C:\Projects\CustomBof\my_bof.cna
Para executar a suíte completa de testes de conformidade de especificação de 48 cenários para CnaEmulator:
CnaEmulator\test.bat
Resultado Esperado:
====================================================================
Execution Summary
====================================================================
Total Scenarios : 48
Passed : 48
Failed : 0
Assertions : 172
Elapsed Time : ~2800 ms
====================================================================
[+] ALL 48 TEST SCENARIOS PASSED CLEANLY (100% SPECIFICATION CONFORMANCE)
| Função / Palavra-chave | Descrição |
|---|---|
bof_pack | Empacota argumentos binários Little-Endian (i, s, z, Z, b) com prefixo de comprimento de buffer de 4 bytes. |
beacon_inline_execute | Gera subprocesso COFFLoader64.exe go <bof.o> <hex_args> e transmite stdout ao vivo. |
script_resource | Resolve caminhos de recursos relativos no diretório do script, bin/, ../bin/ e caminhos relativos. |
openf, readb, closef | I/O nativo do sistema de arquivos para ler arquivos .o BOF locais em buffers de bytes. |
btask, berror, blog, blog2 | Formata e envia mensagens de tarefa, status e erro para stdout/stderr. |
beacon_command_register | Registra aliases, resumos e detalhes de ajuda no catálogo de comandos ao vivo. |
beacon_commands, beacon_command_detail | Consulta listagens de comandos registrados e texto de ajuda para uso interativo/console. |
barch | Retorna "x64". |
bdata, beacon_info | Retorna hash de metadados simulado do Beacon (id: 1, pid: 13020, user: SYSTEM, arch: x64). |
beacons, beacon_ids | Retorna array de beacons simulados ativos (["1"]). |
alias, |
[!NOTE] Implementações Fictícias / Stub: Todas as outras APIs do Cobalt Strike—incluindo execução/injeção de processo (
bshell,bpowershell,bexecute,bspawn,binject), manipulação de token (bsteal_token,brev2self,bgetuid), navegação no sistema de arquivos (bpwd,bls,bupload,bdownload), pivoting (socks,rportfwd), prompts de UI (prompt_text,prompt_confirm) e hooks de GUI (popup,menu,item,on)—são implementadas como stubs fictícios retornando valores positivos sem erro (1,"NT AUTHORITY\SYSTEM","C:\Windows\System32",true) ou blocos no-op para que os scripts executem offline sem falhas.
command| Vincula blocos de comando como closures executáveis para despacho interativo ou CLI. |