Frage:
Welche Techniken werden beim Reverse Engineering eingebetteter Firmware verwendet?
drewbug
2013-04-03 23:49:31 UTC
view on stackexchange narkive permalink

Diese Frage bezieht sich auf eine andere Frage, die ich hier gestellt habe.

Ich arbeite mit einer kleinen Agentur für öffentliche Verkehrsmittel an einer ordentlichen offenen Stelle. Quellprojekt, das uns hilft, lokalen Entwicklern Echtzeitdaten anzubieten. Ein wichtiges Datenelement, das wir benötigen, ist die aktuelle Busroute, auf der sich ein bestimmtes Fahrzeug befindet. Derzeit gibt es nur ein einziges elektronisches System, das diese Informationen kennt: die Fahrzeuglogikeinheit (VLU), mit der jedes Fahrzeug ausgestattet ist.

Wenn ein Busfahrer eine Route beginnt, gibt er seine ID-Nummer in das Feld ein Tastatur am Bediengerät (OCU). Diese ID-Nummer wird an die VLU gesendet, die dann den entsprechenden Text auf den LED-Zeichen am Bus anzeigt.

Auf der OCU befinden sich zwei DB9F-Ports. Im Handbuch werden sie als "J1708 PORTS" beschrieben. Einer von ihnen ist mit der VLU verbunden, und der andere steht mir zum Anschließen zur Verfügung. Wenn ich eine Verbindung dazu herstelle, erhalte ich einige Daten, über die Sie in meiner anderen Frage lesen können.

Ich möchte die Firmware der VLU zurückentwickeln und sehen, wie sie funktioniert entscheidet, welche Daten gesendet oder wie empfangene Daten interpretiert werden sollen. Soweit ich weiß, verwendet die Firmware RTTarget-32 als Basis. Ich glaube, dies ist der Fall, weil die folgenden Zeichenfolgen in der Firmware-Datei enthalten sind:

  RTTarget-32 5.0 16-Bit-Startcode (c) 1996,2006 On Time InformatikOn Time RTOS-32 5.0 Disk Loader (c) 1996,2009 Pünktlich  

Ich habe keinen Link zur Firmware-Datei gepostet, da ich weiß, dass das Verknüpfen mit externen Dateien auf SE-Sites im Allgemeinen verpönt ist. Wenn ich es jedoch hochladen sollte, welchen Dateihost sollte ich verwenden?

Wie in meinem Fragentitel angegeben, welche Techniken sollte ich verwenden, um mit dem Reverse Engineering dieser Firmware-Datei zu beginnen?

Zwei antworten:
#1
+6
dyasta
2013-04-05 02:29:07 UTC
view on stackexchange narkive permalink

Das Umkehren des Firmware-Formats kann je nach Schwierigkeitsgrad viele verschiedene Dinge beinhalten.

Sie würden mit der manuellen Analyse mit einem Hex-Editor beginnen.

Wenn die Daten gut strukturiert erscheinen, mit Ausnahme von Blöcken, die komprimiert erscheinen (hier und da einige Klartextzeichen sichtbar), dann es ist wahrscheinlich nicht verschleiert.

Wenn es wie alles Kauderwelsch mit wenig oder keiner Struktur aussieht (z. B. wenige Läufe von Nullen), müssen Sie den Bootloader (vom Gerät ausgegeben) zerlegen, um den Verschleierungsalgorithmus zu extrahieren, sofern Sie dies können Erraten Sie es nicht.

Identifizieren Sie von dort aus die Header-Felder und Bestandteile des Firmware-Images. Die meisten haben einen Kernel und ein komprimiertes Dateisystem. Oft enthält der Header Offsets, die auf die Komponenten der Firmware verweisen.

Sie sollten BinWalk ausprobieren, um festzustellen, ob gemeinsame Komponenten für das Dateiformat identifiziert werden . Es ist genau für diese Aufgabe ausgelegt. Es funktioniert im Allgemeinen am besten unter Linux-Firmwares, die gängige Open-Source-Dateisysteme wie squashfs oder jffs2 verwenden, aber hier ist es einen Versuch wert.

Sie sollten wahrscheinlich auch Ihr eigenes erwähnen: https://code.google.com/p/firmware-mod-kit/ ... tatsächlich scheint es, dass "binwalk" teilweise auf einigen Skripten von "firmware-mod-" beruht. kit`. Und das Umgekehrte gilt auch, Ihr Projekt * enthält * `binwalk` :) ... hat vor ein paar Minuten gerade` extract-firmware.sh` verwendet, also konnte ich nicht anders, als zu kommentieren. +1
Ich finde es immer seltsam, Dinge zu erwähnen, an denen ich beteiligt bin. Ja, die neueren Skripte des Firmware Mod Kit basieren auf Binwalk, um Firmware-Segmente zu identifizieren, und handeln dann basierend auf den Binwalk-Identifikationen. Wenn Sie das Layout aufzeichnen, können Sie es später rekonstruieren. Binwalk selbst kann jetzt eingebettete Dateisysteme extrahieren. Craig Heffner arbeitet an beiden, also schreibt er ihm zu.
#2
+3
cb88
2013-04-04 00:30:29 UTC
view on stackexchange narkive permalink

On Time verfügt über ein Evaluierungskit hier, mit dem Sie mehr darüber erfahren können. Es sieht so aus, als würde es auf ziemlich normaler Hardware laufen. Im schlimmsten Fall müssen Sie möglicherweise ein EEPROM ausgeben und dieses mit IDA oder ähnlichem dekompilieren.

http://en.wikipedia.org/wiki/J1708

Das Protokoll für diese Ports ist offen. Sie können also sogar über Ihren eigenen Code damit kommunizieren. Seltsam, dass es sich eher um RS-485 als um RS-232 handelt (es handelt sich im Grunde genommen um eine Busversion von RS-232, und Sie würden wahrscheinlich eine andere Karte benötigen, um sie zu verwenden). Auf der dortigen Wiki-Seite sind mögliche übergeordnete Protokolle aufgeführt, die Sie möglicherweise untersuchen möchten.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...