Frage

Daten oft wird gespeichert-Programm-spezifischen binären Dateien, für die es wenig oder gar keine Dokumentation.Ein typisches Beispiel aus unserem Bereich ist-Daten aus einem instrument, aber ich vermute, das problem ist allgemein.Welche Methoden gibt es, um zu versuchen zu verstehen und zu interpretieren, die Daten?

Einige Grenzen.Die Dateien sind nicht verschlüsselt und es gibt kein DRM.Die Art und das format der Datei ist spezifisch für den Autor des Programms (d.h.es ist nicht ein "standard-Datei" - wie etwa *.tar - dessen Identität ist verloren gegangen).Es ist (wahrscheinlich) keine absichtliche Verschleierung, aber es kann einige amateur Anstrengungen, um Platz zu sparen.Wir können davon ausgehen, dass wir ein Allgemeines wissen darüber, was die Daten und wir können erkennen, einige, aber wahrscheinlich nicht alle, der Felder und arrays.

Davon ausgehen, dass die Mehrheit der Daten ist numerisch, wobei Skalare und arrays (wahrscheinlich 1 - und 2 - dimensionalen und manchmal unregelmäßig oder dreieckig).Es gibt auch einige Zeichenfolgen, wahrscheinlich Namen von Personen, Seiten, Daten und vielleicht ein paar Stichworte.Es wird code in das Programm liest die binäre Datei ist, aber wir haben keinen Zugriff auf die Quelle oder den assembler.Als ein Beispiel, es wurde geschrieben von einem VAX Fortran-Programm oder einige frühe Unix-oder Windows als OLE-Objekte.Die Nummern können big - oder little-endian (die nicht bekannt ist am start), aber es ist wahrscheinlich.Wir können haben verschiedene Versionen auf verschiedenen Rechnern (z.B.Cray).

Wir können davon ausgehen, wir haben einen relativ großen Korpus von Dateien - einige hundert, zu sagen.

Wir können davon ausgehen, zwei Szenarien:

  1. Wir können, führen Sie erneut das Programm mit verschiedenen Eingaben so wir können tun Experimente.
  2. Wir können nicht führen Sie erneut die Programm - wir haben einen festen Satz von Dokumenten.Dies hat eine sanfte ähnlichkeit der Entschlüsselung von historischen Dokumenten in einer unbekannten Sprache (z.B.Linear-B -).

Eine partielle Lösung noch akzeptabel sein können - D. H.möglicherweise gibt es einige Felder, keine lebende person, die nun versteht, aber die meisten anderen sind interpretierbar.

Ich bin nur daran interessiert, Open-Source-Ansätze.

UPDATE Es ist eine Verwandte SO-Frage (How to reverse engineer binäre Dateiformate für die Kompatibilität Zwecke), aber die Betonung ist etwas anders.UPDATE Clever Vorschlag von @brianegge Adresse (1).Verwenden truss (oder ggf. strace auf Linux) dump write() und ähnliche Aufrufe im Programm.Damit sollte zumindest die Sammlung von Aufzeichnungen auf die Festplatte geschrieben.

War es hilfreich?

Lösung

Dies ist eine interessante Frage, ich denke, die Antwort ist, dass Reverse-Engineering Binärformaten eine aquired Fähigkeit ist, aber es gibt Werkzeuge gibt, die helfen können.

Ein Werkzeug ist WinOLS , welche für die Interpretation und Bearbeitung Fahrzeugmotormanagement-Computer Binärbilder (meist die numerischen Daten in den Lookup-Tabellen) ausgelegt. Es hat Unterstützung für verschiedene Endian-Formate (wenn auch nicht PDP, glaube ich) und Anzeigen von Daten in verschiedenen Breiten und Offsets definieren Feldbereiche (Karten) und visualisieren sie in 2D oder 3D mit allen Arten von Skalierung und Offset-Optionen. Es hat auch ein heuristischen / statistischen automatischen Kartensucher, die für Sie arbeiten könnten.

Es ist ein kommerzielles Werkzeug, aber die kostenlose Demo lässt Sie alles tun, aber Änderungen an der binären speichern und Motormanagement-Funktionen verwenden, die Sie nicht brauchen. Sie sagten, Sie nur daran interessiert sind in Open-Source-Lösungen, aber das ist Stackoverflow und jemand anderes vielleicht nicht so wählerisch sein.

Andere Tipps

Alle Dateien haben einen Header. Starten Sie von dort sehen, was Ähnlichkeiten Sie zwischen 2 Dateien haben, beseitigen gemeinsame „Signaturen“ und arbeiten mit den Unterschieden. Sie sollten die Anzahl der Datensätze, Exportdatum und ähnliche Dinge markieren.

Gemeinsame Teile zwischen den beiden Header nur allgemeine Signaturen angesehen werden kann, und ich denke, man kann sie ignorieren

Wenn Sie auf einem System sind, die Angebote Truss , einfach Ihr System beobachten ruft zu schreiben und Sie werden wahrscheinlich eine gute Idee haben. Es ist auch möglich, dass das Programm eine Datei mmap wird, und kopieren Sie direkt aus dem Gedächtnis, aber das ist weniger verbreitet.

$ truss -t write echo foo
foowrite(1, " f o o", 3)                                = 3
write(1, "\n", 1)                               = 1

Es kann auch sinnvoll sein, einen Blick auf die binären zu nehmen. Auf Unix-Systemen können Sie objdump , um das Layout der binären anzuzeigen. Dies wird auf die Code- und Datenabschnitte verweisen. Sie können dann öffnen die binäre ein Hex-Editor und auf die spezifischen Offsets gehen. Vielleicht interessiert in meinem Tipps für Solaris Binärdateien .

  • Diff 2 oder mehr Dateien zu suchen Sie nach Gemeinsamkeiten.Das hilft oft, Sie zu identifizieren header-Blöcke und andere Teile der Datei.

  • Endianness ist in der Regel ziemlich leicht zu erarbeiten - mehr-erhebliche bytes neigen dazu, zu null werden viel mehr als oft weniger bedeutsame, wenn Sie also ein Muster wie "00 78" oder "78 00 Uhr", Sie können machen eine gute Vermutung an, welches byte das msb.Dies ist jedoch nur dann helfen, wenn Sie gearbeitet haben (in etwa), was die vorhergehenden Daten, so dass Sie wissen, wie die Daten ausgerichtet ist.

  • Suchen leicht identifiziert werden Daten - strings sind der erste Ort, um zu starten, weil Sie leichter zu entdecken.Diese oft geben Sie Hinweise, wie Sie in der Regel eingebettet in der Nähe bezogene Daten, als stanadard-Elemente in Header, etc.Wenn die strings sind unicode-dann werden Sie in der Regel sehen die Buchstaben des Textes getrennt durch null-bytes, die Ihnen dabei helfen, endianness und Daten Angleichung an diesem Punkt in den Daten.

  • Ein gemeinsames format Ansatz (wie IFF) speichern Datenblöcke, die jeweils mit einem kleinen header (z.B.ein 2-oder 4-byte-ID, eine 2-oder 4-byte-Größe für den block, dann werden die Daten des Blocks).Im Allgemeinen verwenden Menschen sinnvoll (zu Ihnen) chunk-IDs, so können Sie werden leicht zu erkennen - Wenn Sie herausfinden, was aussieht wie ein tag, überprüfen Sie folgende Daten um zu sehen, ob es sieht aus wie eine Länge (look, der viele bytes in den Daten zu sehen, wenn es sieht aus wie es ist einen anderen header).Wenn Sie identifizieren können, so ein format, brechen Sie die "eine große Datei zu" problem nach unten in ein "vielen kleinen Dateien" problem whichmakes es viel einfacher.(Jedoch, eine Menge von Gerätedaten neigt dazu, werden "optimiert" werden, damit es kompakt ist, in welchem Falle Programmierer oft wegwerfen bequem extensible Formate und packe alles zusammen, Verpacken bits und in der Regel macht die Dinge für Sie viel schwieriger)

  • Suchen Sie nach bekannten Werte.Wenn Ihr Gerät mit der Anzeige "Temperatur:40" dann ist es möglich, dass Sie finden diesen Wert direkt in der Datei gespeichert.(Es ist auch üblich, verwenden Sie Skalierungsfaktoren oder fixed-point-Werte, also 40 kann dargestellt werden als (z.B.) 40*10 = 400 oder 40*256 = 10240 obwohl)

  • Wenn Sie können Steuern Sie das Gerät genug:erstellen Sie einige einfache Dateien.Was Sie zu erreichen versuchen, ist die kleinste Dateien, die Sie bekommen können aus dem Gerät zu minimieren, werden die Daten, die Sie haben zu prüfen.Dann machen Sie eine änderung auf dem Gerät, das bewirkt, dass die Datei zu verändern - versuchen zu minimieren die Anzahl der Veränderungen - und greifen Sie die Datei erneut.Wenn Sie die Datei-format ist "offen" (nicht komprimiert oder verschlüsselt), dann sollten Sie in der Lage sein zu identifizieren, die bytes, die sich geändert haben.

  • Wenn Sie "laden", um die Dateien wieder auf das Gerät können Sie auch in der Lage sein, zu erstellen Sie Ihre eigenen Dateien, ändern Sie einfach einen Wert zu sehen, wenn Sie bemerken, die änderung des Verhaltens auf das Gerät.Wenn Sie verwalten zu schlagen einfachen Werten das kann gut funktionieren, aber oft finden Sie können Sie nur brechen das format der Datei, und das Gerät wird nicht werden in der Lage zu Lesen, Ihre Daten auf allen.

Ich hatte gehofft, es war ein magisches Programm, das Muster funktionieren könnte, versuchen verschiedene Endian usw. Aber es scheint nicht zu sein!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top