Executando verificação de segurança...
1

Wasabi v2.3.4-beta: Alta performance com Assembly nativo, estabilidade em TLS e o início da era modular no VBA

Há poucos dias compartilhei o início do projeto Wasabi, um cliente WebSocket e TCP nativo para VBA com zero dependências. Hoje trago uma atualização que representa um salto técnico considerável. Alcançamos a marca de 20 estrelas no GitHub, o que é um marco gratificante para um projeto focado em um nicho tão específico. Esse apoio me motivou a implementar mudanças profundas na arquitetura do motor de rede.

Abaixo, detalho as novidades da versão v2.3.4-beta.

1. Motor de Alta Performance em Assembly (Wasabi ASM)

O VBA, por ser uma linguagem interpretada, apresenta gargalos severos ao processar arrays de bytes gigantescos de forma sequencial. Para contornar essa limitação, o Wasabi agora utiliza uma engine de Assembly microscópica. O módulo aloca memória executável via API do Windows e injeta código de máquina nativo (x86 e x64) diretamente no processador. Isso permite que operações pesadas de rede rodem com throughput de linguagem C.

  • ws_mask (Assembly): Toda a lógica de máscara XOR do protocolo WebSocket foi reescrita em Assembly. Mensagens de vários megabytes que antes sofriam com o overhead dos loops do VBA agora são processadas em microssegundos. Isso também resolveu definitivamente problemas de validação de frames (Error 4002) em gateways rigorosos como o do Discord.
  • mem_find (Assembly): Um buscador ultra otimizado que utiliza a instrução de hardware repe cmpsb. Ele permite varrer buffers TCP massivos em busca de delimitadores quase instantaneamente, sem travar a thread de interface do Office durante grandes transferências de dados.
  • mem_zero (Assembly): Implementação de limpeza de memória via instrução rep stosb. No encerramento de uma conexão, todos os buffers sensíveis e credenciais são apagados fisicamente da RAM de forma imediata, elevando o padrão de segurança contra vazamento de dados.
  • Entropia Nativa do Kernel: Substituí as APIs de criptografia legadas pelo RtlGenRandom (SystemFunction036). Agora os bytes aleatórios para as chaves de máscara são buscados diretamente do Kernel do Windows com latência mínima.

2. TLS Blindado e Tratamento de Desconexões Graciosas

Um dos maiores desafios em conexões de longa duração, como bots de Discord ou dashboards MQTT, é lidar com o encerramento da sessão por parte do servidor. Em versões anteriores, quando o servidor enviava um alerta de encerramento amigável, o motor Schannel retornava o código SEC_I_CONTEXT_EXPIRED.

O Wasabi identificava isso incorretamente como um erro fatal de descriptografia (ERR 15), o que gerava tentativas de gravação em sockets mortos e crashes locais (ERR 10). Na v2.3.4-beta, esse fluxo foi blindado. O módulo agora intercepta o encerramento gracioso, fecha o estado interno de forma limpa e delega a reconexão silenciosa ao motor de AutoReconnect.

3. O Futuro: A Era dos Frameworks (Middlewares e Extensões)

Este é o início da transição de um script monolítico para um ecossistema modular. Estou estruturando o Wasabi para que o núcleo seja apenas um "Dumb Pipe" focado em Sockets e Schannel.

O planejamento, que já está detalhado no repositório, visa permitir que a comunidade plugue módulos externos para diferentes propósitos:

  • Protocolos de alto nível como Socket.IO ou MQTT 5.0.
  • Middlewares de segurança para injeção autônoma de headers OAuth, tokens JWT ou criptografia ponta a ponta (AES).
  • Desacoplamento da compressão Zlib para uma extensão opcional.

4. Exemplo Prático: Conexão de Baixa Latência com Discord

Combinando o novo motor em Assembly com a desativação do algoritmo de Nagle (NoDelay), conseguimos atingir o limite físico da rota de rede. Segue um exemplo de como implementar uma conexão resiliente:

Dim h As Long

' Ativa compressão Zlib para reduzir tráfego de payloads grandes
Wasabi.WebSocketSetDeflate True, True, h

' Desativa o algoritmo de Nagle para entrega imediata de pacotes
Wasabi.WebSocketSetNoDelay True, h

' Configura reconexão automática (5 tentativas, 1000ms de intervalo base)
Wasabi.WebSocketSetAutoReconnect True, 5, 1000, h

' Conecta ao Gateway do Discord com transporte comprimido
If Wasabi.WebSocketConnect("wss://gateway.discord.gg/?v=10&encoding=json&compress=zlib-stream", h) Then
    
    Debug.Print "Conectado. Latência de rede: " & Wasabi.WebSocketGetLatency(h) & "ms"
    
    Do While Wasabi.WebSocketIsConnected(h)
        Dim msg As String
        msg = Wasabi.WebSocketReceive(h)
        
        If Len(msg) > 0 Then
            Debug.Print "Evento recebido: " & Left(msg, 100)
        End If
        
        DoEvents
    Loop
    
End If

Com essas melhorias, o tempo de CPU do seu projeto pode ser dedicado inteiramente à lógica de negócio, enquanto o Wasabi gerencia a complexidade do protocolo em baixo nível.

Links para consulta:

Agradeço a todos que estão acompanhando e contribuindo com feedbacks. Estou à disposição para dúvidas técnicas sobre a implementação dos thunks em Assembly ou sobre o uso do motor TLS no VBA.

Carregando publicação patrocinada...