Bin dabei ein Spiel zu schreiben, dass ich auch versuche durchzuziehen.
Aber jetzt bleibt mir vorweg die Frage, wie prüfe ich Dateien das sie keiner geändert hat?
denn ich würde am liebsten alles in Dateien auslagern.
Also, wieviel das kostet, wann man das machen darf, wieviel schaden dies macht usw.
Denn dann bin ich ja eigtl. um einiges flexibler...
Registriert: Mo Feb 24, 2003 18:19 Beiträge: 165 Wohnort: Cologne
die einfachste möglichkeit wäre wohl, eine checksumme irgendwo einzubauen... da gibts verschiedene möglichkeiten die verschieden schwer zu knacken sind...
das einfachste wäre wohl, sämtliche bytes jeder einer (binären) datei zusammenzuzählen, das ergebnis an die datei anhängen, beim lesen dann die letzten 4 bytes NICHT mitzählen und das ergebnis mit dem gespeicherten vergleichen... natürlich kann man auch das "zusammengezählen" etwas variieren (z.b. alle 4 bytes mal XOR benutzen anstatt Addition) um den Schutz zu erhöhen.. aber wirklich sicher is das bestimmt nicht...
eine andere möglichkeit wäre z.b die dateien zu verschlüsseln, aber dann wärst du nicht mehr wirklich flexibel...
ich denke mal "am besten" wäre es, ini-dateien o.ä. zu benutzen (kann man schnell & einfach editieren). Mit den darin enthaltenen Informationen kannst du wieder eine Checksumme errechnen und die irgendwo in einem Key speichern.. ich glaub so wurds in revolt gemacht.. und bestimmt auch in anderen spielen...
Also meinst die ganze Datei in Bytes umrechnen und dann in nen Key speichern.
Ok, kann ich ja dann die Größe auch ins Programm speichern.
Allerdings gibts auch manchmal die möglichkeit, dass die Datei auch wenn was anderes drin steht die gleiche Göße hat.
Oder nicht?
Oder mal so gefragt, wie wäre es wenn ich das Änderungsdatum speichere?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Auf den ersten Blick ne gute Idee, und ein paar Script Kiddys würden auch dran verzweifeln. Vorallem wenn du nicht sagst woran du ihre Machenschaften erkennst. Allerdings Interessiert das Cracker wenig. Erstens können die deine Exe umschreiben und 2. gibts bestimmt Tools mit denen man die Zeitkennung manipulieren kann.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
ich weiß jetzt nicht genau, wo und wie das letzte änderungsdaum gespeichert wird, allerdings glaube ich nicht, dass das ernsthafte Versuche unterbinden könnte die Datein zu verändern. Auch die von dir angesprochene Dateigröße bietet sobald man die Methode kennt (bei Sicherheitseinschätzungen sollte im allgemeinen davon ausgegangen werden, dass der Angreifer den Algorithmus zur Verfügung hat) wenig sicherheit.
Ich würde mich da eher an reds methode halten und über checksummen gehen, vll. aber nicht umbedingt durch einfache addition der werte, sondern über gängige hashverfahren gehen.
Registriert: Mo Feb 24, 2003 18:19 Beiträge: 165 Wohnort: Cologne
es müssen ja nicht einmal harte sanktionen erfolgen wenn eine spiel-datei verändert wurde... immerhin bringts (mir jedenfalls ) ziemlich spaß ein bisshen mit der engine rumzuspielen... ein einfaches "CHEAT USED" oder "Daten verändert - Laden/Speichern unmöglich" würde ja schon reichen.. aber das ist ja ne rein ethische frage. allerdings ist es für den bösen cracker ein bisschen schwieriger, diesen mechanismus zu umgehen, da er kein eindeutiges Event (wie z.b. eine MessageBox) hat, auf den er einen Breakpoint setzen kann - aber wie gesagt, es wird nur EIN BISSCHEN schwieriger
das änderungsdatum zu ändern halte ich für keine gute idee. da muss nur ein blöder installer oder ein daten-rettungsprogramm daherkommen und schon ist dein programm beleidigt Mit dem Typ TSearchRec kannst du übrigens die Erstellungszeit herausfinden (in Kombination mit FindFirst/FindNext/FindClose)...
Für sowas gibt es den MD5-Hash einer Datei.
Passende Komponenten findest du hier: http://www.cityinthesky.co.uk/delphi.html Diese Komponenten sind einfach genial, denn du kannst damit so ziemliche alle Prüfsummen und Verschlüsselungen anwenden, die verbreitet sind. Und das alles unter einem einheitlichen Interface.
Wird auch in PHP angewandt um die Prüfsumme eines Kennworts zu bilden (Das Forum hier verfährt genauso).
Du könntest bei Programmende die Prüfsummen deiner Dateien bilden und diese dann verschlüsselt speichern.
Beim nächsten Start werden die alten Summen entschlüsselt und von den Dateien werden erneut Prüfsummen gebildet. Vergleicht man beide nun miteinander und es treten Unterschiede auf, weißt du, dass da jemand gepfuscht hat.
Nebenbei, wenn dir Verschlüsselung zu unsicher ist, du kannst von den zu speichernden Prüfsummen auch lediglich die Prüfsumme speichern, anstatt die ganze List verschlüsselt zu speichern. So besteht dann absolut keine Möglichkeit für einen Cracker an die ursprünglichen Prüfsummen heranzukommen und deine Dateien sind ziemlich fälschungssicher.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Tipp: Checksum mehrmals im Program Abfragen, und jedesmal Inline das ist auch für Professionelle Cracker ärgerlich( Es wiederholt sich mehrmals ). Um es noch schwieriger zu machen kannst du verschiedene Methoden benutzen. Es gibt auch noch ärgerlichere Methoden wie MD5 Checksum( Weiss den namen leider nicht ). Was du auf jedenfall machen solltest ist um den Cracker noch mehr zu ärgern: Die Message "Cheat used" viel später bringen wie die eigentliche Abfrage. Dazu noch die Message "Cheat used" mehrmals Inline definieren. Auf die dauer gesehen bringt es nichts, aber es ist sehr ärgerlich für den Cracker!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Mehrmals abprüfen. Ich denke mal eine Überprüfung beim Zugriff sollte vollkommen ausreichen. Ich weiß zwar nicht an welche Dateien du gedacht hast aber Texturen, Modelle etc werden ein mal geladen und befinden sich dann im Speicher. Zusätzliche Überprüfungen sind dann recht nutzlos und rauben nur Performance.
Eine andere Möglichkeit wäre es evtl auch noch in dem du alle deine Dateien in einer Datei ablegst. Dadurch wird es schon mal schwieriger entsprechenden Inhalt ausfindig zu machen. Das Ganze kann man dann noch mit einer schnellen und recht einfachen Verschlüsselung versehen. Wenn du dann noch auf komprimierte Dateiformate setzt kann dir so gut wie nichts mehr passieren. Evtl solltest du auch auf eigene Formate setzen. Also in dem du den Header abwandelst etc. Das sind nur ein paar Ideen um deine Inhalte zu verschlüsseln.
PS: Habe bei einem Spiel gesehen, dass die Exe mit einer abgewandeten Variante von UPX komprimiert wurde. Du kannst praktisch diese Datei nicht mehr verändern ohne sie zu zerstören und Entpacken ging auch nicht, da upx sie nicht erkannt hatte. Man müsste sich so die UPX Quellen schnappen und versuchen reverse engeniering zu betreiben. Was einen recht hohen Aufwand darstellt.
Du sollst ja nicht während des Spiels abfragen, sondern während dem Ladevorgang!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.