Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Dateien patchen (https://www.delphipraxis.net/195914-dateien-patchen.html)

günni0 6. Apr 2018 14:29

Dateien patchen
 
Ich befasse mich aktuell etwas mehr mit dem Thema Dateien Patchen.
Robocopy kann das scheinbar, aber ich möchte gerne eine eigene Lösung haben. Nur leider habe ich davon noch absolut keinerlei Ahnung und ich nehme auch stark an, dass Antivirenprogramme solches File I/O-Verhalten nicht sonderlich mögen.
Könnt ihr mir weiterhelfen? Ich würde bei 0 anfangen.

himitsu 6. Apr 2018 15:55

AW: Dateien patchen
 
Ich bin mir sicher, dass ich bei irgendwem vor kurzem sowas auf der Webseite sah (Lucky, Andy, Andreas oder so), aber find grade nix.
http://michael-puff.de
http://andy.jgknet.de/blog/
https://github.com/assarbad
...

Aber gibt ja noch mehr zu finden ...
Hier im Forum suchenDatei patchen
Hier im Forum suchenFile patchen
Bei Google suchendelphi file diff (wer einen Patch erstellen will, muß erstmal die Unterschiede finden)
https://codereview.stackexchange.com...binary-patcher
http://delphiworlds.com/applying-patches/
http://www.sunshine2k.de/articles/co...ut_Patcher.htm

Die einfachste Variante
* bytweise vergleichen
* geänderte Byteabschnitte suchen
* eine Liste erstellen (Start, Länge, Datenbytes)
** willst du keine Gruppierungen suchen, dann eben (Position, Byte)
* und das irgendwie in einer Datei speichern

Erweitern kann man das noch durch eine bessere Erkennungsfunktion.
z.B. nicht nur Positionsbezogen überschreiben, sondern auch Bytes/Bytegruppen löschen, einfügen oder verschieben

Am Ende eventuell noch komprimieren, um den Patch noch kleiner zu bekommen.

günni0 6. Apr 2018 16:09

AW: Dateien patchen
 
Zitat:

* und das irgendwie in einer Datei speichern
Klingt unglaublich kompliziert und nicht die Zeit wert. Ich höre schon die AntiViren-Sirenen läuten.

himitsu 6. Apr 2018 16:11

AW: Dateien patchen
 
Wieso?

Den Virenscannern ist sowas aber sowas von egal.
Sonst würden die bei fast jedem Programm meckern. (welche oft binäre Dateien erstellen)

Delphi-Referenz durchsuchenTReader, Delphi-Referenz durchsuchenTWriter (PS: die originalen DFM und die RES sind auch binär, DOC und XLS waren es auch usw.)
Delphi-Quellcode:
file of TDeinRecord

günni0 6. Apr 2018 16:13

AW: Dateien patchen
 
Ich kann mir gerade auch nicht vorstellen, wie das bei binären Dateien korrekt funktionieren soll.
Angenommen original gibt es die Bytes A B C und D. Nun kommt zwischen A und B 1 und 2, zwischen C und D 3 und nach D 4. Das kann doch nur schiefgehen.

himitsu 6. Apr 2018 16:17

AW: Dateien patchen
 
Zitat:

Zitat von günni0 (Beitrag 1398306)
Ich kann mir gerade auch nicht vorstellen, wie das bei binären Dateien korrekt funktionieren soll.
Angenommen original gibt es die Bytes A B C und D. Nun kommt zwischen A und B 1 und 2, zwischen C und D 3 und nach D 4. Das kann doch nur schiefgehen.

Das geht schon.
Nur wäre es nicht schlecht auch die Original-Daten mit im Patch zu speichern, um vorher zu vergleichen, ob die zu patchende Datei auch stimmt, denn sonst kommt definitiv Mist bei raus.
Eventuell auch noch einen Datei-Hash von vorher und nachher, um das Ergebnis zu prüfen.

Ob binär oder Text ist letztendlich egal ... sind alles nur Bytes.

KodeZwerg 6. Apr 2018 22:05

AW: Dateien patchen
 
Falls es helfen könnte kann ich einen "Patch-Generator" hochladen der Dir unter anderem ein Delphi Source dafür erstellt.
Anhand des erstellten Source kannst Du easy nachvollziehen wie ich's mache, auch eine Restore funktion ist enthalten.
Limitiert auf Dateien die gleich groß sind und bis max. 2GB Daten-Array (max. 1 GB Unterschiede pro Patch).
Es sind noch keine Funktionen integriert die einem Admin-Rechte o.ä. bereitstellen (würde man heutzutage meist brauchen um auf C:\ zuzugreifen)
Source vom Generator kann ich mit Absprache von Fukiszo bestimmt auch hochladen falls erwünscht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr.

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