Elektronik funktioniert heute über ein komplexes Zusammenspiel von Soft- und Hardware. Im Gegensatz zum Analogzeitalter müssen Sie aber keine quadratmetergroßen Schaltpläne mehr lesen und verstehen, sondern können sich in vielen Fällen mit dem PC oder einem Kleinstrechner wie dem Raspberry Pi direkt in die Schaltkreislogik, das Bus-System oder in das Betriebssystem des Gerätes einklinken. Die nächsten zeigen Seiten exemplarisch den Prozess des Reverse Engineering, um ein Gerät in seinen Grundzügen zu verstehen.
Übersicht: Dein Freund, das Datenblatt
Weil die meisten Platinen doppelseitig bestückt und beschriftet sind, ist es immer nötig, eine Platine zur Analyse aus dem Gehäuse des Geräts zu entfernen. Denken Sie daran, dass Schrauben vom Hersteller oft unter Aufklebern oder Gummifüßen versteckt werden. Obligatorischer Sicherheitshinweis: Zerlegen Sie keine Geräte, die noch mit dem Stromnetz verbunden sind. Einige Netzteile, etwa Computernetzteile, können auch im ausgesteckten Zustand zu gefährlichen Stromschlägen führen. Liegt die Platine frei, finden sich darauf immer Bauteile, deren Funktion es zu identifizieren gilt. Grundsätzlich sind fast alle größeren Bausteine so beschriftet, dass sich im Web ein zugehöriges Datenblatt finden lässt, wenn man eine Suchmaschine mit der Beschriftung füttert. Ein Datenblatt verrät Funktionsweise, Hersteller und Typ eines Bauelements. Eine der größten Online-Datenbanken dafür ist alldatasheet.com mit 20 Millionen abrufbaren Datenblättern.
©Thomas Springer
Versteckte Chips: Unter Kunstharz
Schwieriger wird es, wenn man auf hochintegrierte Schaltkreise blickt, wie sie in elektronischen Geräten verbaut sind: Dort findet man häufig nur wenige passive Bauteile wie SMD-Widerstände und einen mehr oder weniger großen schwarzen Kunstharzfleck, einen sogenannten „Glob-Top“. Darunter verbirgt sich meist ein Chip, der direkt auf der Platine aufliegt. Gelegentlich kommt Kunstharz zum Einsatz, um einen verwendeten Chiptyp zu verstecken. Die Glob-Top-Bauweise macht Geräte billiger, aber auch wenig hackerfreundlich. Ein Beispiel ist die Personenwaage von Typ „XY-3069“, die in Hunderten Varianten mit fast identischer Elektronik aus chinesischer Produktion in Badezimmern steht. Das Gewicht wird über je zwei Dehnungsmessstreifen in den Füßen der Waage gemessen und über eine sehr kleine Veränderung des Widerstands an die Zentraleinheit gegeben. Um Temperatureinflüsse auszugleichen, kommen je zwei unterschiedliche Elemente zum Einsatz, die sich eine Masse teilen. In einer einfachen Schaltung wäre ein Signalverstärker eingebaut, der die Daten an eine Recheneinheit mit Displaysteuerung weitergibt. Die Funktionen der Waage sind alle in einem winzigen verklebten Chip integriert, der nichts von sich preisgibt.
Raspberry Pi: Der Computer im Eigenbau
Geheime Funktionen auf der Platine
Auf vielen Platinen ist mehr drauf, als man auf dem ersten Blick sieht. Auf unserer Waage etwa ist deutlich erkennbar ein freier Platz, auf dem vermutlich optional die Verdrahtung einer Körperfettmessung Platz findet. Viele komplexere Platinen stellen jedoch weitere Anschlüsse für Techniker bereit, die oft noch aus der Designphase stammen und nicht bestückt sind, also keine Stiftleiste besitzen. Wichtigte Anhaltspunkte geben Zahl und Beschriftung der Pins oder Lötpunkte auf der Platine. Auf sehr vielen Platinen findet man serielle Schnittstellen mit oder ohne Stiftsockel. Auf Geräten mit Flash-Speicher gibt es oft Pins, über die sich das System im Betrieb debuggen und der Speicher auslesen und verändern lässt. Über einen seriellen Bus gelangt man mit Hilfe eines Terminal-Programms und den richtigen Geschwindigkeitseinstellungen meist an eine Logdatei vom Boot-Vorgang des Systems, gelegentlich sogar an eine Kommandozeilen- Shell. Viele Systeme erlauben zudem, anstelle des eigentlichen Systems ein Not- oder Rettungssystem zu starten, mit dem beispielsweise eine neue Firmware oder ein neuer Boot-Loader geflasht werden kann. Gestartet wird dieses System meist durch eine undokumentierte Tastenkombination. Eine Art Quasi-Standard für den Start von Boot-Menü oder Rettungssystem ist ein dreimaliges Drücken der Leertaste vor dem Boot-Vorgang, gelegentlich schaltet die „!“-Taste dann weitere Administratorfunktionen frei.
Firmware: Über Pins auslesen
Auf vielen Systemen müssen für die Nutzung von seriellem Anschluss oder JTAG-Stiftleisten Kabel eingelötet werden. Die Verbindungsparameter sind so gut wie immer 8N1, die Baud- Rate ermitteln Sie durch Ausprobieren. Ein JTAG-Anschluss ist ein Hauptgewinn: Er bietet meist Zugriff auf die Speicherbereiche des Systems. In der Praxis ist ein erfolgreiches Auslesen der Firmware ohne Dokumentation aber eine schwierige Aufgabe, wenn keine Schritt-für-Schritt-Beschreibung zum Reverse Engineering vorliegt. Oft ist es möglich, die Firmware anhand einer Firmware-Update-Datei zu analysieren, die es auf der Hersteller-Webseite gibt. Häufig versteckt sich dahinter nichts anderes als ein winziges Linux in einem gepackten Dateisystem, das sich nach dem Auspacken der Image-Datei als Loopback-Device auf einem Linux-PC mounten lässt, beispielsweise mittels
sudo mount -o loop
Um Dateien und Dateisysteme aus der Firmware zu holen, gibt es eine Reihe von Linux- Tools wie das das Open-Source-Tool Binwalk .
©Thomas Springer
Der Bus: Interne Kommunikation
Neben der direkten Verbindung zum System gibt es auf vielen Platinen auch die Möglichkeit, an Komponenten oder Bauteilen Informationen abzugreifen oder sich gar dort als Kommunikationspartner anzumelden. In Frage kommen für derartige Verbindungen Sensoren, ICs oder Speicherbausteine und natürlich alles, was im Gerät als Modul ausgelegt ist. Die Kommunikation erfolgt so gut wie immer über ein Standardverfahren und ist aufgrund der definierten Verbindung leicht abzuhören. Bus-Systeme wie SPI eignen sich aber auch dazu, viele Eeprom-Typen direkt durch das Anklemmen von Kabeln an Prozessor-Pins oder Lötstellen auszulesen. Auf dieselbe Weise lassen sich Bus-Systeme und Sensoren direkt auf der Platine eines Gerätes abgreifen. Von einer Wetterstation des Typs Digitech LD 0266 könnte man etwa den Messwert des verbauten Temperatursensors direkt abgreifen und das Signal an einen Raspberry Pi weiterleiten.
Die besten Verwendungsmöglichkeiten für den Raspberry Pi
Die wichtigsten Bus-Systeme
Sollen mehrere Elektronikbauteile oder Platinen miteinander kommunizieren, ist dafür ein Protokoll als gemeinsame Sprache notwendig. Dies sind die verbreiteten Protokolle und Bus- Systeme, die dafür zum Einsatz kommen: I2C: Der I2C-Bus von Philips ist seit den 80er- Jahren ein Universal-Bus der Elektronik. In der einfachsten Variante unterstützt er bis zu 112 Geräte, die im laufenden Betrieb an- und abgeschaltet werden können. Es gibt zwei Varianten von I2C. Raspberry Pi und andere Bastel-Boards unterstützen mit Standard- und Fast- I2C beide Varianten. Viele Sensoren, Eeproms und auch Lego Mindstorms kommunizieren über I2C. Die Pins des auch als TWI (Two-Wire- Interface) bekannten Busses sind auf Platinen oft mit SDA, SCL, VCC und GND beschriftet. SPI: Das Serial Peripheral-Interface (SPI) ist einfacher und schneller als I2C, unterstützt aber keine direkte Adressierung von Kommunikationspartnern. SPI ist weniger standardisiert als I2C und benötigt sechs Kabel, die auf Boards meist mit SCLK, SCK, MOSI, SIMO, SDI, MISO, SOMI oder SDO beschriftet sind. Dazu kommen Versorgungsspannung (VCC), Masse (GND) und eine Steuerleitung, die festlegt, bei welchem Empfänger das Datenpaket ankommt. Das exakte Protokoll der Datenübertragung ist bei SPI nicht spezifiziert. Es haben sich aber vier Modi durchgesetzt, die als Mode 0 bis Mode 3 bekannt sind. Der Rasberry Pi unterstützt alle gängigen Modi. 1 Wire/One Wire: Verbindet viele Geräte ohne großen Aufwand an einem Bus. Der Bus kommt mit zwei Kabeln aus (Data, Ground), ist meist aber noch mit optionalem Kabel zur Spannungsversorgung versehen. Der One-Wire-Bus ist mit 16 KBit/s eher langsam, kann dafür mit ungeschirmtem Draht aber über Strecken von bis zu 300 Metern verlegt werden. Dies macht den One-Wire-Bus vor allem für Sensor- und Überwachungsnetzwerke interessant, bei denen nicht viele Daten übertragen werden müssen. Auf Platinen sind die Pins des One-Wire-Busses meist mit GND, DQ und VCC beschriftet. Mit Raspberry Pi, Arduino und anderen Bastel- Boards lassen sich One-Wire-Sensoren und Geräte mit den Standardbibliotheken des Betriebssystems ansprechen und auslesen.
©Thomas Springer
UART : Hinter dem „Universal-Asynchronous- Receiver-Transmitter“ verbirgt sich nichts anderes als die altbekannte serielle Schnittstelle. Die Schnittstelle ist über Terminal-Programme zugänglich. Auf Platinen wird sie gelegentlich für einfache Kommunikationsprozesse verwendet. Viel häufiger jedoch wird das serielle Protokoll als Debug-Interface genutzt. Etwa zum Lesen der Boot- und Service-Nachrichten, zur Neuprogrammierung von Flash-Bausteinen oder für Reset. Viele Hersteller verstecken die UART-Schnittstelle auf unbelegten und unbeschrifteten Lötpunkten auf dem Board. Wo eine UART-Schnittstelle beschriftet ist, finden sich vier Pins mit RX, TX, VCC und GND. Zum Hacken empfiehlt sich entweder ein altes Modemkabel oder alternativ ein USB-to-Serial- Adapter. JTAG: Eine Bus-Schnittstelle aus den 80er- Jahren, die zum Debuggen komplexer Schaltung diente, sich aber zu einem universellen Standard entwickelte und von der IEEE genormt wurde. Über JTAG ist meist ein lesender und schreibender Zugriff auf den Systemspeicher möglich. Leider ist JTAG nur auf dem Papier genormt: Es gibt JTAG-Anschlüsse mit 2 x 5 und solche mit 2 x 10 Pins. In Embedded- Geräten sind aber auch Schnittstellen mit 12, 14 und 16 Pins zu finden. JTAG-Pins sind gelegentlich mit TDI, TDO, TCK, TMS, TRST und GND beschriftet. Die Pinbelegung scheinen viele Hersteller nur als Empfehlung aufzufassen, und ohne passend konfigurierte Programme geht gar nichts. Bei unbekannten Geräten stellt dies meist eine nur schwer zu überwindende Hürde dar, erst mit Dokumentation oder Anleitungen wird JTAG brauchbar. Für die Ansteuerung wird ein USB-Adapter benötigt. Als Standard-Software zum Lesen und Schreiben der JTAG-Schnittstelle empfiehlt sich das Open- Source-Programm Open OCD (http://openocd. sourceforge.net) für Linux.
Auf einen Bus aufspringen
Um verschiedene Busse auf einer Platine oder einem Baustein „anzuzapfen“, benötigen Sie Hard- und Software. Im einfachsten Fall ist das ein Raspberry Pi, der von Haus aus so gut wie alle bekannten Schnittstellen ansprechen kann. Aufgrund der einfachen Auslegung der Raspberry-GPIOs ist dafür manchmal noch ein wenig Lötarbeit vonnöten, im Prinzip lassen sich aber alle gängigen Busse auch direkt über den Raspberry ansteuern. Neben speziell für den Raspberry entwickelten Software-Paketen und Python-Schnittstellen unterstützen auch Standardprogramme wie Flashrom die Kommunikation über die GPIOs des Kleinstrechners. Bevor Sie SPI, I2C und Co. mit dem Raspberry Pi benutzen können, müssen die zugehörigen Kernel-Module gestartet sein. Die entsprechende Konfigurationsdatei bei Raspbian ist „/etc/modprobe.d/raspi-blacklist. conf“. Dort sind die Kernel-Module gelistet, die nicht geladen werden. Kommentiert man die gewünschten Module aus, können sie über einen Eintrag in „/etc/modules“ beim nächsten Systemstart geladen werden. Die Module in „/etc/modules“ sind als i2c-dev, spi-dev und w1-gpio oder w1-therm (One Wire) einzubinden. Mit dem Befehl lsmod können Sie auf der Kommandozeile herausfinden, welche Module aktuell geladen sind.
Tools zum Ansteuern der Bus-Systeme können mit dem Befehl
sudo apt-get i2c-tools libi2c-dev python-smbus
unter Raspian installieren. Wer sich für Elektronik interessiert, findet vom Haushaltsgerät bis zur Heimelektronik einen schier unerschöpflichen Fundus an zugänglicher Hardware, die sich zum Spielen und Experimentieren, aber auch zum Realisieren eigener Ideen anbietet. Der Raspberry Pi bietet vielfältige Möglichkeiten, Sensoren, Displays aber auch komplette Geräte zu kombinieren, auszulesen, und zu steuern. Besonders reizvoll ist, die Funktionalität vorhandener Geräte mit dem Kleinstrechner zu kombinieren und so beispielsweise ins Netzwerk zu bringen.
Reverse Engineering Nützliche Ausrüstung
Für den Einsteig genügt schon ein Satz Kabel, Adapter, Klemmen, Multimeter und für anspruchsvolle Projekte ein Raspberry Pi, denn das Gerät kann über die eigenen Pins gut mit Bus-Systemen anderer Mikroelektronik verbunden werden. USB-Multitalent: Für rund 25 Euro gibt es bei verschiedenen Anbietern USB-Adaptermodule oder USB-Kabel auf Basis der FTDI-2232H-Familie, die mit Hilfe verschiedener Bibliotheken die Protokolle I2C, SPI und JTA G direkt über den USB-Port zugänglich machen. Der Chip wird von gängigen Flash-Programmen erkannt, und es gibt auch eine Python-Schnittstelle. Diese kann mittels Bibliotheken wie libmpsse auch über Python angesprochen werden. Geräte sind über eine Suche nach FTDI 2232H leicht aufzufinden. Eine reine USB-UART-Alternative sind Kabel mit PL2303-Chip – diese sind aber unter Windows 8 nur mit einigen Tricks zum Laufen zu kriegen und unterstützen nur UART.
©Thomas Springer
Einer für alles: Das Bastel-Board Buspirate (rund 30 Euro) bietet Unterstützung für viele gängige Bus-Systeme und stellt dabei auch gleich unterschiedliche Spannungen und Widerstände an den Pins zur Verfügung. Der Buspirate lässt sich per USB anschließen und mit Python und Perl ansprechen. Grabber: Per SMD-Technik verbaute Chips lassen sich nicht nur umständlich mit angelötetem Draht anzapfen. Wenn es ums Forschen und Experimentieren geht, sollte ein Satz winziger Klemmpinzetten, so genannte „SMD-Grabber“ zur Verfügung stehen, mit denen sich einzelne Chipbeinchen oder Kontakte über eine Klammer abgreifen lassen. Ein Zehnerpack verschiedenfarbiger Grabber kostet rund 3 Euro. Sonstiges: Wenn es darum geht, nicht belegte Pins auf der Platine zu verkabeln, kommt man um einen feinen Draht und einen Lötkolben nicht herum. Wer mit dem Raspberry arbeitet, kann auch Kabel und ein Steckbrett verwenden.