Reverse Engineering2026

SALIOT — Galeriebeleuchtung ohne Hersteller-App steuern

Reverse Engineering der motorisierten SALIOT-Spots, damit sich ~160 Leuchten aus Code statt einzeln per Tablet-App steuern lassen.

Rolle: Analyse und Umsetzung

Reverse EngineeringBluetooth MeshCSRmeshAndroid / FridaBLE / GATTPython

Über das Projekt

Die motorisierten SALIOT-Spots in den Ausstellungshallen lassen sich nur mit der Hersteller-App bedienen, eine Leuchte nach der anderen, von Hand. Bei rund 160 Leuchten ist alles, was gleichzeitig über viele davon laufen soll, so nicht möglich — und es gibt kein dokumentiertes Protokoll und keine API zum Automatisieren.

Ziel war, die Leuchten aus Code ansprechen zu können. Ausgangspunkt war einzig die Android-App.

Vorgehen

  • APK zerlegen — die App von einem APK-Mirror gezogen und mit apktool + jadx aufgemacht.
  • Stack identifizieren — im Package-Tree stand com/csr/mesh: die Leuchten sprechen CSRmesh, Qualcomm/CSRs Bluetooth-Mesh-Stack, für den es Vorarbeit gibt.
  • Krypto herauslesen — Schlüsselableitung, Nonce und Frame-Format aus den obfuskierten Klassen rekonstruiert und byte-für-byte gegen die App verifiziert.
  • Nach Python übersetzen — Payload, Verschlüsselung, Framing und der CSRmesh-Best-Effort-Versand als kompakte Python-Implementierung.
  • Fehlersuche mit Instrumentierung — als die Writes stumm ignoriert wurden, ein Capture-Rig gebaut: Frida-Gadget in die App (altes Android-Telefon, ohne root), um zu sehen, was die App auf GATT-Ebene tatsächlich anders macht.

Ergebnis

Volle lokale Steuerung der Leuchten aus Python. Der eigentliche Fehler waren zwei vertauschte GATT-Control-Points bei älteren Leuchten — eine Woche falsche Fährte, zwei Zeilen Fix.

Die ausführliche technische Geschichte — Protokoll, Code, die Fallen — steht im Blogpost.