Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   exe ohne Zeitstempel etc. vergleichen (https://www.delphipraxis.net/170037-exe-ohne-zeitstempel-etc-vergleichen.html)

uligerhardt 27. Aug 2012 14:09

exe ohne Zeitstempel etc. vergleichen
 
Hallo zusammen!

Ich möchte zwei Kompilate eines Projekts daraufhin vergleichen, ob sie den selben Objektcode (?) enthalten. D.h. wenn ich das Projekt zweimal kompiliere, ohne etwas zu ändern, möchte ich als Ergebnis "gleich", unabhängig von irgendwelchen Zeitstempeln etc. Wenn ich vor dem zweiten Kompilieren etwas Relevantes am Code ändere, soll "ungleich" herauskommen. Scheinbar würde das mittels
Delphi-Quellcode:
dumpbin /rawdata
funktionieren - siehe hier. Leider habe ich kein dumpbin.exe und würde auch ungern extra deswegen ein VS Express installieren. Ich hab auch mal etwas mit tdump.exe herumprobiert, aber das unterdrückt mir auch die relevanten Änderungen. Hat jemand eine Idee?

DeddyH 27. Aug 2012 14:57

AW: exe ohne Zeitstempel etc. vergleichen
 
Ohne jetzt groß darüber nachgedacht zu haben: evtl. genügt es bereits, bei beiden Dateien den PE-Header "einfach" zu überspringen?

uligerhardt 27. Aug 2012 15:10

AW: exe ohne Zeitstempel etc. vergleichen
 
Zitat:

Zitat von DeddyH (Beitrag 1180134)
Ohne jetzt groß darüber nachgedacht zu haben: evtl. genügt es bereits, bei beiden Dateien den PE-Header "einfach" zu überspringen?

Ein
Delphi-Quellcode:
fc /b
liefert
Code:
00000108: 2F 6F
00000109: 7E 68
00016604: 6E D4
00016605: 80 73
00016624: 6E D4
00016625: 80 73
0001666C: 6E D4
0001666D: 80 73
0001668C: 6E D4
0001668D: 80 73
000166A4: 6E D4
000166A5: 80 73
000166BC: 6E D4
000166BD: 80 73
000166D4: 6E D4
000166D5: 80 73
000166EC: 6E D4
000166ED: 80 73
00016704: 6E D4
00016705: 80 73
0001671C: 6E D4
0001671D: 80 73
00016734: 6E D4
00016735: 80 73
0001674C: 6E D4
0001674D: 80 73
bei einem Exe der Größe $17C00, also scheinbar ein Unterschied am Anfang und einer eher am Ende? Meine Experimente mit tdump haben auch immer Unterschiede bei zwei Time Stamps ergeben.

DeddyH 27. Aug 2012 15:14

AW: exe ohne Zeitstempel etc. vergleichen
 
Dann müsste man wohl über die Dokumentation des Dateiformats (es sei denn, man hat das zufällig komplett im Kopf) herauszufinden versuchen, was genau an den entsprechenden Stellen steht und diese dann vom Vergleich ausnehmen.

haentschman 27. Aug 2012 15:53

AW: exe ohne Zeitstempel etc. vergleichen
 
Wie wäre es mit einem Hash vergleich ? MD5 o.ä... ? Sind sie gleich, sind die Dateien gleich... 8-)

DeddyH 27. Aug 2012 15:57

AW: exe ohne Zeitstempel etc. vergleichen
 
Es geht doch nicht darum, wie verglichen werden soll, sondern was. Ein Hash, der etwas auf sich hält, liefert doch auch nur dann gleiche Ergebnisse, wenn beide Dateien Byte für Byte gleich sind, und das sind sie ja nicht.

haentschman 27. Aug 2012 16:02

AW: exe ohne Zeitstempel etc. vergleichen
 
Zitat:

Ich möchte zwei Kompilate eines Projekts daraufhin vergleichen, ob sie den selben Objektcode (?) enthalten. D.h. wenn ich das Projekt zweimal kompiliere, ohne etwas zu ändern, möchte ich als Ergebnis "gleich", unabhängig von irgendwelchen Zeitstempeln etc
...sollte doch mit MD5 machbar sein. Von jeder EXE den Hash vergleichen. Wird der gleiche Quellcode kompiliert ist der Hash gleich. Voraussetzung: Die Versionsinformationen (Build) wird nicht erhöht. Dann würden sie sich unterscheiden.

himitsu 27. Aug 2012 16:02

AW: exe ohne Zeitstempel etc. vergleichen
 
Joar, also entweder läßt man die unerwünschten Bereiche von der Berechnung des Hash's aus, oder man füllt/überschreibt die unerwünschten Bereiche mit definierten Werten und berechnet dann den Hash über alles.

@haentschman: Delphi schreibt den Compierzeitpunkt mit rein und der ist jedesmal anders.

haentschman 27. Aug 2012 16:05

AW: exe ohne Zeitstempel etc. vergleichen
 
Zitat:

Delphi schreibt den Compierzeitpunkt mit rein und der ist jedesmal anders.
...echt jetzt ? Dann ist es nicht so einfach... :(

himitsu 27. Aug 2012 16:20

AW: exe ohne Zeitstempel etc. vergleichen
 
Ja, früher stand zwar da im PE-Header, wo der Wert reingehört, ein "MagicValue" und die Zeit mußte man sich dann an anderer Stelle in der Datei suchen, aber seit einer Weile schreiben die es auch endlich ordentlich rein. (wer es vorher schon richtig drin haben wollte, der konnte sich z.B. von den DDevExtensions helfen lassen)

Du kannst aber die Datei in den RAM laden, die PE-Header durchgehn, dann eben die entsprechenden Stellen überschreiben und eventuell auch noch in den Resourcen die VersionsInfo entfernen/überschreiben, vor dem Vergleichen/Haschen.

Bzw. man kann die EXE ja auch in ihre Einzelteile zerlegen und jede Section einzeln haschen (notfalls dann noch zusammenrechnen).


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz