35 votes

Créer un jeu à l'épreuve du piratage en Javascript

Supposons que vous ayez créé un jeu en ligne en HTML5/JavaScript. Tout le code serait téléchargé dans le navigateur de l'utilisateur, qui exécuterait le jeu.

Comment empêcher quelqu'un de copier le jeu sur son ordinateur, et d'y injecter des fonctions et des modules pour tricher ? Par exemple, ils pourraient écrire une fonction qui vise automatiquement le sprite ennemi le plus proche.

Existe-t-il un moyen fondamental de protéger les gens de ce genre de choses en concevant le code de votre jeu d'une certaine manière ?

6 votes

Je ne pense pas que ce soit possible. Le JS est entièrement côté client, et cela signifie que le client peut faire à peu près tout ce qu'il veut.

35 votes

Règle n° 1 pour les jeux multijoueurs en ligne : Ne jamais faire confiance au client.

5 votes

J'ai fait marche arrière parce que j'aime la photo, c'est une photo qui m'aide à exprimer mes sentiments.

46voto

JSBձոգչ Points 25069

Qu'est-ce qui empêche quelqu'un de copier le jeu sur son ordinateur, et d'injecter des fonctions et des modules pour tricher ?

Rien.

Y a-t-il un moyen fondamental de protéger les gens de faire ce genre de choses chose en concevant le code de votre jeu d'une d'une certaine manière ?

Non.

6 votes

Google a effectué un travail intéressant pour protéger son jeu Pacman d'il y a quelques semaines.

3 votes

Vous pouvez faire tout un tas d'efforts pour obscurcir votre code afin de le rendre plus difficile, mais comme l'indique @js-bangs, il n'y a fonctionnellement aucun moyen de l'empêcher entièrement. S'il fonctionne côté client, le client le possède et peut le modifier.

2 votes

@Chris Steward : Mais en même temps, le PacMan de Google est un bon exemple que même l'obfuscation la plus dure ne pourra pas finalement empêcher les gens de le copier . Après tout, les gens ont pu le sauvegarder

38voto

Luca Matteis Points 19338

C'est pourquoi la plupart des jeux JavaScript reposent lourdement sur un état du serveur pour empêcher les tricheurs.

0 votes

Par curiosité, avez-vous moyenne "relais" ou "compter" ? Les deux ont un sens, mais chacun semble impliquer quelque chose de légèrement différent. =)

7 votes

Toutes les autres réponses ont dit ce n'est pas possible, ce qui est bien sûr faux. C'est possible - il suffit de faire tous les calculs sur le serveur. Cela introduit un décalage, ce qui rend difficile un jeu en temps réel. Plus vous voulez du temps réel, plus vous devez sacrifier la sécurité (ceci est vrai pour tous les jeux, pas seulement ceux en javascript).

2 votes

BlueRaja : et comment cela pourrait-il empêcher quelqu'un d'écrire une fonction qui s'autoproclame au sprite le plus proche ? Ok, ça rend les choses comme les wallhacks plus difficiles, mais l'entrée de l'utilisateur peut toujours être feinte, et la sortie peut toujours être analysée et affichée différemment.

12voto

DisgruntledGoat Points 21368

En bref, non. Cependant, vous pouvez obscurcir le Javascript pour le rendre beaucoup plus difficile.

Pour des choses comme les scores, un utilisateur pourrait en théorie POSTER n'importe quel score à votre gestionnaire script. Dans ce cas, vous pourriez utiliser une session et renvoyer régulièrement des messages au serveur via AJAX.

0 votes

Même avec la pire des obfuscations, ils peuvent l'interpréter à la volée en utilisant Firebug et découvrir ce qui fait quoi.

0 votes

Kim Jong Woo : Oui, mais ce n'est toujours pas simple.

2 votes

Assez simple pour quelqu'un qui a l'intention de pirater ou de tricher dans les jeux multijoueurs, ce qui, je pense, est ce qui préoccupe le PO.

9voto

josefx Points 8417

Quelques réflexions

Côté serveur :

  • Stocker l'état interne des jeux côté serveur et vérifier les entrées envoyées par les clients sur le serveur.

  • Autoaim : Créer des faux sprites qui sont invisibles pour les joueurs normaux, s'ils sont frappés trop souvent vous avez un bot. (ne fonctionnera pas toujours car les bots peuvent être mis à jour pour vérifier l'invisibilité).

  • vérifier le temps de réaction du client aux changements sur le serveur, vérifier s'il y a trop de réactions trop rapides. (Il doit accepter un grand nombre de réponses rapides avant de réagir, car un humain pourrait réagir rapidement et le temps doit tenir compte du délai du réseau pour attraper quelque chose). Donnez au joueur une sorte de captcha, un joueur normal ne le verrait jamais.

Côté client :

  • utiliser l'obfuscation pour rendre plus difficile l'interface avec votre code

  • vérifier les fonctions définies dans les hacks que vous connaissez. Doit être modifié/mis à jour souvent car les créateurs de ces hacks peuvent les contourner.

  • Conception du jeu : en rendant votre jeu moins répétitif, il est plus difficile d'écrire des outils/robots pour celui-ci.

  • mettre à jour le client pour modifier certaines parties de sa structure de temps en temps. Bien que cela n'arrête pas les bots, il faudra travailler pour les faire fonctionner. Il faut soit le rendre transparent pour l'utilisateur, soit le déguiser en une nouvelle fonctionnalité.

Important : assurez-vous que votre interface serveur vérifie l'entrée de l'utilisateur, l'obscurcissement et les vérifications côté client n'aideront pas contre quelqu'un qui écrirait son propre client.

8voto

NG. Points 12989

J'aime la question, et bien qu'il y ait probablement de meilleures réponses, voici quelques-unes de celles qui me viennent à l'esprit et qui pourraient (ou non) fonctionner :

  • Obfuscation. Oui, ce n'est pas garanti et quelqu'un peut éventuellement l'atteindre, mais c'est une douleur au cul à gérer parfois.
  • Générer le JS avec un nouveau jeton temporaire à chaque fois. Vous pouvez peut-être créer un modèle pour le fichier .js en exécutant le code et en insérant un jeton généré par le serveur qui diffère pour chaque instance. Le jeton pourrait être temporaire et constituer un moyen de valider l'authenticité du code.
  • Il y a probablement un moyen de déterminer l'emplacement approprié du script en cours d'exécution - mais cela pourrait probablement être truqué.

En général, c'est difficile, et toutes les suggestions ci-dessus peuvent être contournées. Je suppose que la clé est de faire en sorte qu'il soit difficile pour eux de tricher, mais étant donné qu'il y a des tricheurs même pour les jeux en mode en ligne sécurisé, il va être difficile d'empêcher les jeux JS d'être sensibles à cela aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X