Dies kann ein Graubereich sein oder auch nicht, obwohl meine Absichten dies sicherlich nicht sind, deshalb möchte ich keine ethische Debatte über das Thema Reverse Engineering anstoßen.
Ich bin ein Typ-1-Diabetiker, der sich derzeit einer Pumpentherapie unterzieht. Ich bin ein OmniPod Benutzer, es ist ein Einweg-Pad, der an meinem Körper haftet und Insulin für drei Tage spendet. Es wird von einem persönlichen Diabetes-Manager [PDM] kontrolliert (siehe unten), der kontrolliert, wie viel Insulin während der Mahlzeiten ausgegeben wird, Blutzuckerwerte anzeigt, und es enthält einen Nahrungsindex für Kohlenhydrate, die unterwegs zählen.
alt text http://www.myomnipod.com/images/pdm-200.jpg
Das neue PDM verfügt über einen USB-Anschluss zum Herunterladen von Daten. Die Software ist für Windows-Benutzer kostenlos (ein Paket namens CoPilot), aber es gibt keine Mac-Unterstützung.
Nachdem ich den PDM an meinen Mac angeschlossen habe, hat er sich wie jedes andere USB-Gerät angeschlossen und mir ein lesbares Volume mit einer einzigen Datei mit einer IBF-Erweiterung präsentiert. Es wiegt 16KB.
Mein erster Instinkt bestand darin, es durch einen Texteditor zu geben und mir wurde eine sehr binär aussehende Datei präsentiert. Ich habe es dann über Strings (siehe unten) übergeben und mit einem Hex-Editor geöffnet. Obwohl ich außer den Strings unten nicht viel Information gewinnen konnte; keine Komprimierungsformatdetails oder irgendetwas.
%Vor%Was sollte mein nächster Schritt in diesem Prozess sein? Ich bin ein dynamischer Sprachtyp, also wären alle Ressourcen für Ruby großartig, oder Python. Gibt es Test-Reverse-Engineering-Prozesse?
Soweit es um die Daten geht, die ich erhalten möchte, sind es Informationen, die ich grafisch darstellen möchte, um mehr Informationen über meinen Fortschritt zu erhalten (Insulinaufnahme, Blutzuckerwerte, Zeitstempel); All das ist im Windows-Softwarepaket möglich.
Was ich als nächstes tun würde, ist zu versuchen, ein paar Zahlen zu finden. Es gibt eine Menge Möglichkeiten, wie die Zahlen codiert werden können:
Sie haben den Vorteil, dass Sie einige Zahlen kennen, die sich dort befinden, da Sie die Daten auf dem Bildschirm sehen können. Also würde ich nach diesen Zahlen in der Datei suchen (in den verschiedenen Formaten oben). Dies sollte Ihnen zumindest einige Daten geben.
Als nächstes nennst du Zeitstempel. Zeitstempel sind normalerweise ziemlich einfach, weil sie ausnahmslos 32-Bit-Integer ohne Vorzeichen sind, und Sie haben einen guten Ballpark-Bereich (Zeit (+/- +/- ein paar 100.000)). Achtet also auf Ints in der Nähe.
Sie können dies alles per Hand mit einem Hex-Editor machen oder ein kleines Skript schreiben. Sobald Sie beginnen, einige Daten zu erhalten, suchen Sie nach Mustern. Dies sollte viel dazu beitragen, interessantere Felder zu finden. Viel Glück!
Ich würde anfangen, nach Hex-Repräsentation bekannter Werte zu suchen. Hat das Gerät (wie abgebildet) einen Bildschirm oder können Sie in Windows schauen?
Wenn Sie, sagen wir mal, eine Reihe von Zahlen in Hex finden können, die Sie in der Windows-Version gefunden haben, können Sie vielleicht das Format "Datensatz" herausfinden. Wenn man es betrachtet, scheint es irgendeine Art von Header- / Versionsinformationen und eine Reihe von Datensätzen mit hexadezimierten numerischen Werten zu enthalten.
Das sollte dir einen guten Startpunkt geben.
Ich würde einfach eine VM für die Windows-Version ausführen und ollydbg verwenden, um sie rückwärts zu assemblieren. Das ist die beste Lösung, anstatt auf eine Binärdatei zu starren und zu erraten, welche Variablen mit welchem Offset korrelieren.
Es ist wahrscheinlich nicht die beste Idee, mit Ihrer eigenen Insulinpumpe zu plaudern. Angenommen, die Datei manipuliert die Pumpe.
Tags und Links ruby binary-data reverse-engineering