Comment puis-je implémenter le masquage multijoueur avec des visuels qui résistent au piratage côté client?

19

J'ai pensé à implémenter la furtivité dans un jeu multijoueur. C'est un jeu de style MOBA, alors pensez à League of Legends (LoL) et Heroes of the Storm (HotS). Plusieurs clients se connectent à un seul serveur, qui diffuse l'état du jeu à tous les clients. Les clients envoient leurs données d'entrée au serveur, ce qui peut les rejeter lorsqu'ils rencontrent des commandes invalides, rendant ainsi la tricherie impossible (enfin, en théorie).

Maintenant, je mentionne ces jeux exprès parce que les deux implémentent la furtivité différemment. LoL a la furtivité avec deux états possibles: vous êtes soit complètement visible soit complètement invisible. HotS, d'autre part, implémente la furtivité de manière à ce que vous puissiez voir par un miroitement dans l'air:

L'invisibilité de Heroes of the Storm

Je pense que c'est un mécanisme soigné, car il favorise / récompense en prêtant attention à votre environnement. Cependant, étant un jeu multijoueur, j'ai réalisé que cela pourrait se révéler facilement exploitable.

Lorsque vous implémentez la furtivité de la manière «LoL», vous pouvez simplement arrêter d'envoyer les coordonnées des joueurs aux autres clients. Lorsque le personnage du joueur rompt furtivement, le serveur peut diffuser à nouveau l'emplacement. Cependant, avec le modèle HotS, un scintillement peut être vu dans l'air où le personnage se déplace. Cela signifie que le serveur doit envoyer l'emplacement du joueur aux autres clients. Ce qui signifie que les joueurs qui modifient la texture ou le modèle ou même le code du jeu lui-même pourraient rendre la mécanique de la cape inutile. Voici un fil sur les cartes HotS à ce sujet.

Ma question est de savoir s'il existe un moyen de mettre en œuvre le camouflage (avec un `` miroitement '', à la HotS), sans que les joueurs astucieux puissent modifier le jeu (données) et `` battre le système ''. Est-ce possible, et sinon, comment les autres jeux multijoueurs avec ce mécanisme traitent-ils cela? Seul le style d'invisibilité LoL est-il imbattable?

J'ai pensé à ce que le serveur envoie de temps en temps de faux emplacements de cape, mais cela nuit également aux joueurs honnêtes qui ne font que prêter attention, donc cela ne fonctionnera pas.

Débordement
la source
Le lien est lié , mais je ne demande pas de tomber sur d'autres (qui peuvent être gérés par le serveur), mais plutôt d'afficher des unités masquées.
Débordement
C'est une mauvaise suggestion, mais vous pouvez faire tout le rendu graphique sur le serveur, puis diffuser l'écran de chaque joueur à ses clients. Ils n'envoient que des entrées, vous n'envoyez que des sorties. Le client est une mince coque qui affiche simplement la vidéo et lit l'audio.
user137
Philipp y a eu une très bonne idée. Je veux ajouter que vous devez toujours être conscient des boîtes englobantes et de leur intersection avec des compétences, etc. Si vous envoyez des boîtes englobantes, un codeur intelligent peut inverser la conception de quel personnage est invisible (s'il existe différents héros). Si vous avez des effets qui se déclenchent au toucher, vous devrez envoyer quelque chose comme la boîte ou au moins la position et l'échelle de l'effet. Soyez conscient que tout ce qui est plus abstrait est plus
Greaka
Vous ne pouvez pas réellement implémenter le masquage de style LoL en cessant d'envoyer les coordonnées du joueur. Même si les personnages ne sont pas dessinés, ils doivent toujours pouvoir interagir avec la carte (et les autres joueurs) d'autres manières. Mais l'implémentation d'une furtivité «détectable» (empreintes de pas, miroitements, etc.) supprime une grande partie de l'incitation à passer par la difficulté de modifier le jeu de toute façon: vous apprenez à détecter les personnages masqués et à passer à autre chose.
The Spooniest
2
@TheSpooniest: pourriez-vous expliquer ce que vous entendez par Vous ne pouvez pas réellement mettre en œuvre le masquage de style LoL en cessant d'envoyer des coordonnées de joueur ? Si le joueur A est invisible et que le serveur n'envoie plus les coordonnées aux joueurs B et C, le serveur peut toujours gérer par exemple la collision entre les joueurs A et B en refusant de déplacer le personnage de B sur A (comme s'ils marchaient) dans un mur). Si A (toujours invisible) tire une compétence vers B, le serveur peut simplement envoyer "la compétence tirée depuis la position x, y dans la direction d de A" vers B et C.
Débordement

Réponses:

20

Vous ne pouvez pas implémenter un effet miroitant sans le rendre facile à exploiter ... mais que faire si vous avez utilisé un moyen indirect de montrer que quelqu'un est là, un moyen qui s'applique également aux joueurs visibles?

Par exemple, que se passe-t-il si les joueurs laissent des empreintes et que les messages "empreinte créée" sont envoyés depuis le serveur indépendamment de l'emplacement du joueur? Chaque joueur laisse des empreintes de pas, vous ne pouvez donc pas rendre le modèle d'empreinte plus visible sans couvrir l'arène et rendre chaque impression individuelle moins visible, mais si un joueur voit une empreinte apparaître sans personnage visible, il sait que quelqu'un est là.

Vous pouvez également faire des choses comme avoir de petits cailloux qui sont renversés, du bruissement d'herbe lorsque quelqu'un y marche ou des ondulations qui apparaissent lorsque quelqu'un se déplace dans l'eau. Si les `` signes '' ne s'appliquent qu'à certains emplacements ou matériaux, cela pourrait ajouter une stratégie supplémentaire qui force les personnages invisibles à se déplacer avec précaution et à éviter les choses qui donneront leur position.

IndigoFenix
la source
without making it easy to exploit-> Cela s'applique à toutes les mécaniques de jeu, pas seulement à celle-ci.
S. Tarık Çetin
12
Concernant le dernier paragraphe: Gardez à l'esprit que quand un joueur invisible est la seule chose qui provoque ces choses, alors vous fournissez des informations utiles pour les hacks. Mais vous pouvez également déclencher chacun d'entre eux de temps en temps à travers des événements aléatoires ou d'autres actions des joueurs. Cela générerait un bruit qui distrait le hack et a le bel effet secondaire pour rendre l'environnement beaucoup plus vivant et dynamique.
Philipp
2
C'est une idée très intéressante, merci! Dans le cas des «empreintes», cela pourrait même récompenser les joueurs furtifs à «marcher à l'intérieur» des (anciens) pas de leur cible, ce qui rend les autres plus réalistes (c'est-à-dire venant de l'arrière). Même si quelqu'un rendait les textures de pas (ou ce que vous avez) plus évidentes, y entrer ne ferait (peut-être) que rafraîchir la durée d'affichage.
Underflow
3
Bien sûr, dans ce cas, un hack côté client pourrait être fait pour montrer quelles pistes sont fraîches.
Muhd
3
Un piratage côté client pourrait mettre en évidence des empreintes créées dans des régions qui ne correspondent pas à l'emplacement d'un joueur.
Edward Coffey
31

Lorsque vous regardez les innombrables autres questions sur la prévention de la triche dans les jeux multijoueurs qui se trouvent sur ce site, vous verrez facilement qu'il n'y a vraiment aucune mesure technique pour empêcher la tricherie côté client.

Tout ce que vous pouvez faire est de fournir moins d' informations sur l'entité masquée. Tout ce que le client doit savoir pour rendre l'effet de distorsion, c'est qu'il y a quelque chose de masqué à cette position. Mais il n'a pas besoin de savoir quoi que ce soit de spécifique, comme ce que c'est exactement, combien de santé il lui reste et ce qu'il fait en ce moment. Selon votre jeu, cela seul peut être un déficit d'informations qui change la donne pour le joueur.

Philipp
la source
6
«Moins d'informations» signifie également «informations moins précises». Choisissez un décalage de (disons) 10 pieds dans une seule direction aléatoire qui est conservée côté serveur et envoyez cet emplacement à la place. Dans d'autres rencontres aléatoires, ajoutez de faux personnages chatoyants "Avez-vous vu cela? Je pensais avoir vu quelque chose là-bas."
Keeta - réintègre Monica
2
@Keeta si vous l'utilisez, vous voudrez effectuer un certain lissage (c'est-à-dire ne pas générer une valeur entièrement aléatoire à chaque fois) soit avec un filtre de signal, soit avec une sorte de marche aléatoire vers la direction de l'entité. Si c'est trop nerveux, c'est vraiment évident à l'œil, vous devrez donc équilibrer la capacité du joueur à être caché pendant le mouvement et à être caché lorsqu'il reste immobile. Ce dernier sera et devrait être plus efficace.
Nate Diamond
@NateDiamond Oui, exactement. C'est pourquoi je déclare que le serveur crée un décalage spécifique de l'emplacement réel. Ensuite, au fur et à mesure que le véritable acteur se déplace, le décalage entraînera également le miroitement. En observant attentivement le miroitement pendant qu'il se déplace, vous pouvez en déduire où se trouve l'acteur réel, mais cela demande du travail. Si l'invisibilité était réelle et provoquait ce scintillement dans la vie réelle, j'imagine que cette concentration supplémentaire est exactement ce qui serait nécessaire pour surmonter l'invisibilité.
Keeta - réintègre Monica
Il y a eu une modification intéressante, et la seule qui a réellement fonctionné, d' ioquake3 pour créer un serveur à l'épreuve des wallhack . L'idée était de vérifier côté serveur si un joueur A pouvait voir un autre joueur B (c.-à-d. Aucun mur ni autre séparation bloquant la vue) avant de décider si le joueur A devrait recevoir les informations de position de B. Cela s'est avéré très efficace contre wallhacks, car ils ont été rendus inutiles. Donc, le point fondamental est que la seule façon de s'assurer que personne ne manipule les données est de ne leur donner aucune information.
génial
@gaborous, c'est un test coûteux à faire, en particulier pour chaque joueur à chaque tick. Cela peut très bien être une dépense valable, mais c'est quelque chose que le développeur devra prendre en compte dans le coût et les capacités du serveur.
Nate Diamond
1

Oui, toute information que vous envoyez au client peut être plus évidente que vous le souhaitiez. Mais voici l'astuce:

Atténuer l'impact

Bien sûr, le client peut avoir des informations, mais en réfléchissant soigneusement aux informations que vous êtes prêt à partager et à ce que les joueurs peuvent en faire, vous pouvez au moins atténuer l'impact des piratages des clients.

1. Qu'est-ce que le joueur observe?

  1. Vous voyez le personnage avec des caractéristiques sur place: dans ce cas, le client aura toutes les informations et les hacks peuvent simplement défaire la cape
  2. Vous voyez quelque chose sur place: dans ce cas, le client dispose d'informations de localisation. Cela peut rendre l'emplacement évident mais d'autres informations doivent toujours être cachées.
  3. Vous observez quelque chose mais ce n'est pas sur place

une. Vous voyez quelque chose mais ce n'est pas sur place (le pont ou la brousse bouge, mais c'est grand pour que vous ne sachiez pas où viser; les pas ne deviennent visibles qu'avec un retard de 2 secondes): dans ce cas, le client sait seulement qu'il y a quelque chose, mais pas où / quoi exactement.

b. Vous observez quelque chose d'une manière différente (son si quelque chose se trouve dans la zone; indication de proximité comme un radar avec ou sans direction)

La capture d'écran de la question semble être comprise entre 1 et 2 car elle est probablement basée sur des informations limitées, mais vous voyez toujours le contour qui pourrait donner des informations.

2. Que peut faire le joueur?

Supposons que vous pensez que quelqu'un est à la coordonnée XY, que pouvez-vous faire? Voici quelques choix typiques:

Attaquer

  1. Vous pouvez l'attaquer comme s'il n'était pas masqué
  2. Vous pouvez l'attaquer avec des attaques / pièges AOA qui le déshabillent ou non
  3. Vous pouvez le déshabiller activement et ne l'attaquer qu'après
  4. Vous ne pouvez pas l'attaquer du tout

En mouvement

  1. Lorsque vous commencez à bouger, vous remarquez que le moteur vous fait mystérieusement un détour
  2. Vous commencez à marcher vers votre objectif normalement, mais lorsque vous atteignez le personnage caché, vous vous déplacez autour de lui ou vous arrêtez
  3. Vous n'êtes pas bloqué par le personnage caché

Si la sélection de l'itinéraire se fait normalement côté client

Dennis
la source
Merci pour votre contribution. Je comptais de toute façon laisser les gens «tomber» sur des personnages invisibles, car c'est quelque chose que le serveur peut calculer et gérer. L'idée sonore est soignée, et changer le son d'une manière subtile (tension, pensez Jaws ) serait cool mais cela ne serait-il pas facilement remplacé par exemple par un fichier son plus fort ou même un fichier vocal disant QUELQUE CLOSE EST VOLÉ ?
Underflow
1
Une autre idée le long de la ligne de «a»: un miroitement pourrait apparaître au hasard quelque part près du joueur masqué, mais pas à leur emplacement exact. Si le serveur envoie simplement la position du miroitement, le client ne peut pas vraiment faire beaucoup d'ingénierie inverse à ce sujet. En fait, même si le joueur masqué était complètement visible, cela fonctionnerait toujours comme un mécanicien.
Jezzamon
1
@Jezzamon oui, une sorte de mécanicien de «déplacement» serait cool aussi. Cependant, dans la situation de cape qui ne fonctionnerait pas: je ne veux pas punir les joueurs qui sont à la recherche de miroitement; ils devraient avoir l'emplacement «exact» du miroitement pour viser, par exemple, des photos de compétence.
Underflow
-2

L'effet d'entraînement pourrait se faire via le code du shader. Vous pouvez désactiver l'utilisation de la texture dans ce mode afin que le simple changement de texture ne soit plus un problème.

En 3D, lorsque le modèle entre en jeu, vous pouvez toujours changer le shader en un qui simule la réfraction, en utilisant uniquement la surface du modèle, en éliminant la couleur. Même lorsque le modèle est remplacé d'une manière ou d'une autre, l'effet demeure.

La modification du shader précompilé serait aussi difficile que la modification du code du jeu et je pense que c'est un niveau plus difficile que la recherche de texture dans les fichiers du jeu.

Mars
la source
3
Vous avez manqué la vraie question. Il ne s'agissait pas de créer techniquement un tel effet de distorsion. Il s'agissait de savoir comment donner au client les informations où les rendre sans lui donner des informations utiles qu'il peut exposer au joueur.
Philipp
1
Eh bien, je me adresse: Which means that players that change the texture or model or even the game code itself could render the cloak mechanic useless. Et je ne vois pas pourquoi j'ai raté la question whether there is some way to implement cloaking (with a 'shimmer', à la HotS), without having the issue that crafty players can modify the game (data) . A: Il annonce le camouflage avec des reflets, B: il est plus difficile à modifier qu'un simple changement de texture. Où rendre réellement est un autre côté. Si la position est la seule chose dont nous avons besoin pour appliquer un effet d'entraînement, ce devrait être les seules données envoyées au joueur.
Mars
2
J'ai développé des hacks côté client dans le passé. L'idée qu'il est plus difficile de modifier les shaders est très, très trompeuse. Oui, cela arrête la forme d'attaque la plus élémentaire possible, mais n'importe qui avec un Google-fu décent pourrait le découvrir en un après-midi. Maintenant, opposez votre jeu à un pirate décent et voyez combien de temps il faut pour qu'il soit comblé par la bonté du client.
Copiez-collez votre commentaire dans chaque réponse ici, car tout ce qui est côté client peut être exploité. Je sais que ce n'est pas si difficile de modifier le code (il y a des bots, des hacks, des mods dans les jeux AAA), mais je trouve plus facile de rechercher une texture semi-transparente dans les fichiers de jeu que de chercher des instructions spécifiques de l'effet d'entraînement du shader. Bien sûr, si les fichiers de shader sont en texte brut et à peine zippés, même un enfant pourrait le casser. Je viens de donner une réponse, qui peut être combinée avec "moins de données transmises au lecteur" pour fournir un niveau de sécurité décent. Je ne sais vraiment pas ce qui ne va pas, car il fournit une solution réelle
Mars
@Thebluefish en toute justice, c'est à cause de cela que les développeurs se sont éloignés de dépenser des ressources pour arrêter de tricher, et ont plutôt dépensé des ressources sur des méthodes très compliquées, obscures et bien construites pour détecter les tricheurs et interdire carrément les joueurs offensants de leurs plateformes ... (évidemment se référer à des systèmes tels que le VAC de Steam).
Trotski94