A bit of Oyo hacking

Zu Weihnachten wurde ein schon lange gehegter Wunsch erfüllt: Ein E-Book-Reader. Ich hatte mich für einen Oyo entschieden - zwar sind die aktuellen Sony-Geräte dem Oyo deutlich überlegen (schnelleres und kontrastreicheres Display, schnellere Reaktion, längere Akku-Lebensdauer, ausgereiftere Bedienung), aber da ich annehme, daß die Entwicklung der E-Book-Reader in den nächsten Jahren noch rasch voranschreiten wird, war ich nicht gewillt, den fast doppelten Betrag zu investieren. Ich habe das "Begrüßungsgeschenk" - einen Roman aus einer gewissen Auswahl - inzwischen durchgelesen und bin sehr angetan. Für Prosa eignet sich der Oyo prima. Die Eignung für Fachbücher (ich habe inzwischen etliche O'Reilly-E-Books gekauft) wird er die kommenden Wochen unter Beweis stellen müssen.

Aber die Katze läßt ja bekanntermaßen das Mausen nicht, und so kam ich nicht umhin, ein wenig detaillierter mit der Technik zu spielen :-)

Hier also gesammelte Informationen über die Hardware, das Software-Update und den Adobe-ADEPT-Kopierschutz.

Diagnosetool starten

Der Klassiker: Was passiert denn, wenn man verschiedene Tastenkombinationen beim Start drückt? Bei mir (Firmware-Version 1.0 R2818) gelangt man durch Halten der Einschalt- und Zurücktaste (die beiden obersten Tasten) in ein Diagnosetool, mit dem man sich diverse Systeminformationen ansehen und die Funktion der Hardware (Touchscreen, Knöpfe) überprüfen kann.

Kernelsourcen und Firmwareupdate-Paket

In den Lizenzinformationen der Anleitung findet man folgenden Link:
http://www.thalia.de/oyo_src/SG060B00_V009.tgz
Hier findet man angepaßte Quellen eines Linuxkernels sowie den U-Boot Bootloader. Ein wenig "Aufpassen" im hauseigenen WLAN offenbart auch die URL, über die das Firmwareupdate heruntergeladen wird:
http://server.meinoyo.com/update/thalia/oyofw.tar.bz2

Letzteres enthält ein Bootimage sowie ein komplettes Linux-Filesystem mit ARM-Binaries (im Lizenzanhang der Anleitung wird der "Samsung S3C2443 SPI Controller" erwähnt; das ganze ist also eine ARM9-Plattform). In /etc/issue findet man noch die Willkommensmeldung

Welcome to the Samsung Glibc development environment

Auch ansonsten ist das Filesystem alles andere als ausgedünnt - es gibt noch viele, für den Betrieb nicht nötige Binaries wie beispielsweise einen Telnet-Daemon oder Tools wie dd. Naja, für weitere Experimente können die ja durchaus hilfreich sein ;-) Außerdem findet man diverse Tools für den Flash-Zugriff (flash_erase, nanddump, nandwrite, etc.).

Die eigentlichen E-Book-Reader-Anwenungen sind mit QT Embedded geschrieben. All das läßt vermuten, daß die Software für den Oyo in großer Eile fertiggestellt wurde - das läßt in sofern hoffen, daß die Geschwindigkeit des Oyos durch geeignete Programmierung und entsprechendes Tuning doch noch ein gutes Stück gesteigert werden kann.

In /linuxrc (ein Shellskript) findet man folgenden Abschnitt:

mount /dev/mmcblk1p1 /mnt/mmc1p1
if [ -f /mnt/mmc1p1/usbdebug ]; then
   echo "usbdebug"
   /usr/local/sbin/usbdebug.sh
fi

Falls also eine Datei mit Namen usbdebug auf der SD-Karte existiert, wird das Skript usbdebug.sh ausgeführt - und dies schickt die syslog-Ausgaben und ein Terminal auf die USB-Schnittstelle.

Terminalzugang

Beim Anschluß an meinen Rechner meldet mein Linux im Syslog:

Product: Gadget Serial
Manufacturer: Linux 2.6.21.5-cfs-v19 with s3c-udc

Um einen Shellzugang zu bekommen, muß man die erwähnte Datei auf der SD-Karte anlegen, den Oyo über USB an den PC anschließen und neu starten. Damit die serielle Verbindung über USB zustandekommt, muß vorher das entsprechende Kernelmodul geladen werden; dabei ist es nötig, Hersteller- und Geräte-ID dem Modul als Parameter mitzugeben:

modprobe usbserial vendor=0x0525 product=0xa4a6

Nun kann man sich mit einem Terminalprogramm verbinden (der Name des Devices wird im Kernellog angezeigt, typischerweise lautet er /dev/ttyUSB0). Ich habe Minicom verwendet, mit den Verbindungsparametern 115200 8n1 klappte es auf den zweiten Versu ch.

Das Hash des Root-Passworts stand im Filesystem-Archiv des Firmware-Updates; der liebe John verriet mir nach ein paar Stunden, daß der Klartext SReader lautet. Glück gehabt :-)

Backups

Im Handbuch liest man gleich auf einer der ersten Seiten:

Machen Sie nach jeder Aktualisierung Ihrer Daten Sicherungskopien auf externe Speichermedien. Die Geltendmachung von Schadensersatzansprüchen für Datenverlust und dadurch entsandene Folgeschäden wird ausgeschlossen.

Ich sehe zwei Möglichkeiten, um ein autarkes Backup seiner gekauften EBooks zu erstellen:

Sichern der Geräte-ID

Die EPub-Dateien, die man bei Thalia kaufen kann, sind mit Adobe Adept sowohl an eine Gerätekennung als auch eine Benutzer-ID gekettet. Schließt man den Oyo an einen PC, so erhält man Zugriff auf seine (kopiergeschützten) E-Books und an seine (benutzerspezifischen) Aktivierungsdaten, nicht aber die Geräte-ID. Letztere wird (dem Zeitstempel nach zu urteilen) beim ersten Einschalten des Oyos generiert.

Das bedeutet: Geht der Oyo kaputt (vom Laster überfahren, vom Hund gefressen, etc.), so nützt die Datensicherung alleine nichts; mit der Adobe-Software kann man (sofern man seine Adobe-ID abgeschrieben hat, sie entspricht nämlich nicht dem Thalia-Login) zwar seine E-Books nochmals "aktivieren", aber eine von sechs möglichen Aktivierungen ist unwiederbringlich verloren.

Ich vermute (ich habe die Nagelprobe mangels zweitem Oyo nicht gemacht), daß folgendes Kommando die Geräte-ID auf die SD-Karte sichert:

cp -a /rwdata/.adept /mnt/mmc1p1/adept-devicekey

Das sollte man sicherheitshalber zusammen mit seinem restlichen Oyo-Backup aufbewahren.

Entsichern der EPubs

Ironischerweise genügt aber bereits die Datei activation.xml aus dem Verzeichnis .adobe-digital-editions, welches beim Anschluß des Oyos an den PC lesbar ist, um die gesicherten EPubs zu entschlüsseln :-) Bei "I love cabbages" findet man zwei Python-Skripte: Eines, welches unter Windows und Mac OS den persönlichen Schlüssel extrahiert, sowie ein zweites, welches damit dann die eigenen EPub-Dateien entsperrt.

Aus Skript 1 ließ sich der MacOS-Part herausreißen, um ihn anschließend auf die activation.xml-Datei des Oyos anzusetzen. Letzteres habe ich probehalber hier gemacht: ineptkey-oyo.py_.gz.
In dem Skript steckt keinerlei Magie (und auch keine Krypto) - es extrahiert aus einer (ohne irgendwelche Kniffs lesbaren) XML-Datei einen einzelnen Knoten, wandelt die Base64-Darstellung zurück in die Binärdarstellung und speichert diese Daten in eine zweite Datei. Das Entschlüsseln geschieht hierin nicht.

Weitere Informationen

Inzwischen habe ich entdeckt, daß meine Erkenntnisse keine bahnbrechenden Neuerungen sind - andere haben hier ebenfalls schon Gehversuche unternommen. Daher hier einige Verweise zu anderen Seiten, die sicher noch weitere Informationen und Erfahrungen beinhalten:

Da die Firmware scheinbar keine Signatur benötigt, besteht die Chance, daß es Community-Entwicklungen geben wird, falls Thalia (und wer sonst noch hinter dem Oyo steckt) nicht in die Pötte kommen.