Updatesystem (Windows)
-
Hmmm, stimmt, in meinem Fall werden die Programmdateien im Spielverzeichnis gespeichert. Gerade dann muss ich mir da noch was einfallen lassen.
Registry kommt nicht in Frage, da es keine Installation gibt. Eine zusätzliche Textdatei möchte ich vermeiden, zumal die ja vom unwissenden User auch als "Müll" gesehen werden könnte und im Papierkorb landet..., auch wenn man es in die Readme schreibt...
Wie könnte ich noch (möglichst unkompliziert) vorgehen?
-
Eine Funktion schreiben die die .text section deiner Binary hasht.
MD5 oder SHA1 bietet sich da an.Dann baust du viele Abfragen ein wo der korrekte Hash vom Server angefordert wird und mit dem aktuellen verglichen wird.
-
@Icematrix
Verstehe ich leider nicht; gar nicht.
-
Als digitale Signatur werde ich wohl dies verwenden (SHA-256):
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=12669&lngWId=3
Eine fremde Implementation ist natürlich immer ein gewisses Risiko, aber eine "offizielle" C/C++ -Implementation fand ich nicht, falls es sowas überhaupt gibt.
Ich habe mich nun entschlossen, keine Funktion einzubauen, welche Dateien löscht, da ich dies mit höchster Wahrscheinlichkeit gar nicht brauchen werde. Eine .exe und eine .dll, dabei wirds wohl auch bleiben.
Eine Funktion, welche eine zusätzliche Datei herunterlädt, plane ich allerdings, sicher ist sicher.
-
@Icematix
Ah, irgendwas hab ich da überlesen.Also, warum nur die .text Sektion?
Zur Sicherheit möchte ich SHA-256 verwenden, oder denkst du, MD5/SHA-1 reicht für eine digitale Signatur aus?Ja, ich plane mehr als eine Abfrage im Programm.
> Security through obscurityClienten sind immer irgendwie knackbar, deshalb möchte ich es einem einfach möglichst schwer machen (Ach, noch irgendwelche Tipps dazu?).
-
Herwig schrieb:
Zur Sicherheit möchte ich SHA-256 verwenden, oder denkst du, MD5/SHA-1 reicht für eine digitale Signatur aus?
Der konkrete Hash-Algorithmus dürfte IMHO überhaupt keine Rolle spielen, weil es sowieso viel einfacher sein wird, die Abfrage komplett auszuhebeln, als eine Hash-Kollision zu verursachen.
-
Herwig schrieb:
Clienten sind immer irgendwie knackbar, deshalb möchte ich es einem einfach möglichst schwer machen (Ach, noch irgendwelche Tipps dazu?).
Wenn du es halbwegs sicher haben willst, wirst du um einen Kernelmode Treiber, der deinen Prozess und das System überwacht, wohl kaum herumkommen. Das sollte die gröbsten Kids draußen halten.
-
@Christoph
Ok@hack0r
Schade, so erfahren bin ich nicht.Naja, bin für jeden weiteren Tipp dankbar.
MfG
-
Es spricht doch nichts gegen eine Benachrichtigung wenn neue Updates verfügbar sind, machen doch viele Programme so und fragen bei der Installation ob das Feature aktiviert werden soll (ggf. kann man es dann über die Einstellungen (de-)aktivieren).
In deinem Fall könnte das Programm beim ersten Start den Benutzer fragen.Zur Signierung würde ich übrigens keinen Hash benutzen, den benutzt man nur um sicherzugehen, dass eine Dateie korrekt übertragen wurde, sondern eine public-/private-Key-Verschlüsselung, z.B. GPG um die Updates zu signieren. So lange du den privaten Schlüssel nicht veröffentlichst kann niemand Pakete erstellen die deine Software akzeptieren würde.
-
Herwig schrieb:
Es handelt sich um ein AntiCheat-System, da ist ein Zwangsupdate nunmal nötig
Hmm, wo ist denn der Vorteil bei einer public/private-Key Verschlüsselung? Warum jetzt nicht SHA-256? Da kann doch auch niemand die Datei so verändern, dass ein bestimmter message digest entsteht, oder?