Reverse Engineering

Aus fablab Cottbus
Wechseln zu: Navigation, Suche

Alte Geräte wieder nutzbar machen, Zugriff auf Hardware- und Software-Teile zu bekommen, die der Hersteller für den Endbenutzer nicht vorgesehen hat, Funktionen hinzufügen, eigene Einstellungen vornehmen, Geräte in einer Weise nutzen, die vom Hersteller nicht vorgesehen hat - darum geht es beim Reverse Engineering.

Die Geräte werden uns in die Hand gelegt, die Baupläne jedoch nicht. Und der Hersteller schreibt uns genau vor, wie wir das Gerät zu nutzen haben. Durch Auseinandernehmen, Durchmessen und Ausprobieren lässt sich jedoch herausfinden, wie ein Gerät aufgebaut ist und wie es funktioniert. Mit diesem Wissen kann dann der Funktionsumfang des Gerätes an die eigenen Wünsche angepasst und oft erheblich erteitert werden.

Grundlagen

Serial Port nutzbar machen

Was ist eine serielle Schnittstelle?

Die serielle Schnittstelle war in Zeiten, bevor es USB gab die gängige Verbindung von Geräten zum Computer. Den Stecker kennt man vielleicht noch von alten Druckern. Aber auch viele Labor- oder Feldmessgeräte haben eine serielle Schnittstelle, denn letztendlich benötigt man nur zwei Kabel. Auch unser 3D-Drucker kommuniziert letztendlich über die serielle Schnittstelle, auch wenn er über einen USB-Konverter angeschlossen wird.

Wie kann ich die serielle Schnittstelle nutzen?

Um mit einem Gerät sprechen zu können, müssen verschiedene Parameter eingestellt werden:

  • die Bitrate - was die Geschwindigeit des Datenaustauschs beeinflusst (*)
  • data bits
  • parity
  • stop bits
  • flow control

(Anm.: häufig wird der Ausdruck "Baudrate" statt "Bitrate verwendet. Das ist aber nicht korrekt. Baudrate bedeutet was ganz anderes. Ein historisches Beispiel: Ein 9600-bit-Modem. Es arbeitet beispielsweise mit 300 Baud, wobei jeder Datenblock kodiert 16 bit enthält (=Symbol). Ergebnis: Baudrate 300, Bitrate 9600. Analog dazu die heutigen Anwendungen, Mobilfunk, Digitalfunk, digitale Datenübertragung. Kurz gesagt: Baudrate bezeichnet den Datentakt/Symboltakt und nicht die Datenrate.)


Oft können diese Parameter auch am Gerät umgestellt werden. Wichtig ist, dass Computer und Gerät beide auf die gleichen Parameter eingestellt sind, sonst bekommt man nur Zeichensalat.

Mit Programmen wie Coolterm (Windows, Mac, Linux) kann man Geräte ansprechen oder deren Kommunikation empfangen und aufzeichnen. Unter Linux kann man auch die Konsole oder ein Shell-Script benutzen, um die serielle Kommunikation zu empfangen und ggf. weiterzuverarbeiten, mit minicom, screen oder serialclient (hier eine Anleitung). Mit ttylog oder einfach cat können die eintreffenden seriellen Daten in einer Datei gespeichert werden. z.B. so:

cat /dev/ttyS0 > file.txt

Hier ist /dev/ttyS0 das serielle Gerät.

Versteckte serielle Schnittstellen

Was weniger offensichtlich ist, ist dass viele Moderne Geräte wie DSL-Router, Tablets oder E-Reader auch serielle Schnittstellen besitzen. Diese sind nicht für den Endnutzer gedacht und meistens irgendwo im Gerät auf der Platine versteckt. Diese Schnittstellen werden genutzt, um während der Entwicklung Debuginformationen vom Gerät zu erhalten oder bei der Produktion oder bei einer eventuellen Reperatur Informationen vom Gerät zu erhalten und Dinge einstellen oder aufspielen zu können. Da viele dieser Geräte mit einem Linux-Betriebssystem laufen lässt sich über diese Schnittstelle auf eine Shell zugreifen. Oft direkt mit root-Rechten. Meistens muss man das Gerät öffnen, um an diese Schnittstellen zu gelangen. Oft handelt es sich lediglich um vier nebeneinander liegende Lötstellen, die manchmal mit 5V/3.3V (Stromversorgung), RXD (Receive), TXD (Transmit) und GND (Masse) beschriftet sind, oft aber auch völlig ohne Kennzeichnung. Eine gute Anleitung, wie man diese Kontakte findet, die richtigen Anschlüsse identifiziert und die richtigen Kommunikationseinstellungen findet gibt es hier.

Einen Guten Vortrag zu dem Thema findet man in hier. Hier geht es darum, ausrangierte Geräte wieder nutzbar zu machen (Thema Upcycling) und eventuell für ganz andere Dinge zu verwenden, als für die sie gebaut wurden.

Geräte

Die folgenden Geräte wurden in unserem fablab wieder nutzbar gemacht oder in ihrem Funktionsumfang erweitert. Wie es gemacht wurde soll hier dokumentiert werden.

CalComp Drawing Board

Ich habe ein digitales Zeichenbrett von CalComp in einer Auflösung eines Ingenieurbüros gefunden. So ein Gerät was sich super für AutoCad-Zeichnungen eignet. Für das Gerät findet man schlecht noch Treiber für aktuelle Betriebssysteme und grundsätzlich hat man erstmal Probleme, das Ding an moderne Computer anzuschließen - das geht nur mit einem USB-auf-Seriell Adapter. Mit Hilfe dreier Anleitungen [1], [2], [3] habe ich die nötigen Einstellungen am Tablet und Computer vorgenommen, um die Kommunikation über die serielle Schnittstelle herzustellen. Nun bekomme ich in Coolterm die Koordinaten des Stifts angezeigt. Jetzt muss ich noch Wege finden, um das in eine Mausbewegung umzuwandeln oder andere Interessante Dinge damit zu veranstalten, wie z.B. Musik- oder Lichteffekte steuern. Eventuell kann ich einen Arduino Micro an das Gerät anbauen. Dieser wird vom Computer als Maus (und Tastatur) erkannt. Somit könnte ich über den Arduino das serielle Signal in eine USB-Maus Bewegung umwandeln. Somit könnte das Board wieder an jeden Computer angeschlossen werden, ohne irgendetwas installieren zu müssen.

HeliosMini Wetterstation/Datenlogger

HeliosMini rht von Skye Instruments ist eine kleine Wetterstation, die Luftfeuchte und Tauwasser misst und aufzeichnet. Ein Regenmesser kann noch angeschlossen werden. Das Gerät besitzt eine serielle Schnittstelle zum Herunterladen der Daten. Die Einstellungen sind:

  • 9600 baud, no parity, 8 data bits, 1 stop bits and Xon / Xoff flow control

Laut dem Benutzerhandbuch gelten folgende Befehle:

  • a ... Offload in ASCII
  • b ... Offload in (formatted) Binary
  • c ... Send Readings from all Channels (No Logging)
  • d ... Send Logger Status
  • 1 ... Send Logger Time
  • RM ... Reset Memory
  • T ... Set the Date and Time. This must be entered exactly - hour, minute, second, day, month, year, e.g. 100620010301 which would be 10:06:20 on 01/03/01. This will be repeated and you need to enter OK (in capital letters). The logger will repeat OK and the changes will take effect. Please note, the date and time must be entered within 3 seconds of pressing T. If not, the logger will reset itself and no changes will have been made. You will then need to repeat the process.
  • ID ... Enter new logger ID. This must be exactly 16 characters (numbers or letters) which must not include spaces, commas, full stops etc. For example you could enter HeliosinField010.
    Then enter OK (in capitals) and OK will be repeated and the changes will take effect. Please note, the date and time must be entered within 3 seconds of pressing ID. If not, the logger will reset itself and no changes will have been made. You will then need to repeat the process.
  • SF ... Enter new scaling factors. These must be entered as a string of numbers which are 6 sets of 5 digits. The first is the figure for 1%RH, the second for 75% RH, the others are spare calibration points and any numbers may be entered. For example, you could enter 476285094311111222223333344444 whereby 47628 is the 1% calibration figure, 50943 is the 75% calibration figure and the remaining numbers are not used in this version of the Helios range and any numbers or letters may be entered.
    These numbers will be repeated, enter OK (in capitals) which will be repeated and the changes will take effect. Please note, the date and time must be entered within 3 seconds of pressing SF. If not, the logger will reset itself and no changes will have been made. You will then need to repeat the process
  • LI ... This will change the Log Interval. The codes are:
    • 1 ... 1 minute
    • 2 ... 5 minutes
    • 3 ... 10 minutes
    • 4 ... 15 minutes
    • 5 ... 20 minutes
    • 6 ... 30 minutes
    • 7 ... 1 hour
    • 8 ... 2 hours

NOTE - these logging intervals are ‘spot’ logs only. The logger will take a set of 3 consecutive measurements at each logging interval time and store the average of these 3 measurements. No measurements are taken to form an average over the entire the logging interval.

Mit dem folgenden Shell-Script konnte ich die Zeit des Datenloggers mit der Systemzeit des Raspberry Pi einstellen:

#!/bin/bash

echo T $(date +"00%H%M%S%d%m%y)") > /dev/USB-Serial-Port &&
sleep 1 &&
echo "OK" > /dev/USB-Serial-Port

Zu beachten ist, dass ich aus unerfindlichen Gründen noch zwei Nullen vorne an das Datum hängen musste.

Tolino Shine

Der E-Reader "Tolino Shine" ist leider verklebt. Deshalb muss man sich schon trauen, das Gerät zu öffnen. Allerdings reicht es schon, wenn man den Tolino an einer bestimmten Stelle etwas aufhebelt, dann kommt man schon an die Kontakte heran. Hier findet sich eine Anleitung. Über die Schnittstelle bekommt Zugriff auf die Android-Shell und kann den Tolino rooten und damit auch die USB-Schnittstelle für weitere Shell-Zugriffe freischalten. Letztendlich kann man damit auch andere Apps auf dem Tolino installieren, die der Hersteller nicht vorgesehen hat.