Fortschritte

Endlich habe ich angefangen die Sensordaten richtig aufzuzeichnen, schon kommt die nächste Nachricht: Es wurde die offizielle App entdeckt! Leider ist das nicht unbedingt ein Grund direkt in Jubelstürme auszubrechen, da ein Reverse Engineering der App zum einem nicht ganz trivial ist. Die Entwickler haben die interessanten Teilen, also die Auswertung der Rohdaten zu Zuckerwerten, in nativen Code geschrieben und somit kann man das nicht einfach mal so Nachlesen wie bei anderen Android Apps. Zum anderen ist es ein rechtliches Problem, da es hier nicht um irgendwelchen Code von irgendwelchen Entwicklern geht, sondern dahinter Firmen (Abbott und AirStrip) stehen die ein Interesse daran haben ihre Algorithmen zu schützen…

Die Zeit wird zeigen wie lange es dauert bis irgendwer den Code verstanden hat und eine entsprechende Lösung gebaut haben wird… Wahrscheinlich werde ich es nicht sein, da ich noch in der Abwägung schwanke, worauf ich mich mit so einem Unterfangen einlasse.

Aber auch bei mir geht es weiter: Quasi zeitgleich mit einer anderen Person habe ich scheinbar aus meinen aufgezeichneten Daten angefangen die SensorID zu extrahieren (Die die auch das Messgerät für den aktiven Sensor anzeigt). War nicht besonders schwer nur etwas seltsam, da Abbott eine Seriennummer gewählt hat, die fast direkt aus der Tag-UID zu lesen ist, wenn man das Alphabet mit den Zahlen kombiniert und dabei die Buchstaben B,I,O,S weg lässt (also diese Zeichenfolge erhält: 0123456789ACDEFGHJKLMNPQRTUVWXYZ ). Dann muss man nur noch die UID in 5 Bit Schritten lesen und den entsprechenden Buchstaben aus der Liste wählen. Dann kommt noch eine 0 davor und man hat die Seriennummer. Soweit so schön, aber nicht vollständig. Ein Blick in die LibreLink Sourcen verrät das die 0 nicht fest da drin steht, sondern von dem System abhängt. Zwar scheint es derzeit nur Systeme im Umlauf zu geben die dabei eine 0 erzeugen, aber es kann in Zukunft auch jeder Buchstabe sein, der in der obigen Zeichenfolge enthalten ist.

An diesem kleinen Beispiel sieht man schon, wie kompliziert es eigentlich ist, ein solches System zu verstehen. Mein nächstes Ziel ist es jetzt die Version des Sensors zu finden und zu verstehen.

Dazu kommt noch, dass ich glaube ich einige Sachen gefunden habe, wie ich die restlichen Daten in einem Sensor beeinflussen kann (Also die Daten die bei den bisherigen Algorithmen keine Berücksichtigung fanden). Eventuell werd ich mal einen Blick in die Sourcen wagen, was der original Source damit macht, aber eigentlich möchte ich das lieber weiter selber herausfinden.

Wer sich wirklich für die Sourcen der offiziellen App interessiert dem sei hier eine kleine Übersicht gegeben wie man generell an eine solche Analyse gehen kann. Dies ist nicht der einzige, der beste oder der richtige Weg, es ist meiner der mir in der Vergangenheit oft geholfen hat Probleme in Apps die ich verwenden musste, ohne in die original Sourcen schauen zu können, zu Debuggen:

  • Man entzippe das APK und kann sich dann schon mal eine Übersicht über die Struktur der Anwendung erstellen
  • Man benutze einen dex/apk-decompiler um sowas wie Sourcen zu erhalten
  • Man lädt diese Sourcen in sein Entwicklungstool der Wahl (meist Eclipse bei mir) und fängt an den Code zu „Massieren“, also durch jede Datei zu gehen und zu schauen wo es Probleme gibt, was für Probleme das sind (schlechter Decompile, fehlende Abhängigkeiten, …)
  • Wenn man den Code soweit durch gegangen ist, schaut man sich gegebenenfalls die native Libraries an
    • Wieder verschafft man sich zunächst einen Überblick per ObjDump oder ähnlichen Tool
    • Dann geht es in einen Disassembler
    • Jetzt fängt der Spass an, je nach dem was für einen Binärcode man gerade in den Disassembler geschickt hat, hat man nun Assemblercode in ARMeabi, ARMeabi-v7a, ARM64-v8a, intel irgendwas, x86 oder x86_64. Wer nicht weis wie sowas aussieht:
         XOR	EAX, EAX	; zero out eax
         MOV 	ECX, 10 	; loop 10 times
      Label:			; this is a label in assembly
         INX 	EAX   	; increment eax
         LOOP 	Label		; decrement ECX, loop if not 0

      aus der Intel x86-64 Assembler Einführung. Eine Lib wie die der LibreLink-App hat dann gerne mal zehntausende solcher Zeilen die man sich mühsam und mit viel Hintergrundwissen erstmal erarbeiten muss…

Da ich nicht spezialisiert auf Reverse Engineering bin, sondern nur hin und wieder mal was nachschauen muss, überlasse ich diese Arbeit gerne anderen, die sich dann auch mit den rechtlichen Problemen die daraus entstehen auseinander setzen können.

Zu guter letzt gibt es auch noch Neuigkeiten für den BlueReader. Gestern gab es ein weiteres Planungstreffen und jetzt wird in dem nächsten Schritt eine gewisse Anzahl von ersten Prototypen gebaut um Erfahrungen mit dem Design sammeln zu können. Ich hoffe das wir diese Geräte in den nächsten zwei Wochen dann endlich haben werden und mit den Tests anfangen können.
Sobald diese erste Serie getestet wurde, wird wahrscheinlich noch eine zweite Serie produziert um Fehler aus der ersten Serie ausmerzen zu können und Features einzubauen die wir jetzt in der ersten Serie noch weggelassen haben.
Dieser Prozeß wird sich dann so lange wiederholen bis wir dann keine Fehler mehr sehen. Danach wird es wahrscheinlich schon die erste Serie geben!