
Um proxy MITM headless, scriptável e baseado em linha de comando, projetado para interceptação, análise e modificação de tráfego de rede em sistemas Windows.

Um proxy MITM headless, scriptável e baseado em linha de comando, projetado para interceptação, análise e modificação de tráfego de rede em sistemas Windows. Ele opera de forma semelhante a proxies GUI padrão da indústria, mas é otimizado para ambientes de automação, operação headless e integração com fluxos de trabalho de desenvolvimento.
Nota: Esta é uma ferramenta autônoma, sem dependências, implementada em Node.js.
PacketPirate é uma ferramenta de interceptação de rede em todo o sistema. Ao aproveitar as configurações de proxy HTTP do Windows, ele pode capturar tráfego de qualquer aplicativo em execução na sua máquina — incluindo navegadores web (Chrome, Edge), ferramentas CLI (curl, git) e aplicativos de desktop (Spotify, VS Code, Discord).
Interceptação Global do Sistema: Captura tráfego HTTP/HTTPS de qualquer processo que respeite o proxy do sistema.
Ciente de Processos: identifica exatamente qual aplicativo está gerando tráfego.
Mecanismo de Regras Dinâmico: Configurável via JSON para executar ações específicas em tráfego correspondente (por exemplo, extração de tokens, registro de requisições).
Registro Completo de Tráfego: Capaz de despejar corpos completos de requisições e respostas (HTML, JSON, Binário) para análise.
Arquitetura Headless: Executa inteiramente a partir da CLI, adequado para serviços em segundo plano e pipelines de teste automatizados.
Gerenciamento Personalizado de Certificados: Inclui utilitários para gerar e confiar em CAs Raiz autoassinadas para descriptografia HTTPS.
Clone o repositório e inicialize o ambiente:
# 1. Generate local SSL certificates
npm run setup
# 2. Trust the generated Root CA
npm run trust
# Note: Requires administrative approval to add the certificate to the Trusted Root Store.
Inicie o servidor proxy:
npm start
Isso inicia a interface CLI padrão.
O menu interativo fornece os seguintes controles:
code.exe).Bearer em cabeçalhos Authorization.jsonl estruturados.A lógica de interceptação é definida em config/rules.json. Este arquivo permite a configuração persistente do tratamento de tráfego.
Esquema:
{
"rules": [
{
"name": "Description of rule",
"host": "hostname.match",
"urlPattern": "regex_pattern",
"action": "log | save_token",
"outputFile": "path/to/output.txt",
"tokenFilter": "regex_filter"
}
]
}
Exemplo:
{
"rules": [
{
"name": "Test API",
"host": "jsonplaceholder.typicode.com",
"action": "save_token",
"outputFile": "test_tokens.txt"
}
]
}
A ferramenta usa uma arquitetura de servidor duplo:
CONNECT e realiza a filtragem de host.EADDRINUSE e incrementa o número da porta até encontrar uma porta livre.SIGINT/SIGTERM para garantir que as configurações de proxy sejam revertidas na saída, prevenindo problemas de conectividade de rede.A ferramenta depende de um modelo de certificado duplo para interceptação HTTPS:
npm run setup cria uma CA Raiz autoassinada (PacketPirateRoot).
New-SelfSignedCertificate do PowerShell para gerar um par de chaves válido por 5 anos.src/certs/server.pfx (formato PKCS#12) com a senha "headless".npm run trust injeta essa CA Raiz no repositório CurrentUser\Root do Windows.
CurrentUser em vez de LocalMachine, limitamos o raio de confiança ao seu perfil de usuário específico, reduzindo o risco em todo o sistema.security.enterprise_roots.enabled) para respeitar o repositório de confiança do Windows.npm run untrust fornece uma desmontagem limpa.
FriendlyName exclusivo ("PacketPirateRoot"), garantindo que nunca toquemos em outros certificados do usuário.Este projeto é um exemplo prático de Programação de Sistema usando Node.js. Ele vai além dos servidores web típicos para interagir com o Sistema Operacional e a Pilha de Rede em um nível mais baixo.
participant App as Application (VS Code)
participant OS as Windows OS
participant Proxy as Proxy Server
participant MITM as MITM Server
participant Web as Internet
Note over App,Proxy: 1. Plain HTTP Tunneling
App->>Proxy: CONNECT google.com:443
Proxy-->>App: 200 Connection Established
Note over Proxy,MITM: 2. The "Hand-Off" Trick
Proxy->>MITM: Pipe socket data (raw encrypted bytes)
Note over App,MITM: 3. TLS Handshake and Decryption
MITM-->>App: ServerHello (signed by local root CA)
App->>MITM: Encrypted request (GET /)
Note over MITM: 4. Interception Logic
MITM->>MITM: Decrypt → Inspect headers → Log
Note over MITM,Web: 5. Upstream Forwarding
MITM->>Web: New HTTPS request (GET /)
Web-->>MITM: Response
MITM-->>App: Response

O módulo http padrão do Node.js não consegue lidar facilmente com o método CONNECT (usado para túneis HTTPS) e tráfego HTTPS normal na mesma instância de servidor.
CONNECT. Atua como um pipe TCP simples.netstat)Como sabemos qual aplicativo está enviando tráfego? Os próprios pacotes TCP não têm um adesivo de "ID do Processo".
netstat -ano para descobrir qual PID é dono da porta 54321.Usamos Streams do Node.js para lidar com dados de forma eficiente. Em vez de esperar a resposta completa de 10MB ser baixada antes de mostrá-la, nós "bifurcamos" o fluxo:
PassThrough, permitindo monitoramento em tempo real com latência adicional mínima.GNU GPL v3.0