Quels sont les moyens d'empêcher ou de réduire la tricherie dans les jeux multijoueurs en ligne? [fermé]

19

Punkbuster existe juste pour empêcher la tricherie, et pourtant la tricherie est courante dans les jeux compatibles punkbuster. Modern Warefare 2 est sérieusement bloqué par l'utilisateur final qui exécute son propre serveur ou crée des mods, et la triche se produit constamment.

Pour un jeu multijoueur où chaque client s'exécute sur un PC, que peut-on faire pour réduire ou éliminer la tricherie?

kevin42
la source
1
Ce n'est pas une réponse complète en soi, donc je ne la répertorierai pas comme une seule, mais si vous ajoutez une certaine valeur au compte des joueurs en plus des méthodes anti-triche traditionnelles, je pense que cela peut aider. Par exemple, si les nouveaux joueurs sont relégués sur les serveurs "noob" jusqu'à ce qu'ils acquièrent suffisamment d'expérience pour accéder au reste du jeu, il est très difficile pour les pirates informatiques de redéfinir leur compte après avoir été bannis à chaque fois. Il y a probablement encore des pirates qui peuvent dépasser cela, mais sécuriser votre compte / serveurs de mise en relation est beaucoup plus facile que de sécuriser les clients.
Lewis Wakeford

Réponses:

18

Cela dépend de la façon dont ils trichent, en se concentrant sur l'un des principaux moyens de créer des tricheurs, d'autres processus qui se verrouillent dans votre application et la modifient - vous pouvez énumérer tous les autres processus et accrocher leurs méthodes de manipulation de la mémoire et leur émulation clavier / souris méthodes.

Les wallhacks sont généralement écrits en injectant du code entre votre processus et les bibliothèques DirectX / GL pour définir la transparence sur les matériaux afin qu'ils puissent être vus à travers. Vous pouvez ajouter du code à votre système de scénographie / abattage pour ne pas spécifiquement dessiner d'autres joueurs / entités utiles s'ils sont derrière des murs (pour éviter de tricher de cette façon).

Si vous allez en multijoueur et que vous souhaitez empêcher la modification des paquets entre client / serveur, il peut être efficace de créer une somme de contrôle des données que vous envoyez via un algorithme et de vérifier cela au fur et à mesure. (Vous finirez probablement par le faire de toute façon à diverses fins d'AQ).

Il en va de même pour la plupart de vos ressources en mémoire, la création d'une somme de contrôle au début d'une trame et sa vérification à différentes étapes peuvent donner lieu à une détection de manipulation de mémoire assez pratique.

C'est un sujet assez complexe, mais j'espère que cela vous place dans une direction vaguement acceptable.

Rob Ashton
la source
Ou encore mieux que de cacher des objets derrière des murs (qui peuvent toujours être piratés), ne pas donner au client des informations sur l'emplacement de ce joueur (ou seulement ce qui est nécessaire, par exemple, pour un bon effet sonore 3D)
Bart van Heukelom
17

Dans la solution la plus extrême, vous ne faites pratiquement jamais confiance au client. Pour les jeux comme les MMO, les utilisateurs ne gèrent pas leurs serveurs et toute logique de jeu est gérée côté serveur. Ne donnez jamais au client le pouvoir de dire «J'ai X santé» ou «J'ai X munitions», etc.

Tetrad
la source
4
C'est génial si vous avez réellement les ressources pour exécuter un serveur dédié, mais c'est une manière assez simpliste de le voir. Très probablement, vous feriez encore une grande partie de la logique sur les clients et un sous-ensemble minimal de la logique sur le serveur, avec une synchronisation occasionnelle pour appliquer les règles de base. Cela n'empêche pas nécessairement non plus tous les tricheurs côté client comme les manipulations de mur / mémoire pour tromper le client en lui révélant des informations utiles / etc
Rob Ashton
10

Si vous avez un système où la logique est coûteuse et doit être effectuée principalement sur le client pour économiser les cycles du serveur, vous pouvez implémenter un système de détection de triche probabiliste. Toutes les quelques minutes, il choisit quelques joueurs différents pour inspecter de près et vérifier la cohérence sur le serveur. Étant donné que les tricheurs limitent rarement leur tricherie à des périodes courtes et rares, ils seront finalement capturés.

Un autre avantage à cela est qu'ils n'auront pas un cycle de rotation rapide pour le développement - si cela prend 10 heures de jeu en moyenne pour que le serveur prête attention à vous, alors c'est un cycle de rotation de 10 heures chaque fois que vous voulez voir si quelque chose fonctionnait. Et si cela a fonctionné, c'est encore plus longtemps car ils ne sauront pas si le serveur leur a donné un coup de pouce ou s'il ne les a tout simplement pas contactés.

ZorbaTHut
la source
+1 En termes de performances, des approches stochastiques comme celles-ci sont la seule réponse réaliste aux problèmes plus larges, l'OMI. Mis à part OnLive, c'est-à-dire si vous ciblez uniquement les États-Unis.
Ingénieur
5

Il existe également de nombreux types de hacks d'aide à la visée pour les tireurs à la première personne qui fonctionnent également en se connectant aux appels de la bibliothèque graphique. Le crochet OGC pour Counter-Strike / HL1 avait une multitude d'options au-delà de la transparence des murs.

Si les informations de localisation des ennemis sont à un moment donné transmises à une bibliothèque de niveau inférieur qui dispose d'un code largement disponible, ces appels peuvent être connectés et les données de localisation, d'échelle, de rotation, etc. peuvent être utilisées pour calculer avec précision le meilleur vecteur de tir. sur cet ennemi. Les systèmes anti-triche comme PunkBuster incluent souvent une détection de type heuristique (à quelle fréquence ce joueur obtient-il un tir parfait, à quelle fréquence tournent-ils autour de 180 degrés pour décrocher un coup unique, etc.) en plus de la surveillance de la mémoire et des processus.

En fin de compte, la tâche de prévenir la tricherie dans les jeux multijoueurs est un jeu de chat et de souris. Au fur et à mesure que de nouvelles astuces sont développées, de nouvelles méthodes anti-triche sont créées, puis de nouvelles astuces sont conçues pour éviter les nouvelles technologies anti-triche.

Comme Tetrad l'a dit dans sa réponse, les seules règles strictes et rapides pour la "sécurité du jeu" sont de fournir au client le moins d'informations possible et de lui faire le moins confiance possible. Cependant, différents types de jeux auront des exigences différentes qui peuvent influer sur la façon dont vous pouvez respecter ces règles.

Dans un jeu FPS, parce que la vitesse de jeu est si rapide, il n'est souvent pas possible de fournir uniquement au client les données qu'il doit connaître sur cet instant précis. Si vous ne dites pas au client qu'il y a un ennemi au coin de la rue et que le joueur contourne ce coin, vous devez soudainement lui envoyer ces informations en quelques millisecondes ou risquer de faire tuer le joueur par un ennemi qu'il n'a pas fait. jamais vu.

Le seul «correctif» pour ces problèmes qui est actuellement disponible serait probablement OnLive. Étant donné que ce service ne fournit que du contenu audio et vidéo à partir d'un client fonctionnant en toute sécurité dans le centre de données, le seul moyen de tricherie serait de créer essentiellement une IA humaine qui pourrait analyser le flux vidéo entrant et prendre des mesures en fonction de cela - une tâche que peu, le cas échéant, les tricheurs sont à la hauteur.

Charles Ellis
la source
3

Toutes les réponses ci-dessus sont excellentes, mais j'ajouterai un autre morceau:

Certains jeux ont une fonction de relecture très solide, qui permet d'enregistrer la relecture de chaque jeu après la fin du jeu dans un format compact et de le regarder de différentes manières - différentes perspectives de joueur, interface utilisateur de statistiques en temps réel, etc.

Exemple que je connais très bien: Starcraft 2. L'une des façons dont Blizzard bloque les pirates est de recevoir des preuves de triche sous forme de rediffusions de jeu.

Un exemple d'utilisation dans un FPS serait: si vous avez joué à un jeu et que vous soupçonnez que l'autre personne a triché avec un mur-hack, vous regardez la rediffusion, puis voyez que dans sa vision de rediffusion normale, il ne pouvait pas avoir vous a vu et a jeté une grenade au coin, ou autre chose.

Vous le signalez ensuite avec la rediffusion, et si les preuves contre lui sont suffisantes, il est interdit. Pour autant que je sache, les entreprises qui font cela ne prennent que des preuves sérieuses ou de multiples sources de preuves du même comportement avant d'interdire.

Ce n'est donc pas une technique anti-débogage, c'est un système de rapport utilisateur qui permet une preuve de triche assistée par l'homme.

SirKnigget
la source
0

Ce n'est peut-être pas une réponse complète, mais j'ai quelques commentaires ici. L'un des meilleurs moyens de prévenir la tricherie est l'obscurcissement ou l'utilisation de C / C ++. Cela empêche les gens de modifier le code client.

LiquidFeline
la source
Il convient de mentionner qu'il existe de nombreux désobfuscateurs. Les jeux .Net (C #, XNA) peuvent également être modifiés à l'aide d'une réflexion. D'après ce que je sais, je suppose que C / C ++ est vraiment un moyen de rendre difficile la falsification du code.
user1306322
Ouais. Mon point est juste que l'obfuscation empêche le code facilement décompilé d'être illisible et que C / C ++ n'est pas facile à compiler, ce sont deux bonnes options.
LiquidFeline
De plus, si vous corrigez votre jeu fréquemment et modifiez les décalages binaires dans l'exécutable ou insérez des NOP aléatoires, aucun piratage ne survivra assez longtemps ...
SirKnigget
@CPP_Person: En fait, C est assez célèbre pour être très facile à compiler. C'est une question totalement différente pour C ++, qui est en effet un langage assez complexe du point de vue des compilateurs. Cependant, je ne comprends pas, pourquoi cela devrait être important, combien il est facile de compiler un certain langage de programmation - vous voulez empêcher les gens d'écrire des outils de triche, pas d'écrire un bon compilateur - ils utiliseraient de toute façon un compilateur C ++ existant - ce qui rend la décompilation difficile me semble beaucoup plus intéressante que la compilation difficile.
Kaiserludi