Seite 1 von 2

Unmögliche Aufgabe?

Verfasst: 08.03.2018 17:16
von ¯\_(ツ)_/¯
Man kann MD5 Prüfsumme einer Exe erstellen. Das ist kein Problem. Und man kann die Prüfsumme in die Exe packen.
Auch kein Problem. Aber ist es möglich die selbe Prüfsumme in die Exe einzubunden die mit der neuen Prüfsumme
nach dem einbinden übereinstimmt? Problem ist sobald man die Exe verändert indem man die Prüfsumme einbindet
dann ändert sich die Prüfsumme der neuen Exe. Kann man MD5 Prüfsumme vorhersagen? Ich möchte in der Exe die
eigene MD5 Prüfsumme der selben Exe haben damit die Exe die Prüfsummme aus der eigenen Exe liest und mit
FileFingerprint(ProgramFilename(),#PB_Cipher_MD5) vergleicht ob die Exe von einem anderen Programm modifiziert
wurde. Das klingt unlösbar oder :?:

Re: Unmögliche Aufgabe?

Verfasst: 08.03.2018 18:34
von Fluid Byte
Du führst den Sinn einer MD5-Prüfsumme ad absurdum.

Re: Unmögliche Aufgabe?

Verfasst: 08.03.2018 18:46
von ccode_new
@¯\_(ツ)_/¯

Dein Text liest sich verwirrend.

Hierbei stimme ich dem fließenden Byte zu.

Re: Unmögliche Aufgabe?

Verfasst: 08.03.2018 19:01
von Dadido3
Es ist nicht unmöglich, nur schwierig.

Das prinzip bei Bitcoin ist ziemlich ähnlich, nur dass die Prüfsumme dabei nicht im Block, welcher gehasht wird, vorhanden ist. Außerdem wird bei bitcoin nach einem Hash gesucht, welcher mit einer bestimmten Anzahl von 0 Bits beginnt. Es macht aber keinen Unterschied, ob man nach einer Kette von 0 Bits, oder einer Kette von bestimmten Bits sucht.

Auf das Problem hier bezogen, auch wenn der Hash-Algorithmus nicht MD5, sondern SHA256 ist, könnte man es folgendermaßen vergleichen:
  • Anzahl von zu suchenden Bits des MD5-Hashes: 128 (Es muss ja der komplette Hash gefunden werden, welcher vorher festgelegt und in die exe-Datei geschrieben wurde)
  • Aktuelle Hashrate von Bitcoin: 25.295.477.650 GH/s
  • Aktuelle Difficulty von Bitcoin: 3290605988754 (Umgerechnet muss also der Hash des Blockes mit ca. 73 Null-Bits beginnen)
  • Durchschnittszeit zwischen gefundenen Bitcoin-Blöcken: 10 Minuten
Jetzt die Annahme man habe ein Gerät, welches mit gleicher Geschwindigkeit alle Möglichkeiten durchsucht:

Die Zeit wird proportional mit dem Suchraum größer, und da sich dieser mit jedem weiteren Bit verdoppelt wird die benötigte Zeit um den Faktor 2^(128-73) größer. Also 3,6*10^17 Minuten. (685 milliarden Jahre)
Also selbst mit der gigantischen Rechenleistung von Bitcoin ist das recht aussichtslos. Auch wenn man noch berücksichtigt, dass bei Bitcoin zwei mal mit SHA256 gehasht wird, und dass MD5 viel schneller zu Hashen wäre, wird man nicht wahrscheinlich nicht zu einer nutzbaren Rechendauer kommen.

Eine Sache wäre da aber noch: MD5 gilt nicht mehr als sicher, eventuell kann man gezielt Kollisionen oder andere Lücken ausnutzen, um schneller zu einem Ergebnis zu kommen.

Ich hoffe ich habe mich nirgends vertan.

Re: Unmögliche Aufgabe?

Verfasst: 09.03.2018 03:09
von NicTheQuick
Einfach die MD5-Summe an das Ende der Datei packen und beim Berechnen nicht miteinbeziehen. Anders geht es nicht. Im Übrigen nutzt man hier eher SHA256 und nicht das veraltete MD5.

Re: Unmögliche Aufgabe?

Verfasst: 09.03.2018 13:41
von ¯\_(ツ)_/¯
Tut mir wirklich sehr leid, dass ich mich ungenau ausgedrückt habe. Sorry :( Ich versuche es so zu erklären...
NicTheQuick hat geschrieben:Einfach die MD5-Summe an das Ende der Datei packen
Wenn ich das mache, dann ist die MD5-Summe veraltet bzw. stimmt nicht mit der MD5-Summe überein wenn ich die
geänderte Exe erneut auf MD5 prüfe. Ich meine so:
MD5.s = FileFingerprint("meineExe.exe",#PB_Cipher_MD5)
MD5.s -> Exe einbinden
MD5_2.s = FileFingerprint("meineExe.exe",#PB_Cipher_MD5)
Ergo: MD5_2.s ist anders als MD5.s. Ich will aber dass MD5 Summe gleichbleibt damit meine Exe feststellen kann ob
meine Exe geändert wurde.

Re: Unmögliche Aufgabe?

Verfasst: 09.03.2018 13:58
von Lord
Beherzige doch einfach mal den Ratschlag, welcher Dir hier gegeben wurde:
http://www.purebasic.fr/german/viewtopi ... 16&t=30681

Re: Unmögliche Aufgabe?

Verfasst: 09.03.2018 16:00
von Derren
¯\_(ツ)_/¯ hat geschrieben:
NicTheQuick hat geschrieben:Einfach die MD5-Summe an das Ende der Datei packen
Wenn ich das mache, dann ist die MD5-Summe veraltet
Nein.

Du hast ne Exe mit einer Funktion, die sich selber liest, dabei aber die letzten x Byte ignoriert (x = Länge der Prüfsumme), aus den gelesenen Daten die Prüfsumme generiert und mit den letzten x Byte der Datei vergleicht.
Zum Verteilen der Exe brauchst du ein zweites Programm, welches die komplette Exe einliest, die Prüfsumme bildet und dann die Prüfsumme an's Ende schreibt.

Re: Unmögliche Aufgabe?

Verfasst: 09.03.2018 16:10
von ¯\_(ツ)_/¯
Danke Derren, dann darf ich nicht FileFingerprint benutzen sondern StringFingerprint oder so so das nicht die
komplette Datei gechecktsummt wird sondern bis zum Ende wo der Platzhalter der Checksumme ist. Okay dann gings
damit. Aber mit FileFingerprint scheint also unmöglich zu sein. Ich werde es so machen wie du es gesagt hast
Danke! Nur der einzige Nachteil ist dass es trotzdem unsicher ist weil der Cracker könnte den Inhalt meiner Exe
verändern und die CHecksumme am Ende nur anpassen und so glaubt mein Programm es sei nichts verändert worden.
Deshalb hätte ich gerne FileFingerprint nur kann ich keine CHecksumme vorhersagen damit es auch nach der Exe-
Änderung stimmt.

Re: Unmögliche Aufgabe?

Verfasst: 09.03.2018 16:14
von Lord
Wenn's denn unbedingt so sein soll:

Code: Alles auswählen

Ergebnis$ = FileFingerprint(Dateiname$, Plugin [, Bits [, Offset [, Länge]]])
Länge ist hier Dein Freund.