Estrutura de simulação de adversários baseada em playbook que compila caminhos de ataque definidos em JSON em payloads de shellcode independentes de posição para validar detecções avançadas e agentes de investigação baseados em IA.

SynthAPT é um framework de simulação de adversários baseado em playbooks para replicar caminhos de ataque complexos. Ele é projetado para validar detecções avançadas e agentes de investigação baseados em IA. A ideia central é que o comportamento de malware pode ser expresso em JSON e compilado em malware funcional, permitindo o desenvolvimento rápido de cenários realistas usando LLMs.

O implante central é um payload de shellcode orientado por um interpretador de playbook. Um playbook pré-define todo o caminho de ataque e o implante o segue, movendo-se pelo ambiente via injeção de processo, movimento lateral, etc. Cada implante surge como uma thread independente com seu próprio conjunto de instruções, de modo que ataques em múltiplos estágios (ex: acesso inicial → escalonamento de privilégios → movimento lateral → exfiltração) são expressos como um grafo de implantes cooperantes, todos definidos antecipadamente no playbook. Isso tem três grandes vantagens:

Se você não quiser usar o release, pode compilar da seguinte forma:
Compile com cargo make:```bash
cargo make build
./target/release/synthapt
Isso compilará o shellcode e o editor.
Executar o SynthAPT sem nenhum comando o levará ao editor. Você pode fornecer uma chave de API do Claude e ver as alterações conforme você faz perguntas.```bash SynthAPT playbook editor and compiler
Usage: synthapt [COMMAND]
Commands: edit Open the TUI editor with a playbook loaded from PATH validate Validate a playbook JSON file and print any errors export-skill Export the agent system prompt as a Claude Code slash command skill compile Compile a playbook to a payload
Se você quiser usar outro LLM ou uma assinatura, pode executar `synthapt export-skill` e usar isso com qualquer configuração de codificação que tiver.
Isso deve gerar um playbook JSON. Compile-o em um payload com o comando compile:```bash
Compile a playbook to a payload
Usage: synthapt compile [OPTIONS] <PLAYBOOK> [OUTPUT]
Arguments:
<PLAYBOOK> Path to the playbook JSON file
[OUTPUT] Output file path (default: payload.bin / payload.exe / payload.dll)
Options:
-e, --exe Compile to PE EXE
-d, --dll Compile to PE DLL
-b, --base <BASE> Override the embedded base shellcode with a custom binary
-h, --help Print help
Constantes podem ser definidas como strings, objetos hex, ou objetos base64:```json "constants": [ "c:\windows\temp\file.txt", { "hex": "deadbeef" }, { "base64": "SGVsbG8=" } ]
---
### end (0x00)
Fim do conjunto de tarefas. Adicionado automaticamente pelo compilador - você não precisa adicioná-lo.
---
### store_result (0x01)
Armazenar o resultado da última operação em uma variável.
| Campo | Tipo | |
|-------|------|-|
| var | u16 | **obrigatório** |```json
{ "op": "store_result", "var": 0 }
Retorna os bytes atuais do shellcode com um ID de tarefa opcional e/ou valor mágico inserido.
| Campo | Tipo | |
|---|---|---|
| task | u8 | opcional |
| magic | u32 string hexadecimal ou número | opcional |
| { "op": "get_shellcode" } | ||
| { "op": "get_shellcode", "task": 5, "magic": "0x18181818" } |
### sleep (0x03)
Dorme pelo número de milissegundos fornecido.
| Campo | Tipo | |
|-------|------|-|
| ms | u32 | **obrigatório** |```json
{ "op": "sleep", "ms": 5000 }
Executa um comando via cmd.exe.
| Campo | Tipo | |
|---|---|---|
| command | string | required |
| { "op": "run_command", "command": "whoami /all" } |
---
### get_cwd (0x05)
Obter o diretório de trabalho atual. Sem argumentos.```json
{ "op": "get_cwd" }
Lê um arquivo e retorna seu conteúdo.
| Campo | Tipo | |
|---|---|---|
| caminho | string | obrigatório |
| { "op": "read_file", "path": "c:\users\public\data.txt" } | ||
| { "op": "read_file", "path": "%0" } |
---
### write_file (0x07)
Escreve bytes em um arquivo.
| Campo | Tipo | |
|-------|------|-|
| path | string | **obrigatório** |
| content | bytes | *opcional* (arquivo vazio se omitido) |```json
{ "op": "write_file", "path": "c:\\temp\\out.txt", "content": "hello" }
{ "op": "write_file", "path": "%0", "content": "$1" }
Exibe o código de status de uma variável (0 = sucesso, diferente de zero = erro).
| Campo | Tipo | |
|---|---|---|
| var | u16 | obrigatório |
| { "op": "check_error", "var": 0 } |
---
### conditional (0x09)
Ramificar para diferentes índices de tarefa com base no estado da variável.
| Campo | Tipo | |
|-------|------|-|
| mode | `"data"` ou `"error"` | **obrigatório** |
| var1 | u16 | **obrigatório** |
| var2 | u16 | *opcional* (comparar duas variáveis em vez de verificação única) |
| true | u16 | **obrigatório** (índice da tarefa se a condição for verdadeira) |
| false | u16 | **obrigatório** (índice da tarefa se a condição for falsa) |
`true_target` e `false_target` são aceitos como aliases para `true` e `false`.
Modos de variável única:
- `"data"` — verdadeiro se var1 tiver dados não vazios
- `"error"` — verdadeiro se o status de var1 for 0 (sucesso)