
Mallet é um proxy de interceptação para protocolos arbitrários
Mallet é uma ferramenta para criar proxies para protocolos arbitrários, seguindo linhas semelhantes aos familiares proxies web de interceptação, apenas mais genérico.
Ele é construído sobre o framework Netty e depende fortemente do conceito de pipeline do Netty, que permite a montagem gráfica de gráficos de handlers. (Veja Capturas de Tela abaixo para um exemplo.) No mundo Netty, instâncias de handler fornecem delimitação de frame (ou seja, onde uma mensagem começa e termina), decodificação e codificação de protocolo (convertendo um fluxo de bytes em objetos Java e vice-versa, ou convertendo um fluxo de bytes em um fluxo de bytes diferente - pense em compressão e descompressão) e lógica de nível superior (realmente fazer algo com esses objetos).
Ao seguir a separação cuidadosa entre Codecs e Handlers que realmente manipulam as mensagens, o Mallet pode se beneficiar da grande biblioteca de Codecs existentes e evitar a reimplementação de muitos protocolos. A peça final do quebra-cabeça é fornecida por um Handler que copia mensagens recebidas em um pipeline para outro pipeline, encaminhando essas mensagens para seu destino final.
Claro, enquanto as mensagens estão dentro do Mallet, elas podem ser facilmente adulteradas, seja com Handlers personalizados escritos em Java ou uma linguagem de script compatível com JSR-223, ou manualmente, usando um dos editores fornecidos.
Você pode ter uma ideia dos codecs disponíveis olhando o código fonte do Netty no GitHub, sob os diretórios codec*. Ou apenas pesquisando no Google por netty e o protocolo de seu interesse. Muitas implementações interessantes de protocolos foram desenvolvidas fora do projeto principal do Netty, mas ainda devem funcionar bem com o Mallet.
O Mallet é voltado para pessoas que trabalham com aplicações em rede que não são baseadas em comunicações HTTP. Exemplos podem ser Internet das Coisas, que podem usar MQTT, COAP, etc, caixas eletrônicos e dispositivos de ponto de venda que podem usar ISO8583, ou, para ser honesto, qualquer outro protocolo.
Na verdade, o Mallet pode até ser útil para aplicações baseadas em HTTP que usam protocolos adicionais dentro do HTTP. Por exemplo, Google Protobuf sobre WebSockets, que não são bem suportados por proxies HTTP existentes como Burp, Zap, etc, ou gRPC sobre HTTP2.
O Mallet não é necessariamente apenas para revisões de segurança. Como o Mallet é construído sobre o Netty Framework, uma vez que seu pipeline tenha sido prototipado usando o Mallet, você pode migrar seu código para uma aplicação Netty pura com muito pouco esforço.
Este é um exemplo de um proxy SOCKS simples, que pode ser usado como primeiro passo ao entender o tráfego de rede que você está vendo.

Depois de ter uma ideia de como o tráfego realmente se parece, você pode começar a adicionar classes ChannelHandler apropriadas ao longo do pipeline.
O Mallet utiliza Maven, então compilar o código é uma questão de
mvn package
Para executá-lo:
cd target/
java -jar mallet-1.0-SNAPSHOT-spring-boot.jar
Há alguns gráficos de exemplo fornecidos no diretório examples/. Os gráficos JSON esperam que um cliente JSON se conecte ao Mallet em localhost:9998/tcp, com o servidor real em localhost:9999/tcp. Apenas o último gráfico JSON (json5.mxe) faz suposições sobre a estrutura das mensagens JSON sendo passadas, então eles devem ser aplicáveis a qualquer aplicativo que envie mensagens JSON.
O demo.mxe mostra um gráfico complexo, com dois pipelines, ambos TCP e UDP. O pipeline TCP é construído para suportar HTTP e HTTPS nas portas 80 e 443 respectivamente, bem como WebSockets, enquanto retransmite qualquer outro tráfego diretamente para seu destino. O pipeline UDP é construído para processar requisições DNS em localhost:1053/udp, substituir consultas por google.com por consultas por www.sensepost.com e encaminhar as requisições para os servidores DNS do Google.
Feedback e contribuições são bem-vindos. Por favor, crie issues quando apropriado, ou entre em contato com o autor no Twitter @RoganDawes.