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
punchline — Mensageiro criptografado peer-to-peer em Rust com Noise IK e UDP NAT hole punching | Kitploit
Ferramentas/GitHubGitHub/michal-pielka/punchline
Ferramentas de Criptografia/DescriptografiaSegurança de RedePrivacidadeUtilitários e FrameworksAutenticação
GitHubmichal-pielka/punchline

punchline

Mensageiro criptografado peer-to-peer em Rust com Noise IK e UDP NAT hole punching

Ver Repositório
192há 4 mesesAinda não revisado

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

punchline

Chat ponto a ponto criptografado de ponta a ponta via UDP. Sem contas, sem servidor central retransmitindo/armazenando mensagens, sem intermediário. Apenas dois pares, uma conexão direta e criptografia pelo protocolo Noise.

https://github.com/user-attachments/assets/939e96d3-45e3-4484-9a27-28c3a0457b05

Índice

  • O que faz
  • Início rápido
  • Como funciona
  • Referência da CLI
  • Uso
    • Configuração
    • Gerenciando Pares
    • Verificação de Status
    • Opções do Servidor
    • Temas
    • Completudes do Shell
  • Criptografia
    • Handshake IK
    • Determinação do Iniciador
    • Armazenamento de Chaves
  • Protocolo de Rede
    • Protocolo de Furação de NAT
    • Protocolo de Transporte
    • Protocolo de Sinalização
    • Protocolo STUN
  • Estrutura do Projeto
  • Instalação
    • Pelo crates.io
    • Compilando a partir do código-fonte
  • Executando Testes
  • Pilha de Tecnologias
  • Licença

O que faz

Duas pessoas executam punchline connect <peer> em suas máquinas. O Punchline atravessa seus NATs, realiza um handshake criptografado e os coloca em um chat privado – tudo em alguns milissegundos. Os servidores STUN e de sinalização incluídos cuidam da descoberta e depois saem do caminho. conversa


Início rápido

root@kitploit:~
cargo build --release

Inicie os servidores (em uma máquina que ambos os pares possam acessar) ou use os meus públicos hospedados em 64.225.107.28 (STUN: porta 3478, sinalização: porta 8743):

root@kitploit:~
punchline-stund                  # Servidor STUN - informa aos pares seu IP público
punchline-signald                # Servidor de sinalização - combina pares que querem conversar
servidores

Em cada máquina dos pares:

root@kitploit:~
# Gere sua identidade (par de chaves X25519)
punchline keygen

# Compartilhe sua chave pública com seu par
punchline pubkey

# Salve a chave dele
punchline peers add alice a1b2c3d4...64_hex_chars

# Conecte-se (ambos os pares executam isso, direcionando um ao outro)
punchline connect alice --stun <servidor>:3478 --signal <servidor>:8743

A TUI é iniciada com uma visualização do progresso da conexão ao vivo:

  1. Descoberta STUN - resolvendo seu endereço externo via punchline-stund

  2. Servidor de sinalização - conectando ao punchline-signald

  3. Aguardando o par - o servidor de sinalização combina ambos os pares

  4. Furação de NAT - estabelecendo o caminho UDP direto

  5. Handshake Noise - troca de chaves criptografada

    painel

Quando concluído, você está no chat. Digite e pressione Enter. Pressione Esc para sair.


Como funciona

Todo o sistema consiste em três binários, todos incluídos neste repositório:

BinárioFunçãoQuando usado

Após a configuração inicial, os servidores STUN e de sinalização não são mais contatados. Tudo flui diretamente entre pares.


Referência da CLI

punchline

Bandeiras globais:

BandeiraDescrição
-vAumenta a verbosidade do log (-v = debug, -vv = trace).
-q, --quietSuprime toda a saída de log.

punchline-stund

punchline-signald


Uso

Configuração

Em vez de passar --stun e --signal toda vez, crie ~/.config/punchline/config.toml:

root@kitploit:~
stun_server = "203.0.113.10:3478"
signal_server = "203.0.113.10:8743"

Gerenciando Pares

root@kitploit:~
punchline peers                              # listar todos
punchline peers add alice a1b2c3d4...        # adicionar
punchline peers remove alice                 # remover

Os apelidos são armazenados em ~/.punchline/known_peers.toml. Você também pode conectar diretamente com uma chave hex bruta de 64 caracteres.

Verificação de Status

root@kitploit:~
punchline status

Mostra sua identidade, configuração, alcançabilidade do servidor (envia uma sonda STUN real e conexão TCP) e número de pares.

Opções do Servidor

Ambos os servidores suportam -v (debug), -vv (trace), -q (silencioso), --address e --port:

root@kitploit:~
punchline-stund -v --port 3478
punchline-signald -v --port 8743

Temas

Personalize a TUI via ~/.config/punchline/style.toml Estilos usados no vídeo:

root@kitploit:~
[colors]
my_text = "#ebdbb2"
peer_text = "#bdae93"
input_text = "#ebdbb2"
border = "#ebdbb2"
sidebar_key = "#ebdbb2"
sidebar_value = "#bdae93"

[padding]
chat_horizontal = 2
chat_vertical = 1

Todas as cores são RGB hex. Se o arquivo estiver ausente, as cores padrão do terminal são usadas.

Completudes do Shell

root@kitploit:~
punchline completions bash > ~/.local/share/bash-completion/completions/punchline
punchline completions zsh > ~/.zfunc/_punchline
punchline completions fish > ~/.config/fish/completions/punchline.fish

Criptografia

Nome completo do protocolo: Noise_IK_25519_ChaChaPoly_SHA256

ComponenteFunção

Handshake IK

O padrão IK significa que o iniciador conhece a chave pública estática do respondedor antes do handshake começar. Ambos os pares já possuem as chaves um do outro (trocadas fora da banda ou via registro de pares), portanto nenhuma confiança no primeiro uso é necessária.

  1. Iniciador -> Respondedor: Envia uma mensagem criptografada contendo sua chave pública estática, criptografada sob a chave conhecida do respondedor. Oferece ocultação de identidade contra observadores passivos.
  2. Respondedor -> Iniciador: Decripta, verifica e responde. Ambos os lados transitam para o modo de transporte com chaves de sessão compartilhadas.

Determinação do Iniciador

O Punchline determina deterministicamente o iniciador comparando os primeiros 8 bytes da chave pública de cada par como um u64 big-endian. O par com o menor valor se torna o iniciador. Ambos os lados calculam isso independentemente.

Armazenamento de Chaves

A identidade é uma chave secreta X25519 de 32 bytes em ~/.punchline/id_x25519 com permissões Unix 0600. A chave pública é derivada na carga. A geração de chaves usa x25519-dalek com OsRng.


Protocolo de Rede

O primeiro byte de cada pacote UDP identifica seu tipo:

Protocolo de Furação de NAT

Ambos os pares executam o mesmo algoritmo simultaneamente:

  1. Envie PROBE (0x00) a cada 200ms para o endereço externo do par.
  2. Ao receber um PROBE, alterne para enviar ACK (0x01).
  3. Ao receber um ACK, envie um ACK final e declare sucesso.
  4. Timeout de segurança: 2 segundos enviando ACKs sem resposta assume que o par terminou.

Protocolo de Transporte

Mensagens (0x02) carregam payloads UTF-8 criptografados com Noise. Keepalives (0x03) são payloads vazios criptografados enviados a cada 10 segundos para manter a sincronização do nonce da cifra. 30 segundos sem nenhum pacote aciona desconexão.

Protocolo de Sinalização

JSON sobre WebSocket:

root@kitploit:~
// PairRequest (cliente -> servidor)
{ "external_addr": "203.0.113.5:48291", "public_key": "a1b2...", "target_public_key": "d4e5..." }

// PairResponse (servidor -> cliente)
{ "target_external_addr": "198.51.100.7:51003", "target_public_key": "d4e5..." }

Protocolo STUN

Segue RFC 5389 (simplificado): requisição/resposta de binding com XOR-MAPPED-ADDRESS. Apenas IPv4.


Estrutura do Projeto

Workspace Cargo com quatro crates:

root@kitploit:~
crates/
├── proto/      # Biblioteca compartilhada: criptografia, tipos STUN e sinalização, trait de transporte
├── client/     # Cliente P2P: CLI, TUI, lógica de conexão, gerenciamento de pares
├── signald/    # Servidor de sinalização: combinação de pares via WebSocket
└── stund/      # Servidor STUN: descoberta de endereço externo

Instalação

Pelo crates.io

root@kitploit:~
cargo install punchline           # Cliente TUI
cargo install punchline-signald   # Servidor de sinalização
cargo install punchline-stund     # Servidor STUN

Compilando a partir do código-fonte

Pré-requisitos: Edição Rust 2024 (rustc 1.85+)

root@kitploit:~
git clone https://github.com/michal-pielka/punchline.git
cd punchline
cargo build --release

Os binários são colocados em target/release/:

  • punchline
  • punchline-signald
  • punchline-stund

Executando Testes

root@kitploit:~
cargo test

Os testes cobrem operações criptográficas, codificação/decodificação STUN, serialização do protocolo de sinalização, análise de configuração, gerenciamento de pares, temas de estilo e o handshake Noise IK.


Pilha de Tecnologias


Licença

MIT - veja LICENSE.

Baixar ferramenta
punchline-stundServidor STUN (UDP) - responde com o IP:porta externo do clienteApenas durante a configuração
punchline-signaldServidor de sinalização (WebSocket) - combina pares e troca endereçosApenas durante a configuração
punchlineO próprio mensageiro - CLI, TUI, criptografia, furação de NATSempre
ComandoDescrição
keygen [--force] [-i caminho]Gera um novo par de chaves de identidade X25519. Use --force para sobrescrever sem confirmação. Use -i para especificar o caminho de saída.
pubkey [-i caminho]Imprime sua chave pública (64 caracteres hexadecimais). Use -i para derivar de um arquivo de chave específico.
connect <par> [-i caminho] [--stun endereço] [--signal endereço]Conecta-se a um par por apelido ou chave hex bruta. Use -i para especificar a chave de identidade. Inicia a TUI.
peersLista todos os pares conhecidos.
peers add <nome> <chave>Salva a chave pública de um par sob um apelido.
peers remove <nome>Remove um par pelo apelido.
config pathExibe o caminho do arquivo de configuração.
config showMostra os valores atuais da configuração.
statusMostra identidade, configuração, alcançabilidade do servidor e número de pares.
completions <shell>Gera completudes para o shell (bash, zsh ou fish).
BandeiraDescrição
--address <endereço>Endereço de escuta (padrão: 0.0.0.0).
--port <porta>Porta de escuta (padrão: 3478).
-v / -vvLog debug / trace.
-qModo silencioso.
BandeiraDescrição
--address <endereço>Endereço de escuta (padrão: 0.0.0.0).
--port <porta>Porta de escuta (padrão: 8743).
-v / -vvLog debug / trace.
-qModo silencioso.
Noise IK
Padrão de handshake - o iniciador conhece a chave pública do respondedor. Completa em 2 mensagens.
X25519Troca de chaves Diffie-Hellman de curva elíptica (RFC 7748). Segurança de 128 bits, tempo constante.
ChaCha20-Poly1305Cifra AEAD para criptografia de mensagens (RFC 8439). A mesma cifra usada no TLS 1.3 e WireGuard.
SHA-256Usado internamente pelo Noise para derivação de chaves e hashing do handshake.
PrefixoTipoFaseDescrição
0x00PROBEFuração de NATEnviado a cada 200ms para abrir pinhole NAT
0x01ACKFuração de NATConfirma recebimento de um PROBE
(nenhum)HandshakeHandshakePayload de handshake criptografado em bruto
0x02MensagemTransporteMensagem de chat criptografada
0x03KeepaliveTransportePayload vazio criptografado (batimento cardíaco)
CratePropósito
snowFramework do protocolo Noise (handshake + criptografia de transporte)
x25519-dalekGeração e derivação de chaves X25519
ratatuiFramework de interface de usuário no terminal
crosstermManipulação de eventos do terminal
clapAnálise de argumentos CLI + completudes para shell
tungsteniteCliente/servidor WebSocket
tracingLog estruturado