Ändert sich eine Exe bei Ausführung? - Hashproblem

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Ändert sich eine Exe bei Ausführung? - Hashproblem

Beitrag von monta »

Ich hab nen kleines Verständnisprobelm.

Eine exe welche auf der Festpatte gespeichert ist, ändert sich doch eigentlich nach start nicht, sondern sie wird in den Speicher geladen und der Wert im RAM ändert sich, oder irre ich mich da?

Der Binärcode auf der festplatte müsste demnach doch unabhängig davon, ob das Programm läuft, oder nicht, identisch sein, oder :?:

Ich bin durch MD5 darauf gekommen.

Wenn ich die Exe sich selber hashen lasse erhalte ich einen anderen hash, als wenn ich die Exe durch ein zweites Programm hashe:

Aus der Exe selbst:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := MD5Print(MD5File(Application.ExeName));
end;
Aus einem externen 'Hasher':

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add('Dateihash für ' + Edit1.Text);
  Memo1.Lines.Add(MD5Print(MD5File(Edit1.Text)));
end;
Die exe selbst hasht sich mit: c629c81354b56f20bf64218b0851c55d

Das externe Programm ergibt:
wenn die Exe nicht läuft: c629c81354b56f20bf64218b0851c55d
wenn die Exe läuft aber: d41d8cd98f00b204e9800998ecf8427e

Wie verändert sich nun die Exe wärend der Laufzeit, so das diese unterschiedlichen Ergebnisse zustande kommen. Und wieso hasht die Exe sich selbst nicht so, wie das externe Programm die laufende Exe hasht?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Die exe ändert sich nicht. Nur darf dein Hasher nich auf die Exe zugreifen wärend sie läuft, deshalb wird der Hash für 0 erstellt. Hat mich mal 2h Suche gekostet dieses Phänomen :)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Danke.

Habs gerade probiert, ein leerer String erzeugt ja den selben hash.

Eigentlich logisch.

Mit anderen Worten, eine laufende Exe ist unmöglich zu hashen.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

wird nicht irgendwo noch die Datums werte gesetzt ?
ich dachte die werden auch in die exe rein geschrieben oder wird das vom Dateisystem gemacht ?
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Ich glaube, das macht das Dateisystem.

mori
Beiträge: 53
Registriert: Di 24. Okt 2006, 08:31
OS, Lazarus, FPC: Winux (L 1.1.xy FPC 2.7.1.z)
CPU-Target: xxBit
Wohnort: Mixdorf
Kontaktdaten:

Beitrag von mori »

Hi,
alles, was in eine exe reinschreibt, wird von den Virenscannern erkannt :-)
Mit dem Problem hatte ich mich mal beschaeftigt, als ich ein paar Settings
direkt ins ausfuehrbare Teil schreiben wollte. Gab nur Stress!

MfG mori

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Programme im Speicher werden auch über die Platte gepaget. Das könnte auch zu einem anderem hash-Wert führen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Man kann die exe schon hashen aber dann kannst du nicht die internen MD5 routinen nehmen, mit TFileStream.Create(MyFilename, fmOpenRead Or fmShareDenyNone);

Müsstest du eigentlich daraus lesen können (ungetested).

Unddann dir MD5 halt "zu Fuss" erstellen wie das geht kannst die ja in der MDFile routine abgucken.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten