Arnés de emulación y pruebas independiente para Cobalt Strike Aggressor Scripts (.cna) que valida la sintaxis, simula las APIs de Beacon y ejecuta BOFs mediante COFFLoader sin un teamserver.
CnaEmulator es un arnés de desarrollo, emulación y pruebas independiente y de propósito general para Cobalt Strike Aggressor Scripts (.cna). Permite a investigadores de seguridad, desarrolladores de herramientas y autores de BOF validar la sintaxis de scripts, simular comandos alias de la consola de Beacon y ejecutar Beacon Object Files (BOFs) en memoria directamente a través de COFFLoader64.exe sin necesidad de lanzar un teamserver o un cliente GUI.
[!WARNING] Descargo de responsabilidad: Este código fue generado completamente con Antigravity y aún no ha sido revisado.
check):
.cna utilizando el motor subyacente Sleep 2.1.bof_pack):
datap de Cobalt Strike:
'i': entero de 4 bytes's': short de 2 bytes'z': cadena terminada en nulo con prefijo de longitud (prefijo strlen + 1)'Z': cadena UTF-16LE ancha con prefijo de longitud'b': búfer binario con prefijo de longitudbeacon_inline_execute):
beacon_inline_execute($bid, $bof_data, "go", $packed_args).COFFLoader64.exe go <bof_path> <hex_args> como subproceso hijo.test):
<script>.cna.tests o <script>.tests.console):
beacon> ) que soporta alias registrados, argumentos, documentación de ayuda y ejecución en vivo..
├── .gitignore # Reglas de Git ignore para binarios compilados y bytecode
├── COFFLoader64.exe # Relocalizador y cargador COFF en memoria independiente de 64 bits
├── cna_emulator.bat # Script lanzador de CLI conveniente
├── README.md # Documentación completa y guía de uso
├── TESTING.md # Informe de verificación de componentes y puertas de calidad
├── TEST_SPEC.md # Especificación de pruebas de 48 escenarios y 7 categorías
└── CnaEmulator/ # Componente Java CNA Emulator
├── .gitignore # Reglas de Git ignore para la subcarpeta CnaEmulator
├── CnaEmulator.java # Código fuente del emulador y puente del motor Sleep
├── CnaEmulator.class # Bytecode compilado
├── CnaEmulator.jar # JAR de bytecode empaquetado
├── build.bat # Script de compilación para compilar y empaquetar CnaEmulator
├── test.bat # Script ejecutor de pruebas independiente (48 escenarios)
└── tests/ # Suite de pruebas y fixtures
├── TestCnaEmulator.java # Arnés de pruebas de 48 escenarios
└── fixtures/ # Fixtures de prueba universales
├── sample_bof.cna # Aggressor Script de ejemplo independiente
├── sample_bof.cna.tests # Suite de pruebas complementaria
├── multi_alias.cna # Script de ejemplo multi-alias
└── multi_alias.cna.tests # Suite de pruebas complementaria multi-alias
| Requisito | Descripción y Configuración |
|---|---|
| Java JDK (17+) | Binarios java y javac. Configure JAVA_HOME con la ruta de su JDK y asegúrese de que %JAVA_HOME%\bin esté en PATH. |
Sleep 2.1 (sleep.jar) | Motor de scripting para Aggressor Scripts. Descárguelo de Sleep 2.1 o cópielo de Cobalt Strike. Configure SLEEP_JAR (por ejemplo, set "SLEEP_JAR=C:\path\to\sleep.jar"), o coloque sleep.jar en la carpeta raíz o en CnaEmulator\. |
Cargador en Memoria (COFFLoader64.exe) | Binario cargador independiente (por ejemplo, compilado de trustedsec/COFFLoader). Colocado en el directorio raíz o sobrescrito mediante COFFLOADER_PATH. |
Configuración Rápida del Entorno (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 ejecutar las clases compiladas o el JAR, compile CnaEmulator.java:
Usando el Script de Compilación:
CnaEmulator\build.bat
O Compilación y Empaquetado 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 ..
Puede invocar CnaEmulator usando cualquiera de los siguientes métodos desde el directorio raíz del proyecto:
El script lanzador maneja automáticamente el descubrimiento del JDK, la configuración del classpath y la resolución de rutas:
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 la sintaxis de Aggressor Script y compila árboles AST mediante Sleep 2.1 sin ejecutar código:
cna_emulator.bat check <path\to\script.cna>
Ejemplo con fixture incluido:
cna_emulator.bat check CnaEmulator\tests\fixtures\sample_bof.cna
Salida de Ejemplo:
[*] Checking syntax of: CnaEmulator\tests\fixtures\sample_bof.cna
[+] sample_bof.cna syntax OK
run)Ejecuta un alias Aggressor declarado, empaqueta argumentos en formato binario (bof_pack), resuelve el archivo objeto (script_resource) e invoca COFFLoader64.exe para ejecutar el BOF en la memoria del invocador:
cna_emulator.bat run <path\to\script.cna> <alias_name> [arguments...]
Ejemplo con fixture incluido:
cna_emulator.bat run CnaEmulator\tests\fixtures\sample_bof.cna sample_bof run test_target
Salida de Ejemplo:
[*] 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 proporciona ejecución automatizada de pruebas:
cna_emulator.bat test <path\to\script.cna> [alias] [arguments...]
Modos de Ejecución:
<alias> y [arguments...] en la línea de comandos, solo se ejecuta ese escenario específico.CnaEmulator busca un archivo de pruebas complementario adyacente al script:
<script_dir>\<script_name>.cna.tests<script_dir>\<script_name>.tests
Si se encuentra, todas las líneas de escenario en el archivo complementario se ejecutan secuencialmente.CnaEmulator inspecciona todos los alias de comando registrados y ejecuta una prueba de cláusula de guarda para asegurar que los conteos de argumentos inválidos produzcan errores de uso sin lanzar excepciones no controladas.Ejemplos:
:: 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
Creación de Archivos de Pruebas Complementarios (<script>.cna.tests):
Cree un archivo de texto plano adyacente a su script .cna. Cada línea no vacía y no comentada especifica un alias y sus parámetros:
# Sample BOF Companion Test Suite
# Format: <alias> [arguments...]
sample_bof run test_target
sample_bof query
console)Lanza un indicador interactivo beacon> que soporta alias registrados, historial de comandos y ejecución simulada:
cna_emulator.bat console <path\to\script.cna>
Ejemplo de Sesión Interactiva:
====================================================================
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 es completamente de propósito general y puede probar Aggressor Scripts y binarios BOF ubicados en cualquier directorio o repositorio externo en su sistema de archivos:
:: 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 ejecutar la suite completa de pruebas de cumplimiento de especificación de 48 escenarios 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)
| Función / Palabra clave | Descripción |
|---|---|
bof_pack | Empaqueta argumentos binarios Little-Endian (i, s, z, Z, b) con prefijo de longitud de búfer de 4 bytes. |
beacon_inline_execute | Genera el subproceso COFFLoader64.exe go <bof.o> <hex_args> y transmite stdout en vivo. |
script_resource | Resuelve rutas de recursos relativas en el directorio del script, bin/, ../bin/ y rutas relativas. |
openf, readb, closef | E/S nativa del sistema de archivos para leer archivos .o BOF locales en búferes de bytes. |
btask, berror, blog, blog2 | Formatea y emite mensajes de tareas, estado y errores a stdout/stderr. |
beacon_command_register | Registra alias, resúmenes y detalles de ayuda en el catálogo de comandos en vivo. |
beacon_commands, beacon_command_detail | Consulta listados de comandos registrados y texto de ayuda para uso interactivo/consola. |
barch | Devuelve "x64". |
bdata, beacon_info | Devuelve hash de metadatos de Beacon simulado (id: 1, pid: 13020, user: SYSTEM, arch: x64). |
beacons, beacon_ids | Devuelve array de beacon simulado activo (["1"]). |
alias, |
[!NOTE] Implementaciones Ficticias / Stub: Todas las demás APIs de Cobalt Strike—incluyendo ejecución/inyección de procesos (
bshell,bpowershell,bexecute,bspawn,binject), manipulación de tokens (bsteal_token,brev2self,bgetuid), navegación del sistema de archivos (bpwd,bls,bupload,bdownload), pivoting (socks,rportfwd), prompts de UI (prompt_text,prompt_confirm) y hooks de GUI (popup,menu,item,on)—están implementadas como stubs ficticios que devuelven valores positivos sin error (1,"NT AUTHORITY\SYSTEM","C:\Windows\System32",true) o bloques no-op para que los scripts se ejecuten sin conexión sin fallar.
command| Vincula bloques de comandos como closures ejecutables para despacho interactivo o por CLI. |