Question

Je joue avec un jeu solo natif (non Web) que j'écris, et il m'est venu à l'esprit qu'avoir un jeu quotidien/hebdomadaire/de tous les temps liste des meilleurs scores en ligne (pensez au classement Xbox Live) rendrait le jeu beaucoup plus intéressant, en ajoutant une (petite) quantité de communauté et de compétition.Cependant, je crains que les gens voient une telle fonctionnalité comme une invitation au piratage, ce qui découragerait les joueurs réguliers en raison de scores incroyablement élevés.

J'ai réfléchi aux moyens évidents d'empêcher de telles tentatives (cryptage par clé publique/privée, par exemple), mais j'ai trouvé des moyens assez simples pour les pirates informatiques de contourner toutes mes idées (extraire la clé publique du binaire et ainsi envoyer de faux fichiers cryptés). partitions, par exemple).

Avez-vous déjà mis en place une liste des meilleurs scores ou un classement en ligne ?Avez-vous trouvé un moyen raisonnablement résistant aux pirates informatiques pour mettre en œuvre cela ?Si oui, comment avez-vous fait?Quelles sont vos expériences en matière de tentatives de piratage ?

Était-ce utile?

La solution

En fin de compte, vous comptez sur la confiance du client.Si le client envoie des rediffusions au serveur, il est assez simple de reproduire ou de modifier une lecture réussie et de l'envoyer au serveur.

Votre meilleur pari est de relever la barre en matière de triche au-dessus de ce qu'un joueur jugerait utile de surmonter.Pour ce faire, il existe un certain nombre de techniques éprouvées (mais souvent non mentionnées) que vous pouvez utiliser :

  1. Laissez les tricheurs sur liste noire dans un pot de miel.Ils peuvent voir leurs propres scores, mais personne d’autre ne le peut.À moins qu’ils ne vérifient en se connectant avec un autre compte, ils pensent avoir réussi à pirater votre jeu.
  2. Lorsqu’une personne est signalée comme tricheur, différez toute répercussion sur le compte jusqu’à un moment donné dans le futur.Faites en sorte que ce point soit aléatoire, dans un délai d'un à trois jours.Généralement, un tricheur essaiera plusieurs méthodes et finira par réussir.En reportant à une date ultérieure les commentaires sur l’état de leur compte, ils ne parviennent pas à comprendre ce qui les a amenés à être arrêtés.
  3. Capturez toutes les commandes des utilisateurs du jeu et envoyez-les au serveur.Vérifiez-les par rapport à d’autres scores dans un delta donné.Par exemple, si le joueur a utilisé l'action de tir 200 fois, mais a obtenu un score de 200 000, mais que les joueurs voisins dans le jeu ont tiré 5 000 fois pour obtenir un score de 210 000, cela peut déclencher un seuil qui signale à la personne une action supplémentaire ou humaine. enquête.
  4. Ajoutez de la valeur et de la persistance à vos comptes utilisateurs.Si vos comptes utilisateur contiennent des éléments à débloquer pour votre jeu, ou si votre jeu nécessite un achat, le poids d'une interdiction est plus important car l'utilisateur ne peut pas retrouver son ancien statut de compte en créant simplement un nouveau compte via un proxy Web.

Autres conseils

Aucune solution ne sera jamais parfaite tant que le jeu s'exécute sur un système sous le contrôle de l'utilisateur, mais vous pouvez prendre quelques mesures pour rendre le piratage du système encore plus difficile.En fin de compte, l’objectif ne peut être que de rendre le piratage du système plus problématique qu’il n’en vaut la peine.

  • Envoyez des informations supplémentaires avec les demandes de meilleur score pour valider côté serveur.Si vous obtenez 5 points pour chaque X et que le jeu ne contient que 10 X, alors vous disposez de quelques obstacles supplémentaires à franchir par le pirate informatique pour que son score soit accepté comme valide.
  • Demandez au serveur d'envoyer un défi aléatoire qui doit être relevé avec quelques octets du binaire du jeu à partir de ce décalage.Cela signifie que le pirate informatique doit conserver une copie vierge du binaire (juste un peu plus de problèmes).
  • Si vous disposez de clés de licence, exigez des scores élevés pour les inclure, afin de pouvoir interdire les personnes surprises en train de pirater le système.Cela vous permet également de suivre les tentatives invalides telles que définies ci-dessus, pour interdire aux personnes de tester le protocole avant même de soumettre un score valide.

Mais dans l’ensemble, rendre le jeu suffisamment populaire pour que les gens se soucient de le pirater est probablement un défi bien plus important.

Honnêtement, je ne pense pas que ce soit possible.

Je l'ai déjà fait en utilisant un cryptage à clé assez simple avec un binaire compressé qui fonctionnait assez bien pour la sécurité dont j'avais besoin, mais je pense honnêtement que si quelqu'un envisage de pirater votre tableau des meilleurs scores en ligne, ce sera fait.

Il y a des gens assez tristes qui se révèlent aussi être assez intelligents, à moins que vous ne puissiez tous les faire baiser, c'est une cause perdue.

Si votre jeu dispose d'un système de relecture intégré, vous pouvez soumettre des replays au serveur et demander au serveur de calculer le score à partir du replay.

Cette méthode n'est pas parfaite, vous pouvez toujours tricher en ralentissant le jeu (s'il est basé sur l'action), ou en écrivant un bot.

J'ai fait une partie de cela avec mes jeux Flash, et c'est vraiment une bataille perdue d'avance.Surtout pour ActionScript qui peut être décompilé en code quelque peu lisible sans trop d'effort.

La façon dont je l'ai fait est une approche plutôt conventionnelle consistant à envoyer le score et le nom du joueur en texte brut, puis un hachage des deux (correctement salé).Très peu de gens sont suffisamment déterminés pour faire l’effort de comprendre cela, et les rares qui le font le feraient de toute façon, annulant ainsi tout le temps que vous y consacrez.

Pour résumer, ma philosophie est de consacrer du temps à améliorer le jeu et de le rendre suffisamment difficile pour tricher.

Une chose qui pourrait être assez efficace est que le jeu soumette le score au serveur plusieurs fois pendant que vous jouez, en envoyant à chaque fois un peu d'informations de jeu, vous permettant de valider si le score est "réaliste".Mais c’est peut-être vraiment un peu exagéré.

C'est une question vraiment difficile.

Je n'ai jamais implémenté une telle chose mais voici une simple approximation.

Votre principale préoccupation est due au fait que les pirates informatiques devinent ce que fait votre application et envoient ensuite leurs propres résultats.

Eh bien, tout d'abord, à moins que votre candidature ne rencontre un grand succès, je ne serais pas inquiet.Faire une telle chose est extrêmement difficile.

Le cryptage ne résoudra pas le problème.Vous voyez, le cryptage aide à protéger les données en cours de route, mais il ne protège aucune des parties de la transaction avant que les données ne soient cryptées (ce qui peut être la principale vulnérabilité).Donc, si vous chiffrez le bien, les données resteront privées mais elles ne seront pas sécurisées.

Si cela vous inquiète vraiment, je suggérerai de brouiller le code et de concevoir le système de notation d'une manière qui ne soit pas complètement évidente.Ici, nous pouvons emprunter certaines choses à un protocole de chiffrement.Voici un exemple:

  1. Disons que le score est un nombre m
  2. Calculez une sorte de vérification du score (par exemple le CRC ou tout autre système que vous voyez en pieds).En fait, si vous en inventez un, aussi boiteux soit-il, il fonctionnera mieux)
  3. Obtenez la clé privée de l'utilisateur (D) depuis votre serveur distant (via une connexion sécurisée évidemment).Vous êtes le seul à connaître cette clé.
  4. Calculez X=m^D mod n (n étant le module public de votre algorithme de clé publique/privée) (c'est-à-dire cryptez-le :P)

Comme vous le voyez, ce n’est qu’une obscurcissement d’un autre genre.Vous pouvez descendre par là aussi longtemps que vous le souhaitez.Par exemple, vous pouvez rechercher les deux nombres premiers les plus proches de X et les utiliser pour chiffrer le CRC et l'envoyer également au serveur afin d'avoir le CRC et le score séparément et avec des schémas de chiffrement différents.

Si vous l'utilisez en conjonction avec l'obscurcissement, je dirais que ce serait difficile à pirater.Néanmoins, même cela pourrait être une ingénierie inverse, tout dépend de l'intérêt et de la capacité du pirate informatique, mais...sérieusement, quel genre de monstre prend autant d'efforts pour changer ses résultats sur un jeu ?(À moins que ce soit WoW ou quelque chose du genre)

Une dernière remarque

Obfuscateur pour .NET

Obfuscateur pour Delphi/C++

Obfuscateur pour assembleur (x86)

Comme le dit l'autre réponse, vous êtes obligé de faire confiance à un client potentiellement malveillant, et un simple moyen de dissuasion et un peu de surveillance humaine suffiront pour un petit jeu.

Si vous voulez faire preuve de fantaisie, vous devez alors rechercher des modèles de fraude dans les données de score, un peu comme une société de carte de crédit examinant les données de facturation.Plus le client communique d'état sur votre serveur, plus il est potentiellement facile de trouver un modèle de comportement correct ou incorrect via le code.Par exemple.disons que le client doit télécharger un journal d'audit du score basé sur le temps (que vous pouvez peut-être également utiliser pour permettre à d'autres clients de regarder les meilleurs jeux), le serveur peut alors valider si le journal des scores enfreint l'une des règles du jeu.

En fin de compte, il s’agit toujours de le rendre suffisamment cher pour décourager les tricheries sur le tableau d’affichage.Vous voudriez un système dans lequel vous pouvez toujours améliorer le code du serveur (plus facile à mettre à jour) pour faire face à toute nouvelle attaque sur votre système de validation.

@Martin.

C'est ainsi que je pense que Mario Kart Wii fonctionne.Le bonus supplémentaire est que vous pouvez laisser tous les autres joueurs regarder comment le détenteur du meilleur score a obtenu le meilleur score.Ce qui est drôle, c'est que si vous vérifiez le plus rapidement "Volcan Grognement" Time Trail, vous verrez que quelqu'un a trouvé un raccourci qui vous permet de sauter 95 % de la piste.Je ne sais pas s'ils ont toujours ce temps comme le meilleur temps.

Vous ne pouvez pas le faire sur une plateforme client non fiable.En pratique, il est possible de vaincre même certaines plateformes « de confiance ».

Il existe diverses attaques impossibles à détecter dans le cas général, modifiant principalement des variables en mémoire.Si vous ne pouvez pas faire confiance aux variables de votre propre programme, vous ne pouvez pas vraiment réaliser grand-chose.

Les autres techniques décrites ci-dessus peuvent aider, mais ne résolvent pas le problème fondamental de l'exécution sur une plate-forme non fiable.


Par intérêt, êtes-vous sûr que des gens tenteront de pirater un tableau des meilleurs scores ?J'utilise un jeu en ligne depuis plus de deux ans maintenant avec un tableau des meilleurs scores trivialement crackabe.Beaucoup de gens y ont joué, mais je n'ai aucune preuve que quelqu'un ait essayé d'atteindre les meilleurs scores.

Habituellement, le plus grand défenseur contre la triche et le piratage est une surveillance communautaire.Si un score semble plutôt suspect, un utilisateur peut signaler le score pour triche.Et si suffisamment de personnes signalent ce score, la validité de la rediffusion peut être vérifiée par les administrateurs.Il est assez facile de voir la différence entre un bot et un vrai joueur, s'il y a déjà un groupe de joueurs jouant au jeu en toute légitimité.

Les administrateurs doivent superviser uniquement les scores qui sont remis en question, car il existe une faible chance qu'un groupe d'utilisateurs prenne le train en marche pour supprimer un score parfaitement durement gagné.Et les administrateurs n'ont qu'à visualiser les quelques scores qui sont rapportés, donc cela ne leur prend pas trop de temps, encore moins pour un petit jeu.

Le simple fait de savoir que si vous travaillez dur pour créer un robot, juste pour être à nouveau abattu par le système de rapport, est en soi un moyen de dissuasion.

Peut-être que même le chiffrement des données de relecture ne ferait pas de mal non plus.Les données de relecture sont souvent petites et leur chiffrement ne prendrait pas beaucoup plus de place.Et pour améliorer cela, le serveur lui-même testerait la relecture à l'aide du journal de contrôle et s'assurerait qu'elle correspond au score obtenu.

S'il y a quelque chose que le système anti-triche ne trouve pas, les utilisateurs le trouveront.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top