Techniques pour empêcher les clients non officiels dans les jeux en réseau?


22

Dans les jeux en réseau multi-joueurs, quelles techniques existent pour essayer de s'assurer que les utilisateurs se connectent à l'application cliente officielle, et non à une application cliente piratée?

Je me rends compte qu'il n'y a probablement aucun moyen infaillible de le faire, mais je m'intéresse plutôt aux techniques qui peuvent être utilisées pour atténuer le problème.

Je suis particulièrement intéressé par toutes les techniques qui peuvent être utilisées pour les jeux basés sur le Web, mais j'imagine que la plupart peuvent être appliquées de manière générale.

Merci!


Certains pensent que le cloud computing généralisé approche à grands pas. Cela résout en quelque sorte cette question.
Laurent Couvidou

Réponses:


13

C'est un problème intéressant, mais je pense que vous posez la mauvaise question ici. Permettez-moi de commencer par détecter l'approche client piraté:

Si votre client est exécuté du côté de l'utilisateur, il peut faire ce qu'il veut avec votre code (jusqu'à ce qu'il soit trop compliqué pour lui, mais il y aura toujours quelqu'un de plus intelligent dans la ligne). Tout ce que vous pouvez faire, comme le chiffrement codé en dur des messages entre le client et le serveur, la création de certificats client ou même la création d'un client pour calculer sa somme de contrôle, peut et avec suffisamment de temps, sera décompilé et craqué. J'ai vu un logiciel fourni avec un dongle, ce dongle avait une partie du code de l'application, mais pour pouvoir l'exécuter, le dongle a d'abord vérifié le crc de l'application s'il n'était pas tempéré .. bien sûr après un certain temps, le dongle a été piraté aussi .. plus si vous faites une mise à jour logicielle, vous devez renvoyer le dongle ..

En plus de cela, l'utilisateur peut utiliser votre propre client pour tricher - en simulant le mouvement de la souris et les clics par exemple.

La question devrait donc être - comment détecter un joueur de bot?

Ici, vous avez quelques options - mesurer le temps entre les clics, mesurer la vitesse des mouvements de la souris - la souris se déplace-t-elle exactement du point A au point B plusieurs fois et frappe exactement les mêmes cordes? Le mouvement de l'utilisateur est-il reproductible? Si lorsque la ressource que l'utilisateur collectait était épuisée, l'utilisateur passe-t-il à une autre action ou attend-il sur place pendant des heures? À la fin de la journée, vous finissez par écrire du code de reconnaissance des modèles.


4
Vos techniques de vérification de bot peuvent être battues en quelques minutes en ajoutant quelques bruits autour de l'action du bot.
ASTER

+1 à cela; étant donné que la prévention est impossible (et si quelqu'un est vraiment déterminé, il pourrait même aller jusqu'à pirater ses chauffeurs, ce qui devrait le souligner), vous devriez certainement vous concentrer sur la détection. J'ajouterais également que toute communauté raisonnable qui peut se constituer autour d'un jeu finira probablement par se contrôler, de sorte que vous pouvez également travailler pour fournir des outils qui aident à cela.
Maximus Minimus

2
La prévention programmatique seule est impossible, c'est pourquoi des jeux comme WoW ont des tonnes d'administrateurs qui vérifient les gens qui font des choses répétitives et leur posent des questions pour prouver qu'ils sont humains.
DampeS8N

1
@AsTeR Ce ne sont là que quelques idées pour pousser dans la bonne direction. Il existe de nombreux articles et présentations qui abordent ce problème plus profondément, comme celui-ci par exemple: iis.sinica.edu.tw/~swc/pub/bot_trajectory.html
Kamil

5
"Donc la question devrait être - comment détecter un joueur de bot?" Je ne suis pas d'accord, il existe plusieurs façons de tricher sans avoir de bot. Par exemple, laisser le client obtenir trop d'informations ou lui faire confiance.
Matsemann

9

Dans les jeux en réseau multi-joueurs, quelles techniques existent pour essayer de s'assurer que les utilisateurs se connectent à l'application cliente officielle, et non à une application cliente piratée?

Je ne pense pas que ce soit la bonne façon d'aborder cela ou du moins pas la seule chose qui devrait vous préoccuper.

  1. Assurez-vous de n'envoyer des informations spécifiques au client qu'à chaque client (par exemple, un client n'a pas besoin de savoir ce qu'un monstre par exemple peut laisser tomber, il suffit d'envoyer les informations après l'avoir tué, et uniquement aux clients spécifiés)

  2. Faites la plupart des calculs côté serveur (positionnement, etc.). Le client fait ses propres calculs MAIS ne peut jamais envoyer ses propres valeurs uniquement ses actions. Le serveur doit vérifier si cette action est valide et comment elle affectera le jeu.

  3. 1 et 2 sont généralement combinés avec des prédictions. Le client et le serveur essaient de prédire certains comportements. Le client déplace par exemple le lecteur mais toutes les x secondes ou ms. reçoit une correction du serveur

  4. Facturer les utilisateurs pour leurs comptes et non pour le client, de cette façon, un utilisateur peut se procurer une version piratée mais ne peut pas jouer sans compte.

Avec 2, vous pouvez vous assurer qu'il n'y a pas de hacks d'argent, de hacks de position ou de hacks muraux, etc., mais les bots ont toujours été un problème pour de nombreuses entreprises. Même les grands noms des entreprises comme Blizzard ont du mal avec ça. Ce que vous pourriez faire, c'est limiter le temps de lecture par compte, afin que quelqu'un ne puisse pas être en ligne plus de 540 heures par mois. Je me souviens d'un bot qui utilisait les valeurs de couleur des monstres + l'entrée de la souris pour cultiver XP. Une autre façon serait de fournir un programme supplémentaire qui vérifie les autres applications en cours d'exécution et l'accès à la mémoire, mais cela apporte une poignée de nouveaux problèmes.

Modifier:

Articles très bien écrits pour les débutants: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/


Ouais, je suis d'accord que ce n'est pas la seule chose qui devrait nous préoccuper. Nous faisons déjà la plupart de ces choses, mais certains éléments exposés du côté client sont inévitables.
UpTheCreek

@UpTheCreek Pouvez-vous nous dire ce qui vous préoccupe le plus? Bots, modification des données, quel type d'informations sont envoyées au client ou du client qui doivent être protégées. Comme vous le constatez déjà, la sécurisation d'un client n'est pas une tâche facile, mais nous pouvons peut-être vous aider un peu mieux en allant à la racine de vos préoccupations.

Pour nous, il s'agit d'équilibrer les contrôles / simulation côté serveur avec les coûts du serveur. Nous ne pouvons pas inclure tout ce que nous aimerions. J'y ai beaucoup réfléchi, mais je voulais voir s'il y avait des astuces ingénieuses pour mieux protéger le client :) Le client est basé sur javascript, vous pouvez donc imaginer qu'il est encore plus facile que d'habitude pour les utilisateurs de pirater !
UpTheCreek

4

Il n'y a pas de véritable moyen infaillible de garantir que le "client officiel" fonctionne; tout mécanisme de ce type reposera sur le code de validation communiquant en retour une sorte de "secret" au serveur, qui peut être reconstitué par ingénierie, avec suffisamment de temps. C'est essentiellement ce qui se produit lorsqu'un logiciel anti-piratage indique au serveur que le client est OK.

Edit: pour élaborer un peu sur ce qui précède, considérez le code qui valide le côté client. Il a deux tâches très difficiles: vérifier que le code d'origine est utilisé (et rien d'autre n'est présent qui peut interférer dynamiquement / au moment de l'exécution (!)), Et communiquer ce résultat au serveur, de telle manière que cette communication ne peut pas être truquée. Alors que la première partie est incroyablement difficile, la deuxième partie est carrément impossible.

Si vous pouvez mettre à jour régulièrement le client et le serveur, vous pouvez alors régulièrement divulguer le secret, dans l'espoir de compliquer la tâche des crackers. Cependant, à moins que vous ne changiez la façon dont le secret est codé / implémenté, il peut être craqué à nouveau très rapidement. Donc, fondamentalement, c'est une course aux armements entre vous et celui qui veut le résoudre - qui a plus de temps et d'argent pour jeter le problème.

Après avoir accepté cette partie, pouvons-nous faire autre chose? Dans un monde parfait, avec une puissance de calcul et une bande passante infinies, vous pouvez simplement transférer en continu l'état entre le client et le serveur, et faire exécuter au serveur une simulation parfaite de ce qui se passe sur le client. Ce modèle pourrait ensuite être utilisé pour valider les actions que le client prétend effectuer. Cela ne détectera pas si un humain ou un bot joue, mais il sera en mesure de valider si le client réclame un coup de feu à travers un mur ou une autre action inconcevable.

Avoir suffisamment de données sur le serveur est également une première étape dans la détection de comportements irréguliers - viser peut-être trop rapidement pour les humains, etc. De toute évidence, la situation de simulation parfaite n'est généralement pas réalisable, mais une sorte de modèle estimé à échelle réduite peut être utilisé dans de nombreuses situations.


+1. Je suis venu ici pour mentionner l'idée de changer fréquemment le secret, ce qui signifie que les pirates devraient répéter leur travail. Des secrets complexes le rendraient encore meilleur, par exemple. celui qui change en fonction de ce que le serveur envoie.
Kylotan

4

Vous ne spécifiez pas le type de jeu, donc je me pencherai fortement vers les jeux RPG / MMO. Mais une grande partie de cela peut s'appliquer et s'applique aux FPS, aux jeux de stratégie et d'action. La façon dont les grandes sociétés de jeux multijoueurs comme Blizzard traitent ce problème dans leurs jeux est la suivante:

  1. Faites tous les calculs et les actions de jeu côté serveur, le client n'est qu'un terminal stupide et un moteur graphique. Donc, si les joueurs utilisent un client différent, cela n'a pas vraiment d'importance en termes de jeu, ils ne peuvent pas tromper la physique du jeu.
  2. Vérifie les programmes / clients de robots évidents en recherchant des actions informatiques évidentes comme la répétition parfaite des événements de clic et des mouvements de souris.
  3. Vérifie les programmes / clients de robots non évidents et avertit les modérateurs du jeu du problème.

Ils apparaissent ensuite dans le jeu (si c'est possible, pour les mêmes jeux que Starcraft 2, ce n'est pas le cas) ou sinon regardent / parlent au joueur de leurs actions comme un `` contrôle humain ''. Ou du moins, c'est ainsi que cela devrait être géré. Blizzard est plutôt bon à ce sujet, mais historiquement, les autres sociétés MMO ne l'ont pas été.

La vérification des bots non évidents n'est pas facile, mais quelques règles de base à suivre incluent

  • Vous recherchez des joueurs qui, avec seulement une légère variation, effectuent les mêmes actions encore et encore. Cela peut être assis à un nœud de ressource dans un MMO et le cultiver quand il réapparaît, ou il peut tourner en rond entre des packs de santé / munitions dans un FPS et ne jamais s'écarter d'un chemin spécifique et toujours utiliser le même pistolet. (Les bots sous-optimaux dans les FPS sont rares, mais si votre jeu a une échelle à gravir où le nombre de jeux est plus important que le talent du joueur comme certains FPS modernes, les bots redeviennent précieux)
  • Vous recherchez des joueurs exécutant la même ruée ou stratégie exacte encore et encore dans un RTS. Il existe certains ordres de construction dans Starcraft qui peuvent être presque imbattables lorsqu'ils sont exécutés par un bot.
  • À la recherche de joueurs qui ont collecté de vastes sommes de ressources et qui brisent maintenant sans cesse un élément. C'était un gros problème dans Ultima Online.

Le problème est que plus votre jeu est populaire et plus les bots peuvent être fructueux pour réduire l'ennui dans votre jeu, plus les gens seront susceptibles d'utiliser et de créer ces bots. Et il est trivial de limiter la vitesse de déplacement de la souris, d'ajouter une variation humaniste aléatoire aux clics, même de faire faire des erreurs au bot à un rythme humain, d'ouvrir et de fermer des parties du menu, d'appuyer sur le mauvais bouton puis de fermer la fenêtre, de basculer entre le clavier et les souris fonctionnent comme les humains pour réduire la fatigue des mains. (vous ne réalisez même pas que vous le faites)

Ainsi, la dernière étape lorsque quelqu'un ou un bot fait quelque chose de répétitif depuis très longtemps doit vraiment être un mod humain s'approchant du joueur et lui parlant. S'ils sont là et répondent par des réponses humaines, ils sont humains. Généralement, les mods demanderont au joueur de s'arrêter pendant un certain temps, ou de les suivre quelque part et d'effectuer d'autres actions, les cerceaux deviennent plus complexes avec le temps.

Tanget

Bien sûr, finalement, quelqu'un créera un bot qui ne se distingue pas d'une vraie personne, passant le test de Turing. Et il y a beaucoup d'écrivains de robots là-bas qui visent à faire exactement cela.

J'ai moi-même été fasciné par l'idée lorsque j'ai commencé à programmer et à créer des robots inutiles pour Ultima Online qui se tiendraient en ville et imiteraient des PNJ. Les commandes étaient super simples donc elles étaient faciles à faire, juste des touches pour avancer dans différentes directions, et regarder le journal de discussion pour son propre nom et envoyer les messages à ALICE via une version Web de l'IA. Je ne me souviens plus lequel et cela n'existe probablement plus.

/Tangente

Le fait est que vous devez décider où tracer la ligne. Si vous ne pouvez pas vous permettre une armée de modérateurs pour parler à des personnes que votre système identifie comme des bots, vous feriez probablement mieux de laisser la communauté marquer les gens comme des bots, puis lorsque cela est suffisant, donnez un coup de pied au joueur pendant environ une heure. Pas d'interdiction, juste coup de pied. Le vrai problème pour la plupart des joueurs est que les robots collectent des ressources que d'autres joueurs humains pourraient utiliser. Si les monstres sont rares, comme cela a été le cas avec Ragnarok Online, alors les robots qui errent et éliminent des zones entières d'ennemis tout en ramassant des objets (ou non) sont communs, et ils ruinent le jeu pour les autres. Ainsi, vous pouvez contourner le coût des armées d'administration de cette façon.

Enfin, vous pouvez également vivre avec des bots en tant que réalité de votre espace de jeu et encourager leur utilisation. Cela nécessite de concevoir votre jeu autour de l'utilisation éventuelle et courante de bots, de formateurs et de programmes d'assistance. Je veux dire qu'il y avait un MMO qui a fait cela il y a environ 10 ans, mais je ne me souviens pas lequel. Cela a sonné la fin du jeu, car les MMO sont très lourds et cela signifiait que 95% des joueurs nous éloignaient de leurs claviers à un moment donné et détruisaient la communauté. Si vous suivez cette voie, soyez prudent.


3
Dans votre dernier paragraphe, Star Wars Galaxies de SOE était un exemple de MMO avec un langage de script / macro assez robuste, mais il n'avait pas beaucoup de problème de bot. Ce qui s'est finalement produit, c'est que certaines des nécessités du jeu les plus fastidieuses ont été scriptées (la plupart des starports avaient une file d'attente de joueurs devant un robot de buff de guérisseur entièrement automatisé, par exemple), et le broyage XP de bas niveau était souvent fait de cette façon aussi. IMO tout cela a massivement ajouté au jeu, ce qui l'a tué, ce sont des décisions et des changements de jeu incroyablement mauvais, avec peu ou pas d'avertissement ou de communication.
GAThrawn

3

évitez d'avoir des fonctionnalités de jeu à partir desquelles un utilisateur peut gagner en effectuant des tâches répétitives , en particulier dans les jeux de type navigateur. les fonctionnalités du jeu qui provoquent des tâches répétitives non seulement mettent les autres utilisateurs en colère parce qu'ils n'ont pas le temps de les faire, mais cela rend également le jeu facilement botable (et beaucoup moins amusant!)

Si une fonctionnalité de jeu donnée peut être botable, pourquoi cette fonctionnalité existe-t-elle de toute façon ?? Cette fonctionnalité appelle clairement l'utilisateur pour construire un bot.

Le jeu est censé être joué en offrant au joueur une quantité raisonnable de divertissement, normalement par un ensemble de choix non triviaux. La capacité de décider face à des choix non triviaux sépare un humain d'un bot. En fin de compte, au lieu de rechercher des bots, recherchez sur votre jeu où un bot pourrait être implémenté, et implémentez-le vous-même pour être utilisé par tout le monde. En faisant cela, vous gagnez du temps pour un joueur de jeu en lui évitant d'effectuer des tâches ennuyeuses, tout en combattant les bots depuis la racine: s'il n'y a pas de fonctionnalités de jeu botables, comment peut-il y avoir des bots?

Mon résultat est: je dirais qu'il y a un seuil sur la quantité minimale de complexité qu'un jeu ne doit pas être botable. Faites votre jeu au-dessus de ce seuil en ajoutant des choix non triviaux qui augmenteront finalement l'expérience utilisateur.

Quoi qu'il en soit, peut-être que ce paradigme ne s'applique plus de nos jours ... mais je crois toujours que c'est ce qui fait un bon jeu.


1
+1 Le seul moyen efficace contre la triche est de concevoir le jeu de manière à ce que la triche ne soit pas efficace en premier lieu.
API-Beast

Ma dernière phrase était juste parce que j'étais étonné de voir que personne n'avait même envisagé cela comme une possibilité ...
Jorge Leitao

2

Les réponses existantes sont déjà bien, mais je voulais souligner que si vos chèques sont chers (ex: en cours d' exécution l'ensemble du côté serveur pour vous assurer que le client du jeu ne triche pas), alors vous pouvez choisir de ne faire partie de le temps .

Par exemple, vous pouvez uniquement vérifier les actions dans une région particulière ou par des joueurs particuliers (changer au hasard après un certain temps), ou simplement avoir une file d'attente d'actions et choisir aléatoirement celles à valider (et ignorer les autres). Peut-être trouver une heuristique de qui est susceptible de tricher (essentiellement chercher les personnes qui réussissent le mieux) et valider leurs actions sur le serveur.

Assurez-vous que le serveur ne trahit pas lorsqu'il valide des actions et lorsqu'il ne le fait pas. Envoyez toujours votre réponse standard jusqu'à ce que vous soyez prêt à agir (et ne la donnez pas en prenant plus de temps pour envoyer une réponse lorsque vous validez et quand vous ne l'êtes pas).

De cette façon, vous pouvez obtenir une assez bonne protection contre la triche, en utilisant uniquement la puissance du serveur que vous pouvez épargner (bien que, évidemment, plus vous êtes proche de valider chaque action, meilleure est la protection contre la triche).


1

Eh bien, je ne pense pas qu'il existe une "solution ultiamte". Vous pouvez encoder les Datapackages et donner au serveur qui reçoit les packages des règles. Par exemple, vous pouvez définir que le plus grand mouvement réaliste / autorisé est +1 et non pas comme un tricheur / pirate qui le réglerait à 5 ou plus juste pour être plus rapide. Pensez simplement à ce qu'un pirate informatique pourrait faire pour être meilleur que les autres joueurs et définissez-en les règles.


0

Le moyen le plus simple est de faire du client un terminal stupide. Tout se fait sur le serveur, et le client envoie simplement des commandes au serveur. De cette façon, le serveur contrôle entièrement tout.

Cependant, ce n'est probablement pas le cas le plus approprié pour vous, car le serveur doit effectuer plus de calculs et l'expérience utilisateur sera terne. Donc, plus vous laissez de logique au client pour effectuer, meilleure est l'expérience utilisateur, mais moins il y a de sécurité. Vous devrez donc trouver un terrain d'entente qui vous convienne.

N'envoyez également au client que ce qu'il "devrait" savoir. Par exemple, si un joueur ennemi est derrière un mur, n'envoyez pas ces informations à un client, ou un client piraté pourra discerner ces informations (lire: wallhack).


-1

EDIT: J'ai mal compris la question. Je l'ai interprété comme "empêcher la clé piratée / piratée" au lieu de "logiciel piraté qui peut envoyer un message pour générer 1 milliard d'or pour le joueur".

De nos jours, la plupart des jeux ont une valeur liée à un compte dans une base de données, car tout ce qu'un client peut envoyer à un serveur peut être modifié. C'est probablement la méthode la plus simple et la plus efficace.

Avec la prévalence d'Internet haut débit et du transfert de fichiers P2P, les entreprises sont passées de clés cd stockées localement sur le client à des clés liées à un compte sur leurs serveurs. Il n'y a plus de logiciel client "officiel" ou "non officiel" puisque n'importe qui peut télécharger le client. Mais vous ne pouvez jouer que si vous avez un compte avec accès pour jouer.

Cela présente également un avantage pour l'entreprise, car elle n'a pas besoin de dépenser autant pour produire des copies physiques du logiciel.


Ce n'est pas moi qui vous ai rejeté, mais pour moi, cela n'offre aucune protection. On dirait que vous parlez uniquement de laisser les utilisateurs autorisés se connecter - c'est facile à gérer. Mais le problème est qu'il n'y aurait rien pour empêcher quelqu'un avec un compte valide de rétroconcevoir la messagerie et d'écrire mon propre client piraté.
UpTheCreek

-1 cela ne répond pas à la question, avoir un compte en ligne n'empêche pas quelqu'un de se connecter avec un client piraté qui, par exemple, automatise les actions dans le jeu. wow est entièrement en ligne et il est toujours piraté en permanence. pour éviter ce blizzard utilise leur logiciel anti-triche "gardien", qui est un exemple de traitement du problème en question
dreta

Arg, tu as raison. J'ai mal compris la question.
Orin MacGregor
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.