Est-il possible de contrer les bots ?

Inscrit
2 Novembre 2014
Messages
12
Reactions
0
#1
Salut à tous !

Je me demandais s'il y avait un moyen concret de protéger ses serveurs des bots.
En d'autres termes, existe-t-il une méthode infaillible pour supprimer ce "fléau" ?
Et si non, quelles sont pour vous les meilleures façons pour s'en protéger et en réduire l'impact ?

Je pose toutes ces questions parce que je travaille en ce moment sur un jeu multijoueurs et j'aimerais ne pas être envahi directement :teeth:

Merci beaucoup pour vos réponses ! :)
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#2
Oh tiens un mec d'Ankama ^^

Sinon, je pense qu'il y a plusieurs aspects à considérer :

- A quel point est-il facile de décompiler ton client ? Par exemple Dofus est facile à décompiler parce que c'est codé avec Adobe Air, et les sources sont lisibles : les noms des classes et des fonctions apparaissent en clair. Ankama pourrait aussi obfusquer ses sources, mais je pense que ça compliquerait le debug etc. A l'inverse, si ton jeu est codé en C++, il est beaucoup plus dur de lire ses sources. Il y a aussi des jeux codés en js mais qui sont si obfusqués (ou juste qui sortent de emscripten) qu'il est vraiment dur de lire leur code. Tu peux également modifier régulièrement les noms de tes fonctions, introduire des mini variations de ton protocole etc…

- Est-ce que ton protocole est facile à décoder ? Dans Dofus 1, le protocole était si simple que n'importe qui aurait pu le comprendre sans même décompiler. Le protocole de Dofus est un peu plus compliqué mais il pourrait également être décodé (c'est plus difficile à comprendre si on n'a pas la correspondance id - nom du paquet, mais c'est faisable).

- Est-ce que le protocole est chiffré ? Activer ssl (ou tls ou n'importe quelle méthode pour crypter) est aussi très intéressant puisque quelqu'un aura besoin de changer la clef intégrée au client avant de pouvoir passer à l'étape précédente. Pour peu qu'il y ait quelques obfuscations dans le code ce sera pas si facile.

- Est-ce qu'un bot pixel peut facilement marcher ? Cela dépend surtout de ton jeu, c'est difficile à évaluer.

Avec ça les bots socket et MITM devraient déjà être assez occupés.
Tu peux aussi rajouter des "challenges" faciles à résoudre par ton programme / par un humain mais difficiles pour un bot : par exemple le rawdatamessage permet de vérifier l'intégrité de certains fichiers (mais ce n'est pas forcément une bonne idée de le reproduire à l'identique, certains réussissent à faire exécuter du code as arbitraire par le client). Rajouter un CAPTCHA périodiquement avec un ban pour les comptes qui ne les résolvent jamais est également envisageable, mais tu peux aussi présenter cela sous la forme de mini-jeux qui rapportent une récompense au joueur qui les résout, et qui demanderaient à un bot de pouvoir reconnaître des images.
Enfin, tu peux faire de l'analyse comportementale assez simple : quel est l'uptime de tel compte ? combien de temps y a-t-il entre ses actions ? y a-t-il des paquets mal formés ?

Il y a vraiment moyen d'être sournois et d'empêcher les gens de développer un bot en faisant des bans lors d'émission de paquets mal formés.
Je pense qu'avec ça il est vraiment très difficile de développer un bot.
 
Inscrit
2 Novembre 2014
Messages
12
Reactions
0
#3
Merci beaucoup pour ta réponse complète !

Pour le premier point, mon jeu sera en JS (sans pré-compilation) jouable sur navigateur donc extrêmement lisible. Je peux en effet l'obfusquer mais pas sûr que ça en arrête beaucoup sachant qu'il est quand même assez simple de désobfusquer un code js (après c'est juste bien pour brouiller les noms de variables je pense).

Activer ssl pour chiffrer le protocole est une excellente idée, je note :)

Ensuite, les CAPTCHA / mini-jeux sont également intéressants mais à voir car je voudrais pas impacter directement l'immersion du jeu avec un truc obligatoire.

L'analyse comportementale est un bon compromis et permet de punir immédiatement les erreurs (j'aime beaucoup ton idée d'instant ban lors d'émission de mauvais paquets :p)

Merci encore je me débrouillerai avec tout ça ^^
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#4
Alors détrompe-toi, ça fait une grosse différence d'obfusquer les noms de variables.
Personnellement, je hacke souvent des jeux et c'est beaucoup plus dur de rétroengineerer un code source si on ne peut pas chercher pour des valeurs comme "score", etc…

En fait, je pense que ça servira pas à grand chose de mettre du ssl si c'est du http ou du WebSocket. Vu que c'est un jeu navigateur, les outils de développement chrome permettent de tout voir en clair, ssl ou pas ssl.

Du coup tu as vraiment intérêt à faire un protocole compliqué ou à rajouter une couche de crypto. Par exemple tu peux obfusquer tous les paquets en faisant un cryptage à la main. Je te conseillerais un xor avec un masque de taille fixe. C'est pas une bonne crypto mais c'est une très bonne obfu et ça se repère difficilement dans le code source (c'est une boucle et une ligne). Vu que tu dois sûrement avoir un protocole basé sur json, c'est peut-être la meilleure solution dans un premier temps.

Oui l'instant ban c'est pas mal, mais tu as intérêt à pas te planter dans ton propre code :p
 
Inscrit
2 Novembre 2014
Messages
12
Reactions
0
#5
D'accord merci pour l'info, j'obfusquerai tout ça alors ! Si ça peut t'arrêter :p

Vu que tu dois sûrement avoir un protocole basé sur json
Tout à fait, c'est du socket.io. Je rajouterai un xor comme tu me l'as conseillé, ça me paraît excellent !

Oui l'instant ban c'est pas mal, mais tu as intérêt à pas te planter dans ton propre code
Effectivement c'est sûrement risqué de le faire sur chaque paquet.
Peut-être que j'enverrai simplement un paquet contenant une clé de chiffrement au client (lui-même chiffré avec xor) à un moment aléatoire du jeu, et si celui-ci ne me renvoie pas la bonne réponse, alors c'est le ban o_O

Je sais pas si c'est possible d'imbriquer différentes couches de crypto comme ça.
 
Inscrit
29 Octobre 2016
Messages
65
Reactions
2
#6
Pour bloquer un bot il faut bloquer le joueur.
Il est logiquement impossible de contrer un bot, même par les captchas nous pouvons les contrés.

À l'heure actuel aucune solution permet de différencier un humain à un bot.
Bien sur les bots ici sont facilement repérable, je parle de quelqu'un qui travaillerais sur le bot dans le but qu'il soit proche de l'humain.

La seule chose à faire, c'est rendre la chose difficile à quelqu'un qui voudra bot sur ton système, décourager les programmeurs c'est l'unique chose à faire, personnellement sur mes créations je travail sur la vérification de fails, les bots c'est loin d'être mon problème.

Des modérateurs payer peut être, une intrusion total dans les échanges, les combats.
Si on voit des joueurs farm 1 semaine une zone et tout échanger à un même joueur, là oui on peut retrouver.

Mais à part des jeux de pistes pas possible.
 
Inscrit
2 Juin 2020
Messages
57
Reactions
32
#9
Autres que les solutions techniques, tu peux aussi réfléchir au gamedesign de ton jeu. Modifier le gameplay peut freiner l'usage des bots.
 
Haut Bas