Open mgl512 opened 7 years ago
Merci pour les informations @mgl512 ! Et merci à @paly2 pour encourager les joueurs à venir par chez nous mourir en boucle :p
Pour le joueur qui utilise un client modifié, c'est une des grandes faiblesses de Minetest, et nous ne pouvons rien y faire tant qu'il ne c'est pas connecté au moins une fois sur le serveur (pour bannir comptes + IP), néanmoins, nos moyens sont limités car s'il change d'IP, il pourra recréer un compte et c'est le cercle vicieux du chat et de la souris qui commence...
PING, pour que l'info passe et si des idées complémentaires surgissent : @LeMagnesium @crabman77 @Cyberpangolin @Coethium
Idée: si un joueur dig plus 10 blocs de mithril/diamands en l'espace de XX secondes, bannissement automatique (ratio à définir en fonction de la vitesse maximum de digging par un joueur
Il a du hacker pour lire la map et envoyer le signal "dig" à chaque node qui l’intéresse. Peut être contrôler le temps de dig entre 2 nodes et la distance, si moins de 1seconde et dist > 30 alors on ban. puis aussi vérifier si il dig à la main ou pas.
On pourrait vérifier si il dig 10 nodes mithril/diam's d'affilé mais si on tombe sur un chunk ça fera un faux positif. Peut être vérifier la distance entre le joueur et le node dig, car il doit pas se déplacer à coté du node à chaque fois, il doit seulement déplacer pour générer puis dig tout ce qu'il trouve.
Vous avez de bonnes idées, je pense que ça vaudrait la peine de créer un mod "anti-cheat" pour les concrétiser
@Darcidride : nous sommes aussi très interessés par un mod anti-cheat, pour remplacer l'anticheat natif du jeu (que nous désactivons car il empêche, par exemple, le mod sprint de fonctionner). Cet anticheat natif vérifie d'ailleurs simplement, pour empêcher de tels cheats, la distance qui sépare le bloc sur lequel le client veut interragir de sa propre position.
Se baser sur le temps et/ou sur le type de blocs cassés pourrait, comme l'a dit @crabman77, entraîner des erreurs (pour le temps, les paquets peuvent s'être accumulés pendant un freeze, et pour le type de blocs, les grands chunks). La distance (utilisée même seule) est une solution très efficace et peu coûteuse, qui (il me semble) n'est pas susceptible de donner des faux positifs.
C'est tellement dommage que des joueurs profitent de la liberté d'un jeu pour le cheater...
@paly2 Il y a des tricheurs dans tous les jeux, ça n'a pas de rapport avec des jeux libre ou pas, je pourrais même dire en voyant le nombre d'aim-bot, farm-bot, click/pixel bot, etc... que Minetest bénéficie d'un panel de joueurs majoritairement honnête qu'ils n'ont pas, il faut bien réaliser qu'un joueur sur 4 (facilement) à des notions de développement sur Minetest.
L'anti-cheat natif a été écrit à mon avis à une certaine époque ou l'on imaginait pas que des trampolines, sprint, boost de vitesse, boost pour sauter plus haut, pour voler plus vite (sans creative/fast), etc... serait possible/codable/codé. Il n'est clairement plus à l'ordre du jour des besoins que nous avons sur nos serveurs. Nous le désactivons aussi sur tous nos serveurs.
Une solution modulaire par mod semble en adéquation avec les besoins d'aujourd'hui, il ne manque plus qu'a coder ça :)
il faut bien réaliser qu'un joueur sur 4 (facilement) à des notions de développement sur Minetest.
C'est le cas sur des serveurs hardcore comme MinetestForFun, qui par leur difficulté retiendront majoritairement des joueurs âgés, mais pas sur les serveurs moyens (comme Mynetest) où la proportion est d'environ 1 joueur sur 15 (la plupart des joueurs y utilisent Multicraft, bien qu'il y soit activement déconseillé). Dans tous les cas cette proportion élevée est dûe à l'ouverture du jeu. Les jeux propriétaires ne peuvent pas se cheater au-delà d'un bot (un bot ne peut pas faire, par exemple, ce dont il est question dans cette issue) sans les désassembler et passer des jours à analyser le code assembleur, ou bien le reprogrammer en entier, et à condition d'être parvenu à comprendre le protocole réseau.
Les joueurs sont honnêtes (sauf certains) parce qu'ils ont compris qu'on ne prend plus aucun plaisir à un jeu (ce qu'il est censé procurer par définition) si son gameplay n'a plus d'intérêt.
Attention, en aucun cas je ne fais ici l'apologie des licenses fermées !
Peut être contrôler le temps de dig entre 2 nodes et la distance, si moins de 1seconde et dist > 30 alors on ban. puis aussi vérifier si il dig à la main ou pas.
Il y a un gros problème. En cas de lag, ce genre de situations s'applique à tout le monde, et même des joueurs qui ne hackeraient pas pourraient donner l'illusion d'une tonne de dig soundains. Peut-être controller le nombre de dig avec lag < 0.3. Simple, élégant, probablement pas dur.
Et on ne peut pas controller les clients hackés. Je me souviens de Dave qui nous disait qu'un de ses serveurs avait reçu une masse de paquets de dig qui avaient détruit sa map. Le client est roi.
@LeMagnesium +1 pour l'ajustement Et oui je me souviens de ce client de Dave, il avait mis "en feu" tous les cubes de la map
Le premier test efficace serait probablement de contrôler la distance entre le player et le node sur lequel le dig s'applique, comme le suggère @crabman77.
Un contrôle sur le temps de dig entre deux nodes risque en effet de poser une difficultée en cas de lag (comme signalé par @LeMagnesium ). Après un lag, tous les digs en attente vont arriver en même temps alors qu'ils sont légitimes.
Un nouveau pseudo est revenu et a fait la même chose. JackInBox, alias Rupert. Ce sont les joueurs qui l'ont signalé 2 jours plus tard cette fois. On sait qu'il se téléporte aux coordonnées qu'il veut. Là il est allé pile en (20_000, -20_000, 20_000) et a recommencé à miner toutes les ressources des environs sans les toucher et en une poignée de secondes.
Possible qu'il vole dans les coffres verrouillés des joueurs, je ne l'ai pas encore vérifié et je ne suis pas sûr de le faire. Il n'arrive pas à casser dans les areas cependant. (Pourquoi aller voler une pioche en diams alors qu'il en a "miné" des centaines ?) EDIT: J'ai vérifié ça par un filtre asez grossier des coordonnées des coffres verrouillés et partagés qu'il a posés (heureusement alignés) et il n'a pris que dans des conteneurs posés par lui-même. Encore merci à xdecor aussi, qui ne logue vraiment rien.
Ce que j'annonçais arriva ...
Un packet filter les gars ! Ou un anti-hack dans le code c++ ...
Vous avez pas 36 choix , sois vous fork vers un code perso (je parle du core de minetest qui est l'élément un peu foireux) , sois vous faite un serveur dit "proxy" qui va lire chaque commende , ajoutée du delay etc ...
Et encore il y a du travail a faire après sur chaque mod qui certain sont écrit avec le slip pour être poli et qui ne sont absolument pas opti secu
Il y a eu un cheater suprême sur Mynetest. Il a une routine pour creuser une ressource spécifique automatiquement. Il est descendu profondément sous le spawn (-11.000) et a miné exclusivement 25 mithrils par seconde dès son arrivée sur le serveur. C'est assez caractéristique dans les logs, on voit ses lignes "digs mineral_mithril" s'empiler, même s'il y a plein de joueurs, grâce à sa vitesse de minage. Il a enchainé avec mese et ensuite diamant. Il a généré de la map par à-coups quand il s'est déplacé loin pour recommencer : les plus petits chunks possibles entourés de vide. Un joueur qui l'a croisé sur Test dit qu'il tue les autres à distance aussi.
Il a été banni de Test sous les pseudos Gold_Digger / jackspades et d'autres, et de Mynetetest sous les pseudos peapod / jackspades. Sur Mynetest, il y a un panneau au dome du spawn qui dit d'essayer MFF si le jeu est trop facile. Les joueurs y passent 5 minutes avant d'avoir interact.
PS: Si Cyberpangolin peut le filmer en action, c'est le prix Youtubitzer garanti ! Mais pas de pression ;)
-- Le_Docteur.