RubberDuck o que é, e como fazer um com o seu Arduino Leonardo (ou com esp32, RP Pico e etc)
Tags: arduino, hardware, hacking, beginners
Published: 2024-04-25 03:00:00

Como sempre peguei um hiato grande nos posts do blog, mas estamos de volta e hoje vamos falar de uma ferramenta que os hackermans adoram e que é extremamente fácil e útil de fazer, o famoso RubberDuck.

Mas antes...

## Um Disclaimer

Antes de começar a falar sobre o RubberDuck, é importante dizer que este post é puramente informativo, você pode usar as informações aqui contidas para fins educacionais, de segurança ou para facilitar o seu dia a dia, mas não me responsabilizo por qualquer uso indevido das informações aqui existentes.

## O que é um RubberDuck?

O RubberDuck é um dispositivo que é feito para parecer muito com um pendrive comum, mas que pode emular um teclado ou mouse e executar diferentes comandos no momento em que é conectado a um hardware.

Ele é muito utilizado para automação de tarefas, testes de segurança e até mesmo para ataques de acessos físicos ou engenharia social.

Sim o RubberDuck é uma metonímia, que é uma palavra difícil para dizer que uma marca ficou tão grande que o nome do produto virou sinônimo do produto em si, como é o caso da Gillette, Bombril e Xerox.
O nome de dispositivos que fazem o que o RubberDuck faz de maneira genérica são BadUSBs ou keystroke injectiors.

## Como fazer o seu RubberDuck (ou BadUSB)?

Para fazer o seu RubberDuck você vai precisar de um microcontrolador que possa emular um teclado e a parte legal é que quase todos os microcontroladores modernos podem fazer isso, como o ESP32, Raspberry Pi Pico, ATmega32u4 (que é o micro controlador do Arduino Leonardo, Micro e Pro Micro), attiny85 (que é o microcontrolador do Digispark) e muitos outros.

Aqui vou usar a Arduino IDE para programar um Arduino Leonardo.

Abrindo a Arduino IDE, vamos apertar 'ctrl + shif + i' para abrir o gerenciador de bibliotecas e vamos instalar a biblioteca "Keyboard" que é a biblioteca que vamos usar para emular o teclado.

Feito isso vamos para o código, que é bem simples:

```cpp

#include "Keyboard.h"

void setup() {
  Keyboard.begin();
}

void loop() {
    delay(1000);

    // Pressiona a tecla do Windows
    Keyboard.press(KEY_LEFT_GUI); // ou Keyboard.press(KEY_RIGHT_GUI); dependendo do teclado
    delay(100);
    // Solta a tecla do Windows
    Keyboard.release(KEY_LEFT_GUI); // ou Keyboard.release(KEY_RIGHT_GUI); dependendo do teclado

    delay(1000);

    Keyboard.print("Hyper");

    delay(1500);

    // Pressiona a tecla Control e 1
    Keyboard.press(KEY_LEFT_CTRL);
    Keyboard.press(49);
    delay(100);
    // SOlta as teclas Control e 1
    Keyboard.releaseAll();

    delay(2000);

    Keyboard.println("cowsay Hack_The_Planet");

    delay(200000);
}
```

Esse código faz o seguinte:
1. Pressiona a tecla do Windows
2. Digita "Hyper"
3. Pressiona a tecla Control e 1
4. Digita "cowsay Hack_The_Planet"


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ywiyluk8obpjz076fl59.png)

Lógico que você pode fazer muito mais do que isso, mas esse é um exemplo simples de como você pode fazer um RubberDuck.

E como eu disse antes, você pode usar qualquer microcontrolador que possa emular um teclado, então você pode fazer um RubberDuck com um ESP32, Raspberry Pi Pico, Digispark, etc.

## Isso é tudo pessoal

Eu sei, esse foi um post pequeno, mas eu precisava sair do hiato de alguma forma e achei que esse post seria uma forma legal de fazer isso.

Logo eu volto aqui com mais posts e mais projetos, então fiquem ligados.

Até a próxima.