From 3131832b7d708ab24f88ea9edd6c5c74887d247f Mon Sep 17 00:00:00 2001 From: 46halbe <46halbe@berlin.ccc.de> Date: Sun, 19 Feb 2012 18:24:46 +0000 Subject: committing page revision 7 --- pages/hackabike.md | 69 +++++++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 34 deletions(-) (limited to 'pages') diff --git a/pages/hackabike.md b/pages/hackabike.md index ac5f669b..e215fc8d 100644 --- a/pages/hackabike.md +++ b/pages/hackabike.md @@ -1,15 +1,15 @@ title: Hack a Bike date: 2009-11-02 01:04:00 -updated: 2012-02-18 21:09:17 +updated: 2012-02-19 18:24:46 author: erdgeist tags: deutsche bahn, hack, bike, call, avr, hackabike previewimage: /images/01.jpg -Schon immer mal nachts ohne Transportmöglichkeit in einem fremden Bezirk aufgewacht? "Mal schnell" ein Fahrrad benötigt? In Berlin und anderen Großstädten Deutschlands bietet Die Deutsche Bahn mit dem Call-A-Bike Service Abhilfe. +Schon mal nachts ohne Transportmöglichkeit in einem fremden Bezirk aufgewacht? "Mal schnell" ein Fahrrad benötigt? In Berlin und anderen Großstädten Deutschlands bietet die Deutsche Bahn mit dem Call-A-Bike-Service Abhilfe. -## Kurzeinführung in das Call a Bike System {#kurzeinführung-in-das-call-a-bike-system .quote} +## Kurzeinführung in das Call-a-Bike-System {#kurzeinführung-in-das-call-a-bike-system .quote} Als Kunde ruft man die CallABike-Zentrale und gibt per DTMF-Wahl die vierstellige Radnummer durch. Von der Zentrale erhält man dann den @@ -95,12 +95,12 @@ Es dauerte eine Weile, bis wir merkten, dass das System nach dem Booten durch ein Infrarot-Signal aktiviert werden muss. Das war mehr oder weniger Zufall. -Wenn man eine normale Glühlampe benutzt, um besser sehen zu koennen, +Wenn man eine normale Glühlampe benutzt, um besser sehen zu können, piepte die Elektronik gelegentlich scheinbar unmotiviert. Wie sich später herausstellte, reichte der durch die Glühlampe emittierte IR-Anteil aus, um den IR-Receiver zu triggern und den Bootvorgang fortzusetzen. Beim Booten testet sich das System selbst, und der Empfang -eines Infrarot Signals gehört eben dazu. Im Zuge fortschreitender +eines Infrarot-Signals gehört eben dazu. Im Zuge fortschreitender Professionalisierung™ wurde in der Folgezeit die Glühlampe durch ein Infrarot-Photon-Micro-Light ersetzt. Bei unserer weiteren Analyse des Systems begannen wir damit, alle Anschlüsse des Atmel durchzumessen, um @@ -119,46 +119,47 @@ an. Zum Auslesen wurde hauptsächlich das freie AVR microcontrollers which can interface to many hardware in-system programmers”) benutzt. Die auf dem Atmel vorhandenen „Intellectual-Property“-Bits waren in einem undefinierten Zustand, -deswegen konnten wir das Flash des Atmels mit der 8KB großen Firmware -auslesen. +deswegen konnten wir das Flash des Atmels mit der acht KB großen +Firmware auslesen. In den nächsten Wochen waren mehrere Hacker damit beschäftigt, den ausgelesenen Assemblercode zu verstehen und zu dokumentieren. Dazu verwendeten wir AVR-Studio und [Ida Pro](http://www.datarescue.com/idabase/). Den Scramble Code (zum -berechnen der Ausleih- und Abgabecodes) fanden wir relativ schnell, da +Berechnen der Ausleih- und Abgabecodes) fanden wir relativ schnell, da sich dort eine Menge rotate-und-shift-Befehle befanden. Den -Initialisierungscode erkannten wir wieder, da wir wussten, dass der -Motor sich beim Einschalten zweimal herumdreht. So konnten wir das -gelernte immer wieder an unserem Prototyp auf Richtigkeit überprüfen. +Initialisierungscode erkannten wir wieder, da wir wußten, daß sich der +Motor beim Einschalten zweimal herumdreht. So konnten wir das Gelernte +immer wieder an unserem Prototyp auf Richtigkeit überprüfen. Die Ausleih- und Abgabecodes werden durch einen Scrambler generiert, der -mit einem 16Bit-Counter des CallABikes und einem Zustandswert aufgerufen -wird. Ein gerader Counterwert erzeugt Ausleihcodes und ein ungerader -erzeugt die Abgabecodes. Der Scrambler nutzt den Counter und das -Zustandsbyte, um ein Offset auf ein 1024 Bit großes Feld zu errechnen. -Dieses Feld ist ein für jedes CallABike eindeutiger binärer String, der -als der (wahrscheinlich) eindeutige Key des CallABikes bezeichnet werden -könnte. Von diesem Offset aus werden dann 4x4 Bit genutzt, die die vier -Ziffern für die Ausleih- und Abgabecodes repräsentieren. Die 16 Bit des -Counters werden aber schlecht genutzt, denn schon nach 1024 Iterationen -wiederholen sich die Ausleih- und Abgabecodes. Das bedeutet auch, dass -es nur 512 Ausleihcodes je CallABike gibt, da es nur 512 gerade Offsets -gibt die auf den Key (1024 Bit) zeigen können. CallABikes, die wir -geöffnet haben und die wir wegen der Lockbits nicht auslesen konnten, -haben wir mit einem Script 511 mal resetten lassen (bei einem Reset -erhöht sich der Counter immer um zwei). Damit haben wir den -ursprünglichen Zustand wiederhergestellt, und das CallABike war wieder -‘in sync’ mit der Zentrale. +mit einem 16-Bit-Counter des Call-a-Bikes und einem Zustandswert +aufgerufen wird. Ein gerader Counterwert erzeugt Ausleihcodes und ein +ungerader erzeugt die Abgabecodes. Der Scrambler nutzt den Counter und +das Zustandsbyte, um ein Offset auf ein 1024 Bit großes Feld zu +errechnen. Dieses Feld ist ein für jedes Call-a-Bike eindeutiger binärer +String, der als der (wahrscheinlich) eindeutige Key des Call-a-Bikes +bezeichnet werden könnte. Von diesem Offset aus werden dann 4x4 Bit +genutzt, welche die vier Ziffern für die Ausleih- und Abgabecodes +repräsentieren. Die 16 Bit des Counters werden aber schlecht genutzt, +denn schon nach 1024 Iterationen wiederholen sich die Ausleih- und +Abgabecodes. Das bedeutet auch, daß es nur 512 Ausleihcodes je +Call-a-Bike gibt, da es nur 512 gerade Offsets gibt, die auf den Key +(1024 Bit) zeigen können. Call-a-Bikes, die wir geöffnet haben und die +wir wegen der Lockbits nicht auslesen konnten, haben wir mit einem +Script 511 mal resetten lassen (bei einem Reset erhöht sich der Counter +immer um zwei). Damit haben wir den ursprünglichen Zustand +wiederhergestellt, und das Call-a-Bike war wieder ‘in sync’ mit der +Zentrale. Wer sich das Display mal genauer angeschaut hat, wird festgestellt -haben, dass der Zeichensatz ein proportionaler ist. Dazu gibt es im Code +haben, daß der Zeichensatz ein proportionaler ist. Dazu gibt es im Code eine Tabelle, in der die Länge des Zeichens und die Position im Flash -gespeichert sind. Ein ‘i’ und ein ‘!’ belegen nur ein Byte, wogegen z.B. -ein ‘w’ sieben Bytes belegt. Die großen Logos und das Zahleneingabefeld -liegen als 400 Byte große Bitmaps vor. Die lange schwarze Linie im -CallABike-Logo zeigt die Stärke der Spule im Schloss an. Das haben wir -nur durch das Code-Auditing herausgefunden. +gespeichert sind. Ein ‘i’ und ein ‘!’ belegen nur ein Byte, wogegen z. +B. ein ‘w’ sieben Bytes belegt. Die großen Logos und das +Zahleneingabefeld liegen als 400 Byte große Bitmaps vor. Die lange +schwarze Linie im Call-a-Bike-Logo zeigt die Stärke der Spule im Schloß +an. Das haben wir nur durch das Code-Auditing herausgefunden. Unser erstes Ziel war es, den aus unserem Disassembler erhaltenen Sourcecode so anzupassen, dass nach dem Assemblieren mit dem Commandline -- cgit v1.2.3