O AuthDuck é um dispositivo de segurança e conveniência inspirado na técnica de Rubber Duck Debugging, mas com uma função prática: ser um keystroke injector (injetor de teclas) seguro e configurável.
Construído em torno de uma Raspberry Pi Pico, o AuthDuck armazena múltiplas credenciais de acesso de forma local e as digita automaticamente em um computador host, simulando um teclado, ao pressionar de um botão.
O sistema de LEDs codificados por cores (RGB) atua como um seletor visual, permitindo ao usuário saber qual senha será digitada antes da ação.
- "Auth" (Authentication): Por gerenciar e digitar credenciais de acesso.
- "Duck": Pela técnica utilizada para o desenvolvimento do projeto.
| Recurso | Detalhe |
|---|---|
| Microcontrolador | Raspberry Pi Pico |
| Firmware | C/C++ SDK (para Raspberry Pi Pico) |
| Interface | USB (para simulação de teclado - HID) |
| Armazenamento | Configuração via arquivo .json na memória |
| Indicação Visual | LED RGB para indicar a senha ativa. |
| Interação | Botão(ões) de acionamento para "digitar" a senha. |
- O AuthDuck é conectado via USB (emula um teclado HID).
- Um LED RGB exibe a cor associada à senha ativa (ex: 🟢 VERDE = Senha do GitHub).
- O usuário pressiona o Botão de Ação.
- O AuthDuck "digita" a sequência de teclas configurada (usuário, tecla Tab/Enter, e senha) na máquina.
Este projeto combina desenvolvimento de firmware de baixo nível com técnicas de simulação de periféricos:
- SDK (Software Development Kit) C/C++ do Raspberry Pi Pico: Utilizado para desenvolver o firmware otimizado que opera diretamente no microcontrolador RP2040.
- USB-HID (Human Interface Device) Simulation: A técnica central do projeto, onde a Pico é programada para se apresentar ao computador host como um teclado USB padrão, permitindo que ela digite as credenciais.
- JSON Parsing: Uso de uma biblioteca C/C++ para ler e interpretar o arquivo
passwords.jsonarmazenado na memória flash, permitindo a configuração flexível das senhas, usuários e cores de LED. - Controle de LED RGB: Implementação do WS2812B para garantir que a cor do LED corresponda exatamente ao perfil de senha ativo.
A configuração das senhas e suas cores de LED associadas é feita através de um arquivo .json que deve ser incluído na memória flash da Raspberry Pi Pico durante o processo de gravação do firmware.
[
{
"nome": "github",
"usuario": "meu_usuario_github",
"senha": "minha_senha_super_secreta_123",
"cor_led": [0, 255, 0]
},
{
"nome": "email_trabalho",
"usuario": "[email protected]",
"senha": "senha_do_email_456",
"cor_led": [255, 0, 0]
}
]Pré-requisitos
- Raspberry Pi Pico
- Cabo Micro USB (com capacidade de dados)
- Botão de Ação (e possivelmente um botão de seleção)
- LED RGB
- Ambiente de Desenvolvimento C/C++ (Configurado para o SDK do Pico)
- Crie o seu arquivo
passwords.jsonseguindo o formato de exemplo acima, com todas as suas credenciais.
- Certifique-se de que o seu projeto C/C++ está configurado para incluir o
passwords.jsonna flash memory. - Compile o projeto, gerando o arquivo
.uf2. - Pressione o botão BOOTSEL da Pico, conecte-o ao PC, e solte o botão.
- Arraste e solte o arquivo
.uf2para a unidade de discoRPI-RP2que apareceu.
- Conecte o AuthDuck ao computador.
- Verifique a cor do LED. Use o botão de seleção (se implementado) para alternar até a cor correta aparecer.
- Clique no campo de login e pressione o Botão de Ação para o AuthDuck digitar a credencial completa.
Aqui estão as tarefas e recursos planejados para o desenvolvimento futuro do AuthDuck:
- Implementar a lógica de leitura do arquivo
passwords.jsona partir da memória flash. - Configurar a )alternância de perfis) de senha via um segundo botão ou lógica de clique (simples/duplo).
- Adicionar suporte para )criptografia AES) no arquivo
passwords.jsonpara maior segurança. - Desenvolver um case (caixa/estrutura) )impresso em 3D) para o hardware.
- Criar um )guia detalhado de build) (montagem) do hardware.
- Criar testes unitário para o Software
Kakasten |
|---|
Contribuições são muito bem-vindas! Se você tiver sugestões para segurança, otimização de código C++, ou novos recursos, por favor, abra uma Issue ou envie um Pull Request.