Vergleichen Sie binäre Dateien mit verschiedenen Metadaten

414
Alexander

In Windows möchte ich alte Binärdateien mit neu erstellten vergleichen, um festzustellen, welche Dateien aktualisiert wurden. Beim Erstellen der Dateien gebe ich ihnen jedoch neue Metadaten-Details (wie Version usw.). Wenn Sie mit der rechten Maustaste auf die Datei klicken und zur Registerkarte "Details" gehen, können Sie die Dateiversion und andere Informationen anzeigen. Dies führt dazu, dass sich die Vergleiche unterscheiden. Kann man dies umgehen, um zu prüfen, welche Dateien gleich sind oder nicht?

0
Binärdatei ist ein geordneter Bytestrom ohne Struktur. Wenn Sie einige strukturelle Konstruktionen (z. B. Metadaten) darin unterscheiden, gehen Sie davon aus, dass es eine Struktur gibt, wohingegen Standardprogramme, die Binärdateien vergleichen, nichts davon wissen. Sie können also ein eigenes Vergleichstool erstellen, das auch diese Struktur berücksichtigt und nur den Datenbereich vergleicht. Wenn der Metadatenblock statisch ist (sowohl in der Position als auch in der Größe), können Sie Dateien mit Standarddienstprogrammen vergleichen und den Unterschied in den Metadaten ignorieren Adressen. Akina vor 6 Jahren 0
Der einzige Unterschied besteht wirklich in dem Dateiversionsattribut. Anstelle von "3.0.3" könnte es also "3.0.3.1" sein. Gibt es in Bezug auf die Standard-Dienstprogramme eine bestimmte, an die Sie gedacht und / oder empfohlen haben? Alexander vor 6 Jahren 0
* Der einzige Unterschied besteht wirklich in dem Dateiversionsattribut. * In binären Dateien gibt es keine Attribute. In binären Dateien gibt es überhaupt keine Struktur. Nach meinem Verständnis verwenden Sie den Begriff "binary" anstelle von "compiled executable" oder etwas Ähnlichem. Akina vor 6 Jahren 0
Ich spreche von .exe- und .dll-Dateien. Alexander vor 6 Jahren 0
Google für "Binärdateien vergleichen". Dies gibt Ihnen viele Werkzeuge, mit denen Sie dies tun können. Sehen Sie sich einfach die Unterschiede an und ignorieren Sie die Metadaten-Änderungen (seit ** Sie ** 'die Dateien erstellen' nehme ich an, dass Sie wissen, wo sich die Metadaten befinden). Jan Doggen vor 6 Jahren 0

2 Antworten auf die Frage

0
Alex

Update:
Ich lese Ihre Kommentare noch einmal und es sieht so aus, als würden Sie die Versionsinformationen von ausführbaren Dateien und Bibliotheken vergleichen, anstatt die Integrität der Dateien zu überprüfen.

Zunächst einmal müssen Sie verstehen, dass es keine Begriffe wie "Metadaten-Header" gibt. Ausführbare Dateien und Bibliotheken unter Windows verfügen über das Konzept so genannter "Ressourcen", die beim Kompilieren / Verknüpfen mit der endgültigen Datei verknüpft sind. Es ist keine Anforderung, daher kann der Programmierer Ressourcen verwenden oder einfach überspringen. In den Ressourcen einer Datei kann man praktisch alles, Symbole, Töne, Bilder, böswillige, verschlüsselte Nutzdaten usw. einpacken. In derselben Ressource kann der Programmierer zusätzliche Textinformationen angeben, z. B. die Dateiversion. Sie müssen verstehen, dass die Dateiversion in einigen Sprachen nicht automatisch weiterentwickelt wird. Es ist eine manuelle Aufgabe des Programmierers, die Dateiversion zu ändern.
Ok, lassen Sie sich zurück zum Thema. Ich denke, Sie möchten die Dateiversionen zwischen ausführbaren Dateien / Bibliotheken vergleichen, also können Sie das Befehlszeilenprogramm verwenden, um die Dateiversion mit Hilfe des offiziellen Dienstprogramms von Microsoft zu extrahieren sigcheck.exe, das Teil eines sehr nützlichen Dienstprogramms von Sysinternals ist Suite . Wenn Sie sigcheck.exeausführbare Dateien ausführen, die über Ressourcen verfügen, extrahiert dieses Programm die von Ihnen erwähnten "Metadaten":

Publisher: Company: Description: Product: Prod version: File version: 

Sie können weitere Felder analysieren, die Sie zum Vergleichen mit Ihrem bevorzugten Werkzeug benötigen.

Wenn Sie die Windows-API verwenden können, können Sie mithilfe von FileVersionInfo WinAPI "Metadaten" programmgesteuert extrahieren .

Vorherige Vermutung:

Da Sie bereits erwähnt haben compare old binary files with newly built ones, wäre die beste Option für Sie die Verwendung von Versionskontrollsystemen wie git oder fossil, die neben der bequemen Nachverfolgung von Quelldateien auch Änderungen in binären Dateien nachverfolgen können.

Sie können Binärdateien auch auf verschiedene Arten vergleichen:

Das Standard-Unix- diffDienstprogramm, mit dem Binärdateien verglichen werden können, würde lediglich feststellen, ob sie sich unterscheiden oder nicht.
( Wenn Sie Windows 10 verwenden, können Sie WSL verwenden, um das native Dienstprogramm von Unix auszuführen. )

Es gibt auch, visual binary diffdass sowohl unter Windows als auch unter Unix läuft.

Das Dienstprogramm des nativen Fensters fckann auch einen binären Vergleich durchführenfc /b file1 file2

Sie können die Explorer-Erweiterung verwenden, mit der der Hash von Binärdateien berechnet werden kann, beispielsweise HashCheck, DirHash oder sogar Microsoftfciv

Wenn Sie Microsoft Visual Studio verwenden, können Sie auch WinDiff verwenden

Für einen großen Vergleich von Dateien (in Terabyte-Größe) können Sie altes gutes HxD verwenden

Ein gut zusammengestellter Beitrag, leider habe ich einige dieser Vorschläge ausprobiert und alle haben auch den Header verglichen, was zu Klagen über Unterschiede führt. Alexander vor 6 Jahren 0
Ich denke, wir reden über Äpfel und Orangen :) Ich habe meine Antwort aktualisiert, ist es das, was Sie wollen? Alex vor 6 Jahren 0
Klarstellung: Wenn ich eine DLL mit der Dateiversion 1.0.0.1 und als file.dll baue. Ändern Sie dann die Dateiversion in 1.0.0.2, erstellen Sie sie und legen Sie sie in einem anderen Ordner ab. Ich möchte wissen, ob die Daten gleich sind (was sie in diesem Fall sind). Ich habe festgestellt, dass ich die Dateiversion durch Ändern des Puffers mit dem Programm StampVer ändern kann, um die gleichen Dateiversionen für beide Dateien zu erhalten und anschließend zu prüfen, ob sie gleich sind. StampVer kann jedoch kleine Versionen wie "2.4" nicht verarbeiten, da nur vier Eingaben wie "2.4.0.0" erwartet werden. Dies würde den Puffer überschreiben. Alexander vor 6 Jahren 0
"Ich möchte wissen, ob die Daten gleich sind" - Von welchen Daten sprechen Sie? Was ist "Puffer"? Wenn Sie sich selbst eine DLL-Datei erstellen, alles in Ihrem Quellcode oder Sie versuchen, die DLL von some1 mit Tools wie StampVer zu hacken? Bitte klären Sie genau, was genau ist. Sie verwenden ein allgemeines Wort wie "build", das allgemein als "build" -Datei aus dem Quellcode bekannt ist, aber ich denke, Sie haben diesbezüglich eine eigene Bedeutung. Alex vor 6 Jahren 0
Ich möchte wissen, ob sich Änderungen in meinem Quellcode ergeben oder ob diese nach Iterationen der Versionen unverändert bleiben. Die Daten (ist "das Programm", das ich geschrieben habe). Der Puffer, auf den ich mich beziehe, ist einfach die "Datenmenge, die den Ressourcen zugeordnet ist". Wenn die Saite zuvor 3 Zeichen hatte, brach natürlich alles, wenn sie auf 8 Zeichen eingestellt wurde. Wie auch immer, StampVer ist ein Umweg, aber mein Punkt ist, wenn die Dateiversion gleich ist. Dann wären die Dateien gleich und daher für Vergleiche mit Byte- oder Hash-Vergleichen geeignet. Alexander vor 6 Jahren 0
@Alexander Verstehen Sie mich nicht falsch, aber Sie haben wirklich ungewöhnliche Arbeitsabläufe. Ein Quellcode, der nur Ressourcen verwendet, tatsächliche Ressourcen werden jedoch vom Quellcode getrennt. Wenn Sie Daten in Ressourcen geändert haben, hat dies keinen Einfluss auf Ihren Quellcode. Ich weiß nicht, über welche Sprache wir sprechen, aber es gibt keine derartigen Ausdrücke als Puffer für Ressourcen. In klassischen Sprachen Ressourcen, die in "* .rc" -Dateien ohne Puffer angegeben sind. Dass der Linker nur weiß, wie er Ihren kompilierten Code mit Ressourcen kombiniert. Sie sollten im kompilierten Code nichts manuell ändern, insbesondere bei Tools wie StampVer. Alex vor 6 Jahren 0
@Alexander Wenn Sie `StampVer` verwenden, müssen Sie den binären Inhalt der Datei an der Stelle, an der sich die Versionsinformationen befinden, buchstäblich patchen, dies wirkt sich jedoch nicht auf Ihren eigentlichen Code aus. Solche Tools werden normalerweise in Umgebungen verwendet, in denen die IDE keine Funktionalität zum automatischen Inkrementieren der Version bei jeder Kompilierung hat. Ich kann es immer noch nicht verstehen, warum tust du das? Verwenden Sie geeignete Tools wie "git", "fossil", um alle Ihre Änderungen zu verfolgen, die alles, Quellcode, Ressourcen und sogar kompilierte Dateien nachverfolgen können. Alex vor 6 Jahren 0
0
Mr. Mendelli

Probieren Sie Angus Johnson's Resource Hacker aus . Mit diesem kostenlosen Tool können Sie die Ressourcentabellen in einer bestimmten ausführbaren Datei anzeigen (und sogar bearbeiten), solange das PE oder die Bibliothek mit der Version InfoRessource kompiliert wurde . Bitte beachten Sie, dass Sie die Ressourcendateien nicht in einer verschleierten Binärdatei anzeigen oder bearbeiten können.

Diese Anwendung eignet sich wahrscheinlich für das, was ich gefragt habe, als ich sie durchgeblättert habe. Obwohl Alex darauf hingewiesen hat, ist dies wirklich der falsche Weg, um als Workflow zu arbeiten. Ich werde diese Frage schließen und auf etwas Besseres umstellen, da dies das Kernproblem auf falsche Weise angreift. Alexander vor 6 Jahren 1