![]() |
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:
funktionieren - siehe
dumpbin /rawdata
![]() |
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?
|
AW: exe ohne Zeitstempel etc. vergleichen
Zitat:
Delphi-Quellcode:
liefert
fc /b
Code:
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.
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 |
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.
|
AW: exe ohne Zeitstempel etc. vergleichen
Wie wäre es mit einem Hash vergleich ? MD5 o.ä... ? Sind sie gleich, sind die Dateien gleich... 8-)
|
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.
|
AW: exe ohne Zeitstempel etc. vergleichen
Zitat:
|
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. |
AW: exe ohne Zeitstempel etc. vergleichen
Zitat:
|
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 19:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz