Reverse Engineering GPS WatchLock Lock für den persönlichen Gebrauch

Das israelische Unternehmen Starcom Systems hat sich auf verschiedene Arten von GPS / GSM-Trackern und darauf basierenden Fernsteuerungssystemen spezialisiert. In diesem Fall habe ich ein Gerät in dieser Firma entwickelt: ein elektronisches Schloss mit den Funktionen eines WatchLock- GPS-Trackers , das Starcom zusammen mit Mul-T-Lock auf den Markt bringt.

Das Gerät kombiniert die Funktionen eines klassischen Vorhängeschlosses mit den Funktionen eines GPS / GSM-Trackers und ermöglicht dementsprechend die Steuerung von Parametern wie Öffnen / Schließen des Schlosses, physische Auswirkungen auf das Schloss (mithilfe eines Beschleunigungsmessers), aktuelle Position des Schlosses usw. Ereignisinformationsübertragung über GSM-Netz. Es ist möglich, zwei Optionen für die Kommunikation zu verwenden, einen GPRS-Kanal und (oder) SMS-Nachrichten (in diesem Fall stört mich die SMS-Kommunikation nicht wirklich, konzentrieren wir uns also auf GPRS). Die Daten werden an den Server des Unternehmens oder an den beim Händler installierten Proxy-Server übertragen, um einen unterstützten, freundlichen Service zu erhalten. Zum Beispiel Wialon oder erneut auf dem Server des Unternehmens. Ein privater Benutzer, der ein Gerät für den persönlichen Gebrauch gekauft hat, kann es nicht nutzen, ohne für Dienstleistungen von Drittunternehmen zu bezahlen. dass dies für Benutzer außerhalb des Unternehmens unnötig oder unnötig sein kann (oder optional eine hohe Anonymität erforderlich ist). Ich gehöre zu denen, für die die Funktionalität großer Überwachungsserver überflüssig ist, und die Möglichkeit, mit dem neuen Gerät zu spielen, ist motivierend. Also fangen wir an!

Toolkit




Konfigurator

Das Konfigurator-Programm wurde explizit von Entwicklern für Entwickler entwickelt (was in unserem Fall ein großes Plus für die Analyse sein wird), es gibt viele Debugging-Funktionen. Das wichtigste von ihnen ist für uns das Fenster zum Anzeigen des Datenverkehrs zwischen dem Gerät und dem Programm (der Datenverkehr wird unverändert ohne Verarbeitung angezeigt).

Es gibt zwei Möglichkeiten, das Gerät mit dem Programm zu verbinden, den lokalen Server im Programm zu starten und die Verbindung des Schlosses (oder Simulators) zu erzwingen:

1) Über GPRS sollten in diesem Fall die korrekten Einstellungen der Parameter (IP-Adresse und Port) zunächst in den Sperreinstellungen angegeben werden das ist in unserem Fall nicht möglich;
2) Kommunikation über ein Datenkabel, das mit einem Schloss geliefert wird.

Da ich sicher war, dass die Einstellungen meines Servers nicht vorhanden sein könnten, habe ich das Gerät physisch angeschlossen. Das Datenkabel ist ein regulärer USB-SERIAL-Adapter mit TTL- Pegeln von FTDI (die Standard-Wechselrate beträgt 115200 Baud (8 Bit, keine Parität, 1 Stoppbit). Es ist auch möglich, die Wechselgeschwindigkeit in den Einstellungen über den Konfigurator auf 57600 einzustellen.) . Da Sie wahrscheinlich kein natives Kabel haben, um das Gerät an einen Computer anzuschließen, können Sie jeden geeigneten USB-TTL-Adapter verwenden.

Informationspinout

Das Gerät ist verbunden und wir können den Datenverkehr zwischen dem Gerät und dem Programm beobachten. Die ungefähre Struktur der Pakete, der unveränderte Header und der sich ständig ändernde Körper des Pakets mit der gleichen Länge sind sofort ersichtlich, was uns sofort mitteilt, dass eine Verkehrsverschlüsselung verwendet wird (die Präsentation und das offizielle Benutzerhandbuch sagen uns dies ebenfalls). Wir werden den Header für eine spätere Analyse belassen, obwohl bereits erkennbar ist, dass er das Startbyte (0x24 ist das Zeichen '$', alle Pakete beginnen damit) und die Seriennummer des Geräts (9A 02 00 00 - 666) enthält. Wie finde ich den Verschlüsselungsalgorithmus und den Schlüssel? Hier ist alles logisch: Wenn das Konfiguratorprogramm den Inhalt des Pakets empfangen und anzeigen kann, entschlüsselt es ihn. Daher müssen der Algorithmus und der Schlüssel im Konfiguratorprogramm selbst gefunden werden.

Das Programm ist in Delphi geschrieben, was bedeutet, dass es in Assembler viele verschiedene Arten von Aufrufen in RTL und anderem Müll gibt, die die Analyse des Programms erschweren. Wie finde ich einen Verschlüsselungsalgorithmus? Ich entschied mich für den einfachen Weg und suchte ihn im Programmcode unter Verwendung der bekannten Konstanten bekannter Algorithmen. Die Methode funktioniert nicht immer, aber es gibt immer noch eine Chance. Als Ergebnis der Aufzählung habe ich die Konstante 0x9E3779B9 gefunden , was bedeutet, dass es sich um den TEA- Blockverschlüsselungsalgorithmus handelt ! Als nächstes war es notwendig zu verstehen (den Algorithmuscode bereits zu analysieren), welche spezifische Implementierungsoption für diesen Algorithmus verwendet wird. Es stellte sich heraus, dass XXTEA verwendet wird, aber der Algorithmus wurde leicht modifiziert, so dass wir, in der Annahme, dass Sie die Implementierung erraten und tatsächlich überprüft haben, dass das Ergebnis nicht passt, weiter suchen.

Jetzt wissen wir, dass der XXTEA- Verschlüsselungsalgorithmus verwendet wird., Schlüssel 128 Bit, Blockgröße 64 Bit, 32 Runden. Jetzt haben wir etwas mehr über die Paketstruktur gelernt. Der Header + Body des Pakets entspricht 64 Bit und einem zusätzlichen Byte, das anscheinend die Prüfsumme des Pakets ist. Auch hier ist es notwendig, den Disassembler zu verwenden und die Manipulationen mit dem letzten Byte unseres Pakets genauer zu untersuchen. Der Prüfsummenberechnungsalgorithmus stellte sich als XOR8 heraus. Die maximale Größe des Headers beträgt 70 Byte, die maximale Größe des Paketkörpers einschließlich der Prüfsumme beträgt ebenfalls 70 Byte. Somit stellt sich heraus, dass das Paket nicht länger als 140 Bytes sein kann. Dieser Wert wurde nicht zufällig gewählt, sondern ist anscheinend für das garantierte Versenden eines Pakets in einer SMS-Nachricht erforderlich. Jetzt haben wir ein vollständiges Bild der Struktur des Pakets und können es mit dem folgenden Bild visualisieren. Ich verzichte bewusst auf Assembler-Listings,Eulen-Zeichnungsanleitung . Ohne korrekte und detaillierte Beschreibungen dieser Auflistungen sind sie jedoch nicht sinnvoll und greifen auf einen separaten Artikel zurück. Stephen Hawking schrieb: "Jede Gleichung, die einem Buch hinzugefügt wird, halbiert seinen Umsatz."



Die Struktur des Pakets ist klar, der Verschlüsselungsalgorithmus ist bekannt. Wir können entweder ein Hilfsprogramm erstellen und ein bekanntes Paket ändern, beobachten, wie es vom Programm angezeigt wird, um die Werte bestimmter Felder des Pakets zu verstehen, oder das Verhalten des Programms beim Empfang des Pakets im Debugger analysieren. Da das Paket nicht sofort an einer Stelle des Programms verstanden wird, sondern nur bei Bedarf, wurde beschlossen, ein Assistentenprogramm zu erstellen, das sowohl mit dem Gerät als auch mit dem Konfiguratorprogramm kommunizieren kann.

Helfer

Das Bild ist bereits eine der neuesten Versionen des Programms, in der ich fast alle Felder der Hauptpakete analysiert habe, aber alles begann mit einem einfachen Formular für die Eingabe von Daten und die Anzeige des Ergebnisses. Detaillierte Informationen zu den Werten der Paketfelder und ihrer Struktur sowie zu allen Quellcodes der Projekte finden Sie im Repository unter Bitbucket: Watchlock-Tools (Projekte können in Pelles C gesammelt werden ).

Um mit dem Gerät arbeiten zu können, muss bekannt sein, wie das Gerät kommuniziert und sich selbst identifiziert. Ich habe zwei Haupttypen von Paketen identifiziert - (siehe wl_protocol.pdfaus dem Repository) PING und TRACKING. Das PING-Paket wird vom Gerät unmittelbar nach der Verbindung an den Server gesendet. Das Paket ist minimalistisch und enthält nur wichtige Informationen wie die Seriennummer des Geräts, die Uhrzeit des Geräts, die Art der Gerätehardwareplattform, die Firmware-Version, die GPS-Koordinaten und die Einstellungen für den Kommunikationszeitraum. Das TRACKING-Paket folgt normalerweise dem PING-Paket und enthält bereits weitergehende Informationen, z. B. den Grund für die Kommunikation, den Status der Sensoren, die Batteriespannung usw. Während einer eingerichteten Sitzung können wir wiederum Anforderungen an das Gerät senden. So können wir beispielsweise die festgelegte Zeit für die nächste Verbindung ändern, bei Bedarf das IMEI-Modem des Geräts anfordern und die Grundeinstellungen des Geräts lesen / schreiben. Somit können wir mit dem angeschlossenen Gerät fast alles tun, was benötigt wird.

Nach einem so langen Weg können wir bereits damit beginnen, unseren Server für den Empfang von Nachrichten vom WatchLock-Gerät zu implementieren. Der Server ist einfach, nur um das allgemeine Konzept zu testen und steht natürlich nicht einmal für spezielle Zwecke neben einem Beamten oder Dritten. Der Server verfügt über eine Webschnittstelle zum Anzeigen des aktuellen Status der verbundenen Clients und ermöglicht Ihnen, einen bestimmten Satz von Parametern daraus zu dekodieren.

Server testen

Infolgedessen erhielten wir unseren Datenempfangsserver mit Blackjack und allgemeinen Konzepten zur Implementierung des Austauschprotokolls in GPS-Trackern auf der Basis des WatchLock-Geräts. Dieser Artikel ist auch für andere Starcom-Geräte relevant, z. B. Helios (Auto-Tracker), Triton (Fracht-Tracker) und andere. Als weitere Verbesserung können wir vorschlagen, das Serverprogramm auf Linux zu portieren und mit Google Spreadsheet zu verknüpfen, um Punktinformationen zu speichern. Als Plattform für diesen Server können Sie einen Router verwenden, um eine kompakte Lösung für den persönlichen Bedarf zu erhalten.

Alle Informationen dienen ausschließlich dem persönlichen Gebrauch und ersetzen selbstverständlich keine offiziellen oder fremden Datenempfangs- und Verarbeitungsserver.

* Update 02/06/2015
Nachdem der Artikel veröffentlicht wurde, entfernte Startcom den Link zu ihrem Gerätekonfigurationsprogramm.

Jetzt auch beliebt: