Ein kleines Reverse-Engineering-Projekt

Neulich habe ich den Jooki-Kinderlautsprecher vorgestellt. Er funktioniert wie ein normaler WLAN-Lautsprecher – nur mit der Besonderheit, dass das Programm über kleine Figürchen ausgewählt wird, die man auf das Gerät stellt.

Da ist eine Idee nahe liegend: Nämlich selbst Figürchen zu basteln, die mit Wiedergabelisten verbunden werden können. Klar, man kann auch mehr Figürchen kaufen. Aber eine interessante Herausforderung ist natürlich die Frage, ob man die auch selbst hinbekommt.

Das Geist-Figürchen gibt diesen Link zurück.

Dafür muss man als erstes herausfinden, wie die Figürchen mit dem Lautsprecher kommunizieren. Man tippt auf RFID und hält daher probehalber die EC-Karte an den Jooki. Und tatsächlich: Er reagiert darauf.

Der erste Schritt wäre herauszufinden, wie die Figürchen erkannt werden. Dazu benutze ich die App NfcActions, die es kostenlos fürs iPhone gibt. Da tippt man auf den Scnan-Knopf, hält ein Figürchen ans iPhone und voilà; entdeckt wird ein Link, der beim Antippen die Begrüssung «Hello 鬼 Ghost» zurückgibt.

Wenn man nur nach dem chinesischen Zeichen googelt, erscheint auf der Suchseite die Wikipedia-Seite zu Gespenst. Man liegt somit wahrscheinlich richtig, wenn man vermutet, dass dieses Zeichen ebenfalls etwas mit einem Gespenst zu tun hat.

… und der Server sagt Hallo zum Geist.

An der Stelle fragt man sich: Tut es irgend ein RFID-Chip? Oder muss der eine spezifische Botschaft aussenden? Die einfachste Lösung wäre, ein vorhandenes Figürchen zu klonen. Dafür gibt es im Netz die passenden Anleitungen. Dann hat man allerdings zwei Figürchen für die gleiche Playlist – auch nicht sehr sinnvoll.

Darum müsste man in einem nächsten Schritt einen programmierbaren RFID-Chip auftreiben oder sein Smartphone (eher Android als iPhone) dazu bringen, einen RFID-Chip zu imitieren.

Das ist dann der nächste Schritt. Falls ihr Ideen habt, wie man so eine Reverse-Engineering-Aktion am besten angeht, dann lasst es mich über die Kommentarfunktion wissen. Ich bin sicher, ich kann da viel von euch lernen!

Es besteht natürlich das Risiko, dass es gar nicht funktioniert. Denn es gibt auch einen Ndef payload, der einen länglichen alphanumerischen String enthält. Falls das eine kryptografische Absicherung ist, dann hat man Pech gehabt. Wäre schade – denn wer basteln will, sollte das tun dürfen, finde ich.

Übrigens: Wenn man gleich die ganze Box selbst bauen will, gibt es dafür mehrere Wege. Man findet die passenden Videos auf Youtube.

Und der grossartige Tipp eines Lesers ist Tonuino; eine Musikbox, in der ein Arduino steckt. Die Anleitung dafür findet sich hier.

Beitragsbild: Hello Ghost (Kellepics/Pixabay, Pexels-Lizenz)

Autor: Matthias

Computerjournalist, Familienvater, Radiomensch und Podcaster, Nerd, Blogger und Skeptiker. Überzeugungstäter, was das Bloggen angeht – und Verfechter eines freien, offenen Internets, in dem nicht alle interessanten Inhalte in den Datensilos von ein paar grossen Internetkonzernen verschwinden. Wenn euch das Blog hier gefällt, dürft ihr mir gerne ein Bier oder einen Tee spendieren: paypal.me/schuessler

7 Gedanken zu „Ein kleines Reverse-Engineering-Projekt“

  1. Der Webdienst scheint auch ungültige Tags zu akzeptieren, nur die Länge der „Codes“ muss stimmen. Ändert man das hinterste Segment, gibt es keine Änderung der Antwort. Ändert man den Parameter „s“, kommen andere Antworten. „s=0000“ ergibt „Hello unknown_4150“.

    Vermutung: das Token würde dann als „unknown_4150“ erkannt und ihm könnte eine Playlist zugewiesen werden.

    Testen können sollte man das mit einer App wie „NFC NDEF Tag Emulator“. Dort Payload Type URI wählen und den Link eintragen. Mit dem iPhone daneben kann man ja prüfen, ob die Antwort identisch ist mit dem vom richtigen Token.

    Mit etwas Glück funktioniert das schon. Ansonsten würde ich schauen, ob man irgendwie an die Firmware des Gerätes kommt (per Download von Update oder so). Evtl. ist das ein unverschlüsseltes Linux-Image.

  2. Würde auch gerne Tokens selbst basteln für den Jooki. Wenn ich mit der Andoid app „NFC Tools“ einen token auslese sehe ich das es ein NFC typ NTAG213 ist. Payload ist immer eine URL wie z.B.: https://s.jooki.rocks/s/?s=ruxow8lnn88uyeX (Ghost)
    Ich vermute die sind jeh nach Typ immer gleich. Nun müsste man entweder alle Tags die es gibt einmal auslesen und online stellen (so könnten andere, leere NFC tags beschreiben mit „Figuren“ die noch nicht im Besitz sind) oder raus finden wie dieser s parameter in der URL sich zusammen setzt. Jemand Ideen?

    1. Moin,

      mit einer „Magic/Changeable UID Ntag213“ Karte konnte ich erfolgreich eine Karte mit der Android App „Mifare++ Ultra“ Klonen.

      Könntest du auch mal deine Figuren mit der App einlesen und posten? Ich würde dies wenn ich zu Haus bin auch mal machen.

      Ich denke das ggf. die UID der Karte zur URL passen muss. So dass man entweder bekannte Figuren untereinander „tauschen“ kann oder den Algorithmus zur Bestimmung der URL Query Parameter bestimmen müsste. Bei der TonieBox werden mEn die Karten direkt online geprüft… weiß nicht ob es ggf. auch so ist.

      Der SSH Port ist offen beim Jooki aber nur mit Private Key Authentifizierung. Ich habe auch ein Serial UART Adapter direkt angeschlossen aber ich kann mich nicht einloggen, da Username und Passwort unbekannt (da kein Firmware Dump zur Hand).

      Der Jooki kommuniziert alles per HTTPS und ich konnte nichts per mitmproxy aufm Raspberry sehen.

      Gruß

      1. Hier meine Tags ausgelesen mit NFC Tools app da „Mifare++ Ultralight“ bei mir nicht funtzt:

        Tag Serial Payload
        Ghost 04:92:A7:6A:E7:4C:81 https://s.jooki.rocks/s/?s=Hjjpcx/mZwuveTF+
        Dragon 04:DA:B7:6A:E7:4C:80 https://s.jooki.rocks/s/?s=ruxow8lnn88uyeX+
        Whale 04:84:27:6A:E7:4C:80 https://s.jooki.rocks/s/?s=VZB/OLBwOiM5Mpnp
        Knight 04:33:B5:62:39:4D:80 https://s.jooki.rocks/s/?s=E0f2fmH5y2a4qk9g

        Da die box auch Offline funktioniert glaube ich nicht das die tags ausschließlich online geprüft werden. Vielleicht nur beim erstmaligem einrichten.

        1. Meine Figuren:
          https://pastebin.com/6CP0wGqf

          Ein Dump per Mifare++ bzw. der ersten 11×4 Byte sind interessant.
          Die scheinen immer identisch zu sein … bis auf die ersten 4 Byte (UID).

          xxxxxxxx (UID)
          5A314D80
          A6480000
          E1101200
          0103A00C
          340329D1
          01255504
          732E6A6F
          6F6B692E
          726F636B
          732F732F

          Ich habe leider meine „Magic“ Card geschrottet, da ich einfach ein paar Byte geändert habe und nun anscheind eine CRC Prüfsumme nicht stimmt und somit die Karte überhaupt nicht mehr gelesen werden kann.

          Naja ich habe noch ne neue bestellt:
          http://www.aliexpress.com/item/32964739752.html

          mEn sollte es möglich sein mit einem kompletten Dump eine Karte mit einer Figur von euch zu bespielen und dann zu nutzen.

          1. 04:46:8D:47 Drachen: jooki.rocks/s/?s=m2D29kX5NnmAKmhg
            04:C4:6E:26 Fuchs: jooki.rocks/s/?s=GqoCd44NNVB0q6KU
            04:98:98:8C Geist: jooki.rocks/s/?s=1RLkuDXrph6SZBpy
            04:27:8C:27 Ritter: jooki.rocks/s/?s=heGL6MeESfn9NOkd
            04:DE:67:35 Wal: jooki.rocks/s/?s=ytXjp/Xs/yaVe911

Kommentar verfassen