ATmega32u4 mit USB-HUD Funktion an Panzerkette

In diesem Beitrag möchte ich dir ein nettes Gadget vorstellen, es ist ein kleines ATmega32u4 Board mit 70mAh Akku (LIR2032H) und USB-HUD Funkion.

ATmega32u4 Board mit USB-HUD Funktion unter Windows
ATmega32u4 Board mit USB-HUD Funktion unter Windows

Das Board habe ich mir selber gekauft, da ich dieses hier jedoch vorstelle und dir Links zu Shops gebe, wo du dieses bei gefallen erwerben kannst, möchte ich diesen Beitrag trotzdem als „Werbung“ kennzeichnen.

Bezug des Atmega32u4 an Panzerkette

Dieses kleine Board habe ich über amazon.de für knapp 30 € inkl. Versandkosten erstanden.

Da ich Amazon-Prime Kunde bin, hat in diesem Fall die Lieferung nur knapp 24h gedauert und war damit recht schnell bei mir.

Das Board findest du aber auch im offiziellen Shop von dstike unter Cyber A Necklace jedoch zu einem deutlich höheren Preis von 39 $ (ca. 33,57 €) zzgl. Versandkosten.

Lieferumfang

Zum Lieferumfang gehört:

  • das Board,
  • eine Knopfzelle vom Typ LIR2032H,
  • eine 70 cm lange Panzerkette,
  • eine farbige Anleitung in englischer Sprache

Aufbau des Atmega32u4 Boards

Das 3 cm x 3 cm Board verfügt über

  • Mikrochip atmega32u4,
  • eine Micro-USB Buchse,
  • einen RESET Taster,
  • zwei NeoPixel vom Typ WS2812B,
  • ein LIR2032H, 70mAh, 3,7 V Akku,
  • eine SMD LED zum Anzeigen das gerade der Akku geladen wird,
  • einen Schalter um das Board AN / AUS zu schalten
Pinout des atmega32u4 Boards
Pinout des atmega32u4 Boards

Gewicht

Die Kette wiegt alleine 86g und inkl. Board 96g. Das ist schon eine ordentliche Ansage.

Ich denke mal das dieses Board auch nicht wirklich als Halschmuck getragen wird, es ist wohl eher als nettes Gadget gemeint.

Akkuleistung

Der Akku ist eine kleine Knopfzelle vom Typ LIR2032H.

BeschreibungZeit
komplette Aufladungca. 40 min.
Arbeitszeit3h bis 4h

Sollte der Akku einmal defekt sein oder seine Leistung stark verlieren, so findest du auf zbsp. ebay.de einen Ersatz für knapp 1,5 € zzgl. Versandkosten (ebenfalls ca. 1,5 €).

Du musst aber darauf achten, dass der Typ passt, es gibt auf dem Markt auch Knopfzellen vom Typ CR2032, welche nicht wieder aufladbar sind!

Anschluss an einen Microsoft Windows 10 PC

Bevor das Board an den PC angeschlossen wird (ob Linux oder Windows) muss sichergestellt werden das, der Schalter auf Position „OFF“ steht.

Wenn man das Board an einen Microsoft Windows 10 PC anschließt, dauert es ein paar Sekunden bis dieser eingerichtet ist und startet. Danach wird jedoch beim ersten Start versucht das Programm NOTEPAD zu öffnen und die Konsole wird gestartet. Dabei blinken die NeoPixel in verschiedenen Farben.

Wenn das Gerät eingerichtet ist, wird dieses im Geräte-Manager als „Arduino Leonardo“ erkannt.

Eintrag des Boards im Geräte-Manager unter Windows 10
Eintrag des Boards im Geräte-Manager unter Windows 10

Für Boards, welche nicht direkt von der offiziellen Arduino Plattform erworben wurden ist es recht unüblich, dass ein korrekter Name erkannt wird.

Programmieren des Boards in der Arduino IDE

Der verbaute Chip ist dem des Arduino Leonardo gleich, diesen Mikrocontroller habe ich dir bereits im Beitrag Arduino Leonardo – Übersicht vorgestellt und auch gezeigt wie du eine Maus mit diesem ersetzen kannst (Arduino Leonardo & Joystick als Mausersatz).

Auf dem GitHub Repository von lspoplove / BAD findest du einige kleine Beispiele wie du das Board programmieren kannst.

Beispiel 1 – öffnen einer Webseite

Damit wir eine Webseite automatisch öffnen können, müssen wir:

  1. das Fenster „Ausführen“ öffnen
  2. in das Fenster den Text „cmd“ eintragen
  3. diesen Text mit der RETURN / ENTER Taste ausführen
  4. in der geöffneten Kommandozeile den Text „start <WEBSEITE>“ eintragen
  5. und das ganze mit der RETURN / ENTER Taste ausführen

Dabei ist immer darauf zu achten, dass wenn eine Taste per Code gedrückt wird, diese auch wieder „losgelassen“ werden muss. D.h. um in einem Editor den Buchstaben „A“ zu schreiben müssen wir die Shifttaste drücken und das A, beides aber auch wieder loslassen um ggf. andere Buchstaben zu schreiben.

//Bibliothek zum Simulieren von Tastatureingaben
#include <Keyboard.h>

void setup() {
  Keyboard.begin();
  //Pause von 1 sek.
  delay(1000);
  //betätigen der Windows Taste
  Keyboard.press(KEY_LEFT_GUI);
  //Pause von 50 ms.
  delay(50);
  //betätigen der Taste "r"
  Keyboard.press('r');
  //Pause von 50 ms.
  delay(50);
  //Windows Taste wieder loslassen
  Keyboard.release(KEY_LEFT_GUI);
  //Taste "r" wieder loslassen
  Keyboard.release('r');
  //eine Pause von 1 sek.
  delay(1000);
  //Eingeben des Textes und bestätigen mit der RETURN Taste
  Keyboard.println("cmd ");
  //eine Pause von 500 ms.
  delay(500);
  //eingeben des Textes und bestätigen mit der RETURN Taste
  //Damit die Adresse geöffnet werden kann muss diese mit www beginnen!
  Keyboard.println("start www.google.de ");
  delay(500);
  //Kommandozeile schliessen
  Keyboard.println("exit ");
  //beenden 
  Keyboard.end();
}

void loop() {}

Beispiel 2 – starten von Programmen

Im ersten Beispiel habe ich dir gezeigt wie man eine Webseite im Standardbrowser öffnet. Genauso einfach kann man auch Programme starten jedoch funktioniert dieses dann auch nur an dem PC wo der Pfad genauso ist.

  1. Editor / Notepad öffnen,
  2. Text eingeben,
  3. Datei speichern
//Bibliothek zum Simulieren von Tastatureingaben
#include <Keyboard.h>

void setup() {
  Keyboard.begin();
  //Pause von 500 ms.
  delay(1000);
  //öffnen des Dialoges "Ausführen"
  openRunDialog();
  //Pause von 500 ms.
  delay(1000);
  //Wichtig ist hier das Leerzeichen am Ende damit ein RETURN ausgeführt wird!
  Keyboard.println("notepad ");
  delay(1000);
  //Eingeben von zwei Textzeilen
  Keyboard.println("Hallo Welt! ");
  Keyboard.println("1234567890");
  delay(1000);
  //Speichern der Daten in einer Datei
  //betätigen der Tast "Strg"
  Keyboard.press(KEY_LEFT_CTRL);
  delay(50);
  //betätigen der Taste "s"
  Keyboard.press('s');
  delay(50);
  //Taster "Strg" wieder loslassen
  Keyboard.release(KEY_LEFT_CTRL);
  //Taste "s" wieder loslassen
  Keyboard.release('s');
  delay(50);
  Keyboard.println("hierStehtEinText.txt ");
  //beenden
  Keyboard.end();
}

void openRunDialog() {
  //betätigen der Windows Taste
  Keyboard.press(KEY_LEFT_GUI);
  //Pause von 50 ms.
  delay(50);
  //betätigen der Taste "r"
  Keyboard.press('r');
  //Pause von 50 ms.
  delay(50);
  //Windows Taste wieder loslassen
  Keyboard.release(KEY_LEFT_GUI);
  //Taste "r" wieder loslassen
  Keyboard.release('r');
}

void loop() {}

Hier nun das Video wie es aussieht, wenn der Mikrocontroller an den Computer angeschlossen wird.

Beispiel 3 – steuern der RGB LEDs

Zum Steuern der RGB LEDs wird vorgeschlagen die Adafruit NeoPixel Bibliothek zu installieren. (Es wird aber ebenfalls auch mit der FastLED Bibliothek funktionieren.) Die Bibliothek kannst du entweder vom GitHub Repository adafruit / Adafruit_NeoPixel als ZIP Datei herunterladen oder aber ganz einfach über den Bibliotheksverwalter.

Eintrag im Bibliotheksverwalter in der Arduino IDE
Eintrag im Bibliotheksverwalter in der Arduino IDE

Im nachfolgenden Beispiel möchte ich dir zeigen wie man die RGB LEDs vor dem Ausführen von KeyBoard aktionen auf die Farbe „rot“ gesetzt werden und im Abschluss auf „grün“.

Somit hat man einen Indikator geschaffen, ob der Vorgang in Gange ist oder bereits abgeschlossen ist.

//Bibliothek um die NeoPixel anzusteuern
#include <Adafruit_NeoPixel.h>
//Bibliothek zum simulieren von Tastatureingaben
#include <Keyboard.h>

//die NeoPixel sind über den digitalen Pin D12 angeschlossen
#define PIN 12
//gesamt 2 NeoPixel sind verbaut
int numPixels = 2;

//instanziieren eines Objektes für die Steuerung der verbauten NeoPixel
Adafruit_NeoPixel strip = Adafruit_NeoPixel(numPixels, PIN, NEO_GRB + NEO_KHZ800);

//RGB Farbe Rot
uint32_t red = strip.Color(255, 0, 0);

//RGB Farbe Grün
uint32_t green = strip.Color(0, 255, 0);

void setup() {
  strip.begin();
  //setzen der Helligkeit 0 = AUS / 255 = voll
  strip.setBrightness(50);
  //setzen der Farbe "rot"
  setLedColor(red);
  //mache Dinge
  doThings();
  //setzen der Farbe "grün"
  setLedColor(green);
}

//setzen einer Farbe
void setLedColor(uint32_t color) {
  //für jeden NeoPixel im Stripe mache...
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, color);
  }
  //anzeigen der Farbe
  strip.show();
}

void doThings() {
  Keyboard.begin();
  //Pause von 500 ms.
  delay(1000);
  //öffnen des Dialoges "Ausführen"
  openRunDialog();
  //Pause von 500 ms.
  delay(1000);
  //Wichtig ist hier das Leerzeichen am Ende damit ein RETURN ausgeführt wird!
  Keyboard.println("notepad ");
  delay(1000);
  //Eingeben von zwei Textzeilen
  for(int i = 1;i<100;i++){
    Keyboard.println("Row "+String(i,DEC));
    delay(50);
  }
  delay(1000);
  //beenden
  Keyboard.end();
}

void openRunDialog() {
  //betätigen der Windows Taste
  Keyboard.press(KEY_LEFT_GUI);
  //Pause von 50 ms.
  delay(50);
  //betätigen der Taste "r"
  Keyboard.press('r');
  //Pause von 50 ms.
  delay(50);
  //Windows Taste wieder loslassen
  Keyboard.release(KEY_LEFT_GUI);
  //Taste "r" wieder loslassen
  Keyboard.release('r');
}

void loop() {}

In dem Video erkennt man gut, dass vor dem Ausführen von Keyboard Eingaben die Farben der NeoPixel auf „rot“ gesetzt werden und nachdem Ablauf die Farbe zurück auf „grün“ wechselt.

Mögliche Attacken mit dem „Cyber A Necklace“

Ich habe dir nun gezeigt wie man das Programm Notepad öffnet, einen Text eingibt und speichert, dabei noch die LEDs leuchten lässt.

Mit bösen Absichten könnte man nun ein kleines Skript schreiben lassen welches Dateien in dem Ordner „%USERPROFILE%\documents“ löscht.

Der Ablauf wäre wie folgt:

  1. öffnen der Eingabeaufforderung
  2. erzeugen eines Ordners unter „%USERPROFILE%\documents\“
  3. öffnen des Programmes Notepad,
  4. schreiben des Skriptes,
  5. speichern des Skriptes als *.cmd Datei in den zuvor erzeugten Ordner,
  6. öffnen der Eingabeaufforderung
  7. starten des Skriptes

Im Anschluss könnte man nun diesen Mikrocontroller irgendwo platzieren und hoffen, dass dieser an einen Windows-PC angeschlossen wird und dann würde dieser binnen weniger Millisekunden das Skript erzeugen und ausführen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.