• FR
  • EN
  • Sentinel


    Qu’est-ce que le Stream Sniping ?

    Le stream sniping est une forme de triche notoire où des joueurs exploitent les diffusions en direct d’autres joueurs pour obtenir un avantage déloyal ou harceler un joueur spécifique pour obtenir des réactions ou simplement pour “s’amuser”.

    Le problème du Stream Sniping

    Le stream sniping perturbe l’expérience de jeu en permettant à des joueurs malveillants de rassembler des informations en temps réel sur les stratégies et les emplacements de leurs adversaires à partir des diffusions en direct. Cela compromet non seulement l’intégrité compétitive du jeu, mais force également les streamers à arrêter de diffuser ou à recourir à des délais importants, réduisant ainsi l’interactivité avec les spectateurs. Les méthodes traditionnelles pour lutter contre le stream sniping, telles que les délais de diffusion et la modération manuelle, se sont révélées insuffisantes, nécessitant une solution plus robuste et automatisée.

    Pourquoi j’ai décidé d’y remédier

    En 2022, un célèbre youtubeur et streamer français a lancé un serveur Minecraft. Ce serveur était très attendu par les joueurs et les streamers vétérans, car aucun serveur n’avait été lancé par une personne aussi populaire que lui depuis des années. C’était une occasion de revivre l’âge d’or de Minecraft une dernière fois pour beaucoup de joueurs. Le serveur a été lancé et rapidement, certains streamers ont commencé à se faire harceler par d’autres joueurs. Au début, il s’agissait de quelques joueurs faisant équipe contre eux, mais cela a rapidement dégénéré en joueurs partageant des informations privées. Ce streamer attirait alors des milliers de spectateurs et amenait de nombreux joueurs sur le serveur. La situation était inacceptable ; si le serveur ne voulait pas les aider, j’allais devoir intervenir.

    Les débuts de Sentinel

    Le plus grand problème avec les solutions passées est qu’une fois qu’un joueur parvient à identifier un streamer, cela devient presque inutile de le cacher. Vous pouvez utiliser des délais, cacher votre écran ou même utiliser un faux nom, cela empêchera certains joueurs de vous trouver, mais certains passeront toujours à travers les mailles du filet, soit par pur hasard, soit par ténacité.

    C’est pourquoi j’ai décidé de changer d’approche et d’essayer de trouver les strean snipers à la place. À la façon de Minority Report, le but est de trouver un stream sniper avant qu’il ne passe à l’acte, en anticipant ses actions. Si un streamer peut savoir si un joueur est un stream sniper avant qu’une partie ne commence, il sera beaucoup plus facile de l’éviter et de lancer une autre partie. De plus, pouvoir conserver un suivi des actions des joueurs peut aider l’équipe de modération à comprendre ce qu’il s’est passé et quoi faire ensuite.

    Collecte de données

    La première chose à faire est de collecter des données sur les joueurs. Ces données seront utilisées pour calculer la probabilité qu’un joueur soit un stream sniper. Nous devrons collecter autant de données que possible pour pouvoir les utiliser dans le plus d’analyses différentes que possible. J’ai assez vite vu que le serveur était conçu d’une façon qui allait grandement m’aider.

    Ce genre de serveur utilise l’une de ces deux architectures. Dans le premier cas, le serveur aura des lobbies principaux (mondes) et des sous-lobbies pour chaque mode de jeu. Dans le second cas, le serveur n’aura que des lobbies principaux. Devoir gérer des sous-lobbies demande beaucoup plus de travail car il faut surveiller un grand nombre de lobbies. Dans notre cas, le serveur utilisait la deuxième architecture avec seulement des lobbies principaux. Ce qui permet ces observations.

    Un joueur qui rejoint le serveur passera forcément par un lobby. S’il termine une partie, il sera renvoyé dans un lobby. La seule raison pour un joueur de quitter un lobby est soit de rejoindre une partie, soit de quitter le serveur. Donc, surveiller tous les lobbies principaux garantit que tout joueur qui rejoint le serveur sera vu. Il y avait environ 7 lobbies principaux, ce qui signifie que je devrais déployer environ 7 bots pour les surveiller tous, et c’est ce que j’ai fait.

    La première étape consistait à créer un bot qui surveillerait un lobby. Chaque fois qu’un joueur rejoindrait ou quitterait le lobby, le serveur enverrait un paquet à tous les clients dans le lobby pour qu’ils puissent l’ajouter ou le retirer de leur liste de joueurs et chaque fois que cela se produirait, le bot l’enregistrerait. Les nouveaux joueurs sont ajoutés à une base de données avec des informations de base telles que le nom d’utilisateur, l’UUID, le ping, le rang, etc. En théorie, vous pourriez également vérifier la dernière position d’un joueur lorsqu’il quitte et calculer la probabilité de l’action qu’il a effectuée. Par exemple, si un joueur quitte le lobby à côté d’un PNJ utilisé pour démarrer un mode de jeu spécifique. Il est très probable que le joueur ait rejoint une partie dans ce mode. Évidemment, il aurait également pu quitter ou être téléporté dans un autre mode par un autre joueur.

    Une fois cela fait et fonctionnant, j’ai changé le comportement du premier bot pour gérer le reste de la troupe. Non seulement il ferait le tracking habituel, mais il trackerait également le nombre de lobbies disponibles. Si un lobby n’est pas suivi, le bot principal demandera à un autre de se connecter au serveur et de se déplacer vers le lobby spécifique. Grâce à cela, j’ai pu créer un réseau de bots qui serait capable de faire le suivi de chaque entrée et sortie de chaque joueur dans le serveur.

    Marques / Flags

    Pour calculer la probabilité qu’un joueur soit un stream sniper, nous devons analyser les changements dans les données du joueur. Chaque analyse tentera de trouver un motif pouvant représenter un comportement spécifique. Si une analyse est positive, le joueur sera marqué avec cette analyse spécifique. Plus un joueur a de marques, plus il est probable qu’il soit un stream sniper.

    Par exemple, lorsqu’un joueur moyen veut jouer à un jeu, il fait la queue pour une partie, attend que la partie commence, puis commence à jouer. Cependant, lorsqu’un stream sniper moyen veut snipe un streamer, il fait la queue pour une partie, vérifie si le streamer est dans cette partie, et quitte si ce n’est pas le cas. Et il essaiera cela aussi rapidement que possible pour augmenter ses chances de rejoindre leur partie. Dans notre cas, il est très facile d’analyser ce comportement en vérifiant combien de fois un joueur a quitté et rejoint un lobby. Une fois que ce nombre atteint un seuil spécifique, nous pouvons marquer le joueur pour cette vérification.

    Parfois, nous n’avons même pas besoin de faire une analyse. Si un joueur est reconnu comme stream sniper, il peut être mis sur liste noire et sera toujours considéré comme un stream sniper. Cela signifie qu’un sniper, une fois trouvé, devra utiliser un autre compte pour snipe. Et dans ce cas, vous pouvez également marquer les joueurs avec une date de première connexion récente comme étant à risque.

    Journeyman

    Avec toutes ces données analysées, nous pouvons maintenant déterminer si un joueur est un stream sniper. Le problème suivant est de pouvoir informer le streamer. La solution la plus simple est une overlay, un logiciel externe capable d’afficher des données obtenus depuis une API. Elles ont généralement accès à certaines informations du client en lisant directement la sortie des logs du jeu. Cependant, laisser un streamer lancer des parties en boucle jusqu’à trouver une bonne partie est tout aussi nuisible au streaming que le sniping en lui-même.

    Journeyman est le nom d’un bot (oui encore) avec un but différent des autres. Il agit de façon autonome sur le serveur, cherchant des parties qui pourraient être bonne pour un streamer. Une fois qu’une partie est trouvée, Journeyman va attendre qu’elle soit pratiquement pleine. Si un streamer rejoint une partie en dernier, la probabilité d’être suivi est quasi nulle. Un sniper peut anticiper et être là avant mais dans ce cas, il sera déjà flag et Journeyman cherchera une autre partie. Une fois que la partie est pratiquement pleine, Journeyman invite le streamer dans son groupe et le téléporte dans la partie. Une fois fait, il repart aider d’autres streamers à trouver des parties. Un seul joueur pourra prendre la place de Journeyman, ce n’est pas parfait, mais ça reste mieux que 16. Le seul problème à régler est de cacher Journeyman. Moins Sentinel est connu, le plus fiable il est. Il faut donc masquer les informations sur le client des streamers.

    Proxy

    Il existe deux solutions lorsque vous voulez modifier ce qu’un client affiche sur l’écran d’un utilisateur. La première est la plus courante, les mods. Les mods sont des modifications du jeu qui peuvent être chargées pour ajouter de nouvelles fonctionnalités ou modifier le comportement du jeu. Cette solution est simple, mais elle nécessite que l’utilisateur utilise un modloader comme Forge ou Fabric. Cela aurait pu être facile dans le passé car beaucoup de gens utilisaient ces derniers. Mais de nos jours, beaucoup de joueurs ont migré vers des clients propriétaires comme Lunar Client qui sont des clients contenant leurs propres mods et ne vous permettent pas de charger des mods d’autres sources.

    La seconde solution est inconnue de la plupart des gens. C’est un proxy. Un proxy est un logiciel qui agit comme un intermédiaire entre le client et le serveur de jeu. Par défaut, il n’envoie que les entrées du client au serveur et reçoit les sorties du serveur. Cependant, en modifiant ou en créant des paquets entrants, vous pouvez modifier le comportement du jeu. Cacher Journeyman devient trivial, toutes les traces de son existence peuvent être effacées de tous les clients avec lequel il interagit. Le proxy permet aussi de gérer automatiquement le groupe tout en restant entièrement invisible.

    Une application utile peut être de falsifier des informations du client, ce qu’on appelle du “spoofing”. Par exemple, un streamer pourrait jouer sur un compte anonyme, mais de son point de vue, il jouera avec son compte connu. Si l’on veut augmenter le degré d’anonymat, on peut aussi “spoofer” les autres joueurs en remplaçant l’apparence d’autres joueurs par encore d’autres joueurs. Ce qui rend beaucoup plus difficile la collecte d’information sur le stream par un acteur malveillant.

    Capture d'écran montrant un compte spoofé

    Sur cette capture d’écran, vous pouvez voir que le compte est “Oery”, a le grade “Héros”, a 100 Gemmes et 7 215 Cubes. Ce sont bien les informations que le joueur verrait en étant connecté avec ce compte. Cependant, ce n’est pas le compte avec lequel j’étais connecté et il serait très difficile pour quelqu’un voyant cette capture d’écran de savoir sur quel compte j’étais en réalité connecté. Un joueur pourrait se rendre sur place à l’endroit où le streamer se trouve et pourrait voir quel compte y est. Pour contrer ça, on pourrait aussi spoofer les packets de déplacement du joueur pour que le serveur n’actualise pas la position du joueur ou même enregistrent des mouvements différents du client du streamer.

    Le second avantage que ce projet a, c’est son anonymat. Si on sait que le compte est spoofé, on peut chercher le vrai compte en cherchant les détails qui le trahiront. Par contre, quelqu’un qui n’est pas conscient de l’existence de ces systèmes va avoir de grandes difficultés à le trouver.

    Chacune de ces solutions n’est pas une solution miracle, mais suffit à faire abandonner une grande portion des joueurs malveillants. Cumulées, il faudrait développer des systèmes aussi avancés que Sentinel pour réussir à atteindre un joueur protégé.

    Résultats

    Pendant les quelques semaines de fonctionnement, Sentinel a collecté des données sur plus de 40 000 joueurs. Malheureusement, le serveur perdait des joueurs plus vite que je ne l’avais prévu. Ce qui signifie que Sentinel devenait de plus en plus inutile chaque jour. Les streamers ont cessé de diffuser sur le serveur et les joueurs ont commencé à partir. Avec un nombre de joueurs trop bas, il devient impossible d’avoir des files d’attente sans stream snipers, car ils sont pratiquement les seuls joueurs en ligne. Le serveur a été très mal géré et après quelques mois sans mise à jour, il a finalement été fermé.

    Quelques semaines avant cela, le nombre de joueurs était si bas que les gens pensaient que le serveur faisait du botting pour augmenter artificiellement le nombre de joueurs. Beaucoup de serveurs font cela pour paraître plus populaires qu’ils ne le sont et attirer plus de joueurs. Mais dans ce cas, les gens se plaignaient de quelques bots restant tout le temps dans les lobbies. Cachés parmi des milliers de joueurs, Sentinel était pratiquement impossible à trouver, mais avec un nombre de joueurs si bas, il était pratiquement les seuls joueurs en ligne. Le staff a décidé de bannir les bots pour éviter tout problème supplémentaire. Avec aucun streamer actif, Sentinel n’avait plus de raison de rester en ligne, donc suite à ces événements, Sentinel a également été éteint.

    Nous pouvons encore trouver quelques fun facts sur les données collectées. Tout d’abord, les joueurs avec des rangs payants étaient un très faible pourcentage des joueurs, ce qui signifie que les revenus du serveur étaient très bas. Seuls 2 joueurs ont été trouvés avec le rang de streamer. Sentinel était capable de trouver n’importe qui. Cela signifie que la plupart des streamers ne se sont jamais connectés lorsque Sentinel était en fonctionnement. Et évidemment, les 2 streamers étaient le duo qui se faisait snip et attirait toujours des joueurs.

    Responsabilité des Serveurs

    Le système de réseau de bots n’est pas une solution miracle au stream sniping. Il est important de noter que bien que des systèmes comme Sentinel fassent de leur mieux pour aider les joueurs, leur champ d’action reste très limité. Ces dernières années, le désintérêt des serveurs pour protéger leurs joueurs a été un problème majeur. Des serveurs apparaissent avec peu voir aucun anticheat ou de système de surnom (généralement, une commande pour falsifier un nom d’utilisateur), ce qui pourrait être considéré comme le strict minimum pour protéger les joueurs.

    Soyons honnêtes un instant, Sentinel est très limité car il ne peut obtenir des données que comme n’importe quel autre joueur pourrait. Il ne peut rien faire à propos du serveur lui-même. Un serveur, en revanche, a accès à beaucoup de données, et il serait beaucoup plus efficace et précis de développer ce genre de système du côté serveur. Vous pourriez créer différentes files d’attente, avoir une précision parfaite pour les parties, les jeux en file d’attente, les lobbies, etc.

    En fin de compte, Sentinel était un excellent projet. C’était un projet amusant à réaliser. Évidemment, j’aurais aimé le voir pleinement développé et fonctionnel, mais c’était quand même une bonne expérience.