15 de abr de 2015

Transformando seu Arduino UNO em um USB Rubber Ducky























E aí galera, beleza? Esses tempos eu estava procurando alguma forma de criar um USB Rubber Ducky caseiro.

Pra quem não sabe, o USB Rubber Ducky é um "Teclado Autônomo". Basicamente, quando conectado em um computador, ele simula as ações de um teclado, digitando coisas pré definidas de forma muito veloz.

Achei algumas coisas na internet sobre como utilizar o Arduino Leonardo dessa forma. Mas eu não tenho um Arduino Leonardo que eu possa testar. Então eu continuei procurando e achei uma forma de conseguir essa mesma funcionalidade utilizando o Arduino UNO. No meu caso é a versão R3 (valeu Ronieri).


Para fazer o Arduino UNO funcionar como um HID (Human Interface Device) vamos precisar carregar um novo firmware no ATMEGA16U2. E para isso, vamos precisar do dfu-programmer. É necessário ter pelo menos a versão 0.6.1. Levando em conta que no Ubuntu e no Debian (que eu testei) a versão que o apt-get instala é uma mais antiga, vamos instalar manualmente.
Seguem os passos:

Vamos então clonar o repositório do GITHUB, instalar as libraries necessárias e instalar o dfu-programmer.

Execute os seguintes comandos como root:


apt-get install libusb-1.0-0 libusb-1.0-0-dev autoconf
git clone https://github.com/dfu-programmer/dfu-programmer
cd dfu-programmer/
./bootstrap.sh
./configure
make
make install


Depois disso, teremos o dfu-programmer instalado. Vamos utilizar ele para fazer regravar o firmware original do Arduino UNO R3 quando necessário, e para carregar o firmware de teclado utilizado no ATMEGA16U2.

Eu fiz um script para automatizar o processo de upload porque é meio chato. Então, baixe esse zip.

https://mega.co.nz/#!88pXgJyR!Eb8jcf5ejdWXqFFMR7qA8uONvPXtzpvfsFjXsFikW-c

Após extrair, dê permissão de execução no script.sh e execute-o como root.


chmod +x script.sh
./script.sh

Vou mostrar o que fazer em cada passo.


Passo 1















Depois desse ponto, conecte o Arduino no seu computador com os dois pinos mais próximos do USB conectados entre si, como na imagem seguinte (repare no jumper amarelo):




Passo 2










Nesse passo, basta remover o jumper, ficando assim:











Passo 3










Nesse passo, apenas desconecte o Arduíno do USB e conecte novamente.

Passo 4












Abra o código do Arduíno e faça upload. Nesse código, deve conter as instruções como:

-Apertar CTRL_ALT + t
-Digitar "uname -a"
-Apertar ENTER

Para criar o código, utilize o exemplo que está no zip que voce baixou.












Passo 5











Agora, sem desligar o Arduino (nem remover ele do USB), coloque o jumper novamente.













Passo 6












Agora remova o jumper novamente (sem desligar o Arduino).













Passo 7










Após isso, o script vai executar o comando que vai carregar o firmware de teclado no ATMEGA16U2. Depois desse passo, está tudo pronto. Basta retirar o cabo USB do computador, e quando você colocá-lo de novo, seu Arduíno UNO funcionará como o USB Rubber Ducky.


Agora, por último, vou falar um pouco sobre o arquivo de exemplo que está no zip.
Para digitar alguns caracteres especiais como:
/ \ | & ( ) { } [ ], etc...

eu tive que mapear esses caracteres manualmente. Algumas sequencias de teclas como CTRL + ALT + DEL, eu tive que mapear também. Então, criei algumas funções para facilitar sua vida. Vou falar sobre essas funções e como utilizá-las.



COMO UTILIZAR O CÓDIGO DE EXEMPLO?

Eu pretendo atualizar esse código de exemplo, incluindo novas funções e corrigindo possíveis bugs do código atual. Portanto, baixem a nova versão aqui:

http://pastebin.com/WY87LRf2


void STRING(char *);

Essa função simplesmente digita um texto na tela. Ela aceita os caracteres do alfabeto maiúsculos e minúsculos, números e os seguintes caracteres especiais:
& < > | \ / ; ( ) { } [ ] - = . ,

Exemplo de uso:

STRING("Acesse pythoneiro.blogspot.com");

void DELAY(unsigned t);

Apenas aguarda um tempo, em milisegundos, antes de executar a próxima instrução. Criei essa função apenas para padronizar todas as funções com letras maiúsculas.

Exemplo de uso:

DELAY(10000);
//Espera 10 segundos


void CTRL_ALT(char *c);

Pressiona as teclas CTRL + ALT e mais o caractere passado como argumento.
Imagine que você queira abrir o Terminal no Ubuntu. Você poderia fazer algo como no seguinte exemplo:

CTRL_ALT("t");


void ENTER();

Essa função apenas pressiona a tecla ENTER do teclado.

Exemplo de uso:

ENTER();


void WINDOWS(char *c);

Pressiona a tecla WINDOWS e mais o caractere passado como argumento.
Imagine que você queira abrir o menu executar no Windows. Você poderia fazer algo como no seguinte exemplo:

WINDOWS("r");


void CTRL_ALT_DEL();

Apenas pressiona as teclas CTRL + ALT + DEL.

Exemplo de uso:

CTRL_ALT_DEL();


void ALT_F2();

Pressiona as teclas ALT + F2. Utilizado no Linux para executar um aplicativo.

Exemplo de uso:

ALT_F2();


void TAB();

Apenas pressiona a tecla TAB no teclado. Utilizado para mover o cursor para o próximo campo.

Exemplo de uso:

TAB();



E por último, deixei um vídeo demonstrando ele funcionando.





Espero que vocês tenham gostado. Qualquer dúvida é só postar aqui nos comentários.




Edit:

Fontes de pesquisa:

http://www.instructables.com/id/Turn-your-Arduino-Uno-into-an-USB-HID-Mididevice/?lang=pt&ALLSTEPS

https://en.wikipedia.org/wiki/Human_interface_device

https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Duckyscript

http://wiki.sgmk-ssam.ch/index.php?title=Arduino_Uno_R3_as_HID


8 comentários:

  1. é possivel fazer com um pendrive velho ?

    ResponderExcluir
    Respostas
    1. Tem sim! olha ai: https://www.pentestingshop.com/pentesting/make-your-own-usb-rubber-ducky-using-a-normal-usb-stick/

      Excluir
  2. Cara, depois que eu troco o firmware o UNO só irá funcionar como um HID ou consigo acessar as portas logicas digitais e analógicas, ler sensores etc?

    ResponderExcluir
    Respostas
    1. Tales, pra ser sincero, não testei, mas acredito que funciona sim.

      Excluir
    2. Acredito que será possível acessar as portas do Arduíno.

      Excluir