S'assurer que les données enregistrées n'ont pas été modifiées dans un jeu avec des composants hors ligne et en ligne

8

Je suis dans la phase de pré-planification de la conception d'un jeu et je me demandais s'il y avait un moyen sensé d'empêcher les gens de modifier les sauvegardes dans un jeu avec des composants hors ligne et en ligne.

Le composant hors ligne permettrait au joueur de jouer à travers le jeu et le composant en ligne leur permettrait de jouer contre d'autres joueurs, donc je devrais m'assurer que les gens n'avaient pas modifié le code source / enregistrer les fichiers en mode hors connexion pour obtenir un avantage en ligne.

Jeu susceptible d'être développé en .Net ou en Java, tous deux malheureusement faciles à décompiler.

Omar Kooheji
la source

Réponses:

10

Être capable de décompiler / rétroconcevoir facilement le code client n'est vraiment qu'un léger obstacle. Des pirates informatiques entreprenants ont plié les exécutables à leur gré (malicieusement et non) pendant des années avant que des langages de haut niveau, faciles à décompiler comme C #, n'entrent en scène. La sécurité par l'obscurité seule n'est pas du tout une sécurité.

Toutes les données présentes sur la machine de l'utilisateur (code ou données d'actif standard) sont déjà essentiellement compromises. Vous ne pouvez pas vraiment vous protéger contre cela - si vous ne voulez pas que les gens éditent des données, ne les mettez pas sur leur machine, enregistrez-les sur vos serveurs. De même, si vous ne voulez pas qu'ils modifient le code dans le client, assurez-vous que le client n'a aucun contrôle sur quoi que ce soit d'utile.

Si ce n'est pas une option (par exemple, votre multijoueur est entièrement peer-to-peer), vous pouvez faire des choses comme calculer les hachages des ressources pertinentes et autoriser les gens à jouer entre eux uniquement si les hachages correspondent. Oui, quelqu'un pourrait soigneusement créer une modification de l'exécutable de manière à ce qu'elle renvoie un hachage différent, mais tout cela devrait signifier que le joueur fautif se désynchronisera et se déconnectera du jeu relativement rapidement car ses ressources ne correspondent pas au reste de les joueurs'.

Vous pouvez également utiliser un type de test de «règles de majorité» qui vous permet de déconnecter les joueurs dont la simulation a dérivé de la synchronisation avec les autres joueurs, donnant au joueur «hôte» (celui qui a commencé le jeu) le vote décisif.


la source
3

Si toutes les données sont générées côté client, vous ne pouvez rien y faire. Vous ne pouvez pas faire la différence entre une modification effectuée par votre logiciel et une modification effectuée par quelqu'un ou quelque chose d'autre prétendant être votre logiciel.

Un moyen de dissuasion que vous pouvez essayer est de crypter le fichier de sauvegarde, à l'aide d'une clé dans le logiciel. Malheureusement, si l'utilisateur est assez bon pour éditer un fichier de sauvegarde, il est aussi assez bon pour trouver la clé dans votre logiciel.

Vous pouvez empêcher les gens de modifier les sauvegardes en ne les stockant pas sur la machine du client, par exemple. en les téléchargeant sur le serveur - mais cela ne les empêche pas de télécharger une sauvegarde piratée en premier lieu! Les jeux en ligne résolvent ce problème en gardant en permanence l'état de jeu faisant autorité sur leur serveur, mais cela ne fonctionnera pas pour votre mode hors ligne.

Donc, vraiment, la réponse est non - tout ce que votre jeu peut faire pour modifier, masquer ou crypter les données peut également être fait par un pirate.

Kylotan
la source
Je me rends compte que c'est à peu près ce que Josh a déjà dit, mais j'ai eu une panne d'Internet et je n'ai pas pu poster cela il y a 30m lorsque je l'ai tapé pour la première fois!
Kylotan
1

Lorsque nous commencions à peine à développer notre jeu actuel, nous voulions également avoir un mode de jeu hors ligne. L'idée était de permettre aux joueurs de jouer à travers les niveaux de jeu hors ligne, puis de synchroniser leur progression lorsqu'ils se connectent. Nous avons donc longuement réfléchi à la manière de prévenir la tricherie. La conclusion était: nous ne pouvons pas. Il n'y a vraiment aucun moyen de laisser les joueurs jouer hors ligne et être sûrs à 100% qu'ils n'ont pas triché.

Ça ne fait rien
la source
1

Le hachage est une solution simple utilisée avec le téléchargement de fichiers. Hachez le fichier de sauvegarde et stockez cette "empreinte digitale" quelque part. Lorsque vous le chargez, hachez le fichier et vérifiez-le par rapport à l'empreinte digitale. S'ils ne correspondent pas, le fichier a été modifié.

Bien sûr, si quelqu'un décompile votre code, vous ne pouvez rien faire. Pour cette réponse, cela signifie qu'ils peuvent également stocker le hachage du fichier de sauvegarde modifié.

Une autre option serait d'envoyer l'empreinte digitale à un serveur quelque part, où l'utilisateur final ne peut pas le modifier manuellement s'il a modifié le fichier de sauvegarde. Ceci est similaire à ce que fait iTunes lors de la restauration des images iPhone.

cendres999
la source