In diesem Beitrag möchte ich dir ein nettes Gadget vorstellen, es ist ein kleines ATmega32u4 Board mit 70mAh Akku (LIR2032H) und USB-HID Funkion.
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.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
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
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.
Beschreibung | Zeit |
---|---|
komplette Aufladung | ca. 40 min. |
Arbeitszeit | 3h 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.
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:
- das Fenster “Ausführen” öffnen
- in das Fenster den Text “cmd” eintragen
- diesen Text mit der RETURN / ENTER Taste ausführen
- in der geöffneten Kommandozeile den Text “start <WEBSEITE>” eintragen
- 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.
- Editor / Notepad öffnen,
- Text eingeben,
- 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.
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:
- öffnen der Eingabeaufforderung
- erzeugen eines Ordners unter “%USERPROFILE%\documents\”
- öffnen des Programmes Notepad,
- schreiben des Skriptes,
- speichern des Skriptes als *.cmd Datei in den zuvor erzeugten Ordner,
- öffnen der Eingabeaufforderung
- 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.