Extensão Chrome (Manifest V3) que injeta cookies via chrome.cookies API em
qualquer domínio. Você cola as linhas de cookies copiadas direto da aba
Application → Cookies do DevTools e a extensão pré-visualiza ou injeta os cookies.
Cookies de sessão são credenciais de autenticação. Qualquer pessoa com esses
valores pode acessar a conta correspondente. Nunca faça commit de cookies reais
neste repositório (público) nem os compartilhe. O arquivo cookies.json aqui contém
apenas valores de exemplo (placeholders).
manifest.json— definição da extensão (MV3); permitehttp://*/*ehttps://*/*.popup.html/popup.js— interface: cola, pré-visualiza e injeta cookies.cookies.json— exemplo de formato (somente placeholders).
Como a extensão não está na Chrome Web Store, ela é carregada em modo de desenvolvedor (a partir do código-fonte):
- Clone ou baixe este repositório para uma pasta local.
git clone https://github.com/luancamara/cookie-injector.git
- Abra o Chrome e acesse
chrome://extensions(digite na barra de endereço). - Ative o Modo do desenvolvedor (interruptor no canto superior direito).
- Clique em Carregar sem compactação (Load unpacked).
- Selecione a pasta do repositório (a que contém o
manifest.json). - A extensão Cookie Injector aparecerá na lista. Fixe-a na barra de ferramentas clicando no ícone de quebra-cabeça 🧩 → alfinete 📌.
Ao instalar, o Chrome exibirá o aviso "Ler e alterar todos os seus dados em todos os sites" — isso é esperado, pois o injetor precisa acessar cookies de qualquer domínio.
Os cookies são copiados direto do DevTools do navegador onde a sessão já está ativa:
-
Abra o site do qual você quer copiar os cookies (ex.: já logado na conta).
-
Abra o Developer Tools:
- Windows/Linux:
F12ouCtrl + Shift + I - macOS:
Cmd + Option + I - Ou: clique direito na página → Inspecionar.
- Windows/Linux:
-
Vá até a aba Application (em telas menores pode estar no menu
»). -
No painel esquerdo, expanda Storage → Cookies e selecione o domínio desejado. A tabela de cookies aparece à direita.
-
Clique em qualquer célula da tabela para focar nela, depois:
Ctrl + A(Cmd + Ano macOS) para selecionar todas as linhas.Ctrl + C(Cmd + Cno macOS) para copiar.
Isso copia todas as colunas (Name, Value, Domain, Path, Expires, Size, HttpOnly, Secure, SameSite…) separadas por TAB — exatamente o formato que a extensão espera.
- No navegador de destino (com a extensão instalada), abra a extensão Cookie Injector clicando no seu ícone.
- Cole (
Ctrl + V/Cmd + V) o conteúdo copiado na caixa de texto. - Clique em:
- Só pré-visualizar — para conferir quais cookies foram reconhecidos antes de gravar nada.
- Injetar agora — para gravar os cookies via
chrome.cookiesAPI. O log mostra ✓ para cada sucesso e ✗ para falhas.
- Recarregue o site de destino — a sessão deve estar ativa.
⚠️ Cookies de sessão são credenciais. Copie/injete apenas cookies de contas que são suas e em máquinas confiáveis.
Se a VDI permitir a extensão ObservePoint Debugger
(daejfbkjipkgidckemjjafiomfeabemo), ela pode servir como exportadora:
- Na VDI, abra o DevTools (
F12) → aba ObservePoint → seção Cookies. - Atualize a lista e use Export cookies to Excel. A extensão gera
Cookies.xlsxcom valores e atributos, inclusiveHttpOnly. - Transfira o arquivo para a máquina de destino.
- No Cookie Injector, clique em Importar Cookies.xlsx, selecione o arquivo, confira a pré-visualização e use Injetar agora.
O arquivo é processado localmente e apenas em memória: a extensão lê somente o ZIP/XML necessário para a aba Cookies, não executa fórmulas, macros nem links externos e não envia o arquivo a nenhum servidor. O limite é 5 MB. Como alternativa, ainda é possível abrir a planilha, copiar a tabela inteira e colá-la no Cookie Injector.
O frontend estático em Vercel permite selecionar o Cookies.xlsx e informar o mesmo
código exibido em Parear / ver segredo. A planilha é lida localmente, convertida
para o protocolo do transplante e cifrada no navegador antes de seguir diretamente
por POST HTTPS para uma Function na Vercel. A Function abre a conexão com o relay e
encaminha somente roomId e o envelope já cifrado; ela não recebe o Excel, o código
de pareamento nem cookies em claro. Não existe banco ou armazenamento desses dados.
O horário usado no envelope vem da Function, evitando rejeição quando o relógio da
VDI está incorreto. Após o envio, a tela informa se havia um destino conectado ou se
o ciphertext ficou temporariamente armazenado para entrega posterior.
Todas as extensões conectadas com o mesmo código recebem e injetam o pacote. O código é uma senha-mestra: não o compartilhe, não o salve no navegador e rotacione-o se houver qualquer exposição. Para gerar o site estático localmente:
npm run build:webO conteúdo copiado não é persistido pelo Cookie Injector. Não envie essa planilha por
e-mail, Drive, chat ou outro serviço: ela contém credenciais de sessão em texto claro.
Cookies particionados preservam Partition Key e Cross Site em Chrome 130 ou mais
novo; linhas com chave de partição inválida são ignoradas com aviso. Depois de validar
o transplante, apague o Cookies.xlsx da VDI e limpe a área de transferência dos dois
ambientes.
Veja o caminho efetivo em chrome://version, no campo Profile Path. No caminho
padrão, os cookies ficam em:
%LOCALAPPDATA%\Google\Chrome\User Data\Default\Network\Cookies
Outros perfis usam Profile 1, Profile 2 etc. no lugar de Default; abas/janelas
ficam em Sessions\, local storage em Local Storage\leveldb\, session storage em
Session Storage\ e IndexedDB em IndexedDB\.
Copiar esses arquivos da VDI para o Mac não é um transplante confiável: o banco de cookies é SQLite e os valores são protegidos por credenciais/chaves do Windows (DPAPI e, em versões atuais, proteções vinculadas ao aplicativo). O caminho suportável é exportar os valores pelo navegador de origem e recriá-los pela API de cookies.
Além do fluxo manual acima, a extensão transplanta todas as sessões do perfil de uma máquina sua para outra automaticamente: você dispara na origem e a máquina de destino (com a mesma extensão e o mesmo segredo) recebe e injeta sozinha, sem nenhum clique. Isso cobre justamente o que o Chrome Sync não sincroniza (cookies).
- Um relay (Cloudflare Worker + Durable Object) fica no meio só para repassar bytes.
- O conteúdo trafega criptografado de ponta a ponta (AES-GCM); a chave é derivada (HKDF) de um segredo compartilhado que vive só nas suas máquinas. O relay nunca vê seus cookies.
- A origem sempre inicia o envio. O destino mantém um WebSocket vivo no service worker, recebe o pacote, decifra e injeta, e mostra uma notificação.
- Se o destino estava offline, o relay guarda o último pacote por ~2 min (TTL) e entrega assim que ele reconectar.
- Na máquina A, abra a extensão → Parear / ver segredo. Um segredo é gerado.
- Copie esse segredo e cole na máquina B (mesmo botão → campo "entrar no mesmo canal") → Usar este segredo. Repita nas demais máquinas suas.
- Pronto: todas no mesmo canal privado. Para trocar o segredo depois, use Rotacionar segredo (e repareie as outras máquinas).
Na origem, clique Transplantar sessões. Em segundos a(s) outra(s) máquina(s) recebem e injetam; uma notificação confirma quantas sessões entraram. Recarregue um site logado no destino para conferir.
O relay já está no ar em wss://cookie-injector-relay.luancamara.workers.dev
(Worker + Durable Object SQLite, plano gratuito) e a extensão já aponta para ele em
src/constants.js. Não é preciso fazer mais nada para usar.
Para republicar após mudar o código do relay:
cd relay
npm install
npx wrangler deploy # requer `npx wrangler login` uma vezPara apontar para outro relay sem editar o código, defina um override em
chrome.storage.local na chave relayUrl.
O segredo é uma senha-mestra: quem o tiver acessa todas as suas sessões. Trate como senha — não versione, não compartilhe. O transplante foi desenhado para as suas próprias máquinas; enviar para terceiros equivale a compartilhar login.
npm install # vitest
npm test # roda os módulos puros (crypto, protocolo, injeção, relay-core...)