C'est obligé que ça soit du ML, c'est une simple classification qu'ils font : "bot" ou "pas bot" (un %).
et le ML est extrêmement fort pour faire ça, presque certain qu'un knn sur la fréquence par type de paquets reçus permet de détecter un bot au bout d'un certain temps... inutile de dire qu'il y a bien mieux maintenant, genre réseaux neuronaux
réseau de neurones ?
Cliquez pour révéler
Cliquez pour masquer
Très grossièrement (jsuis pas du domaine) : t'as des couches de neurones "layers" reliés entre eux. Les neurones de la première couche prenent des données brutes en entrée les autres couches prennent une combinaison des sorties des neurones de la couche précedente, et ce jusqu'à obtenir la sortie voulue. Chaque neurone correspond à une fonction f(x1,x2,x3,...,xn), qui sort une valeur correspondant à son activation. Le plus basique est le perceptron : un neurone qui correspond à un polynome de degré n qui sort 0 ou 1. (ex. f(x1,..,xn) = {1 si x1<5, 0 sinon} est un perceptron). Et c'est à peu près tout.
Ces fonctions sont "règlables", pour les régler on va mettre en entrée du réseau des paramètres, en sortie la sortie souhaité pour ces paramètres, et on va modifier les paramètres d'activation des neurones (leur fonction) pour que la sortie corresponde à l'entrée. C'est ce qu'on appelle l'entrainement.
ex. f(x1,..,xn) = {1 si x1<5, 0 sinon} peut être la fonction lié à un neurone après la première donnée, ensuite au bout de quelques données on pourrait se retrouver avec f(x1,..,xn) = {1 si (1 + 3*x1 + 2*x3) <18, 0 sinon}
Ici on peut mettre en entrée des statistiques sur les paquets, les infos du joueur, etc..
ça peut aller du temps moyen entre 2 actions à "isEmailValid", "isActiveInGuild", "nbInvalidSerializedPackets", etc..
les données, Ankama a du en récolter pas mal depuis le temps qu'ils nous bannissent.
Niveau stockage & calcul, on a pas besoin de stocker les données brutes, des statistiques suffisent, et on a pas besoin de temps réel. J'vois bien une archi avec apache kafka, etc..
Maintenant, si c'est bien du réseau de neurones, l'idée serait de pouvoir le tromper, et là ça risque d'être complexe mdr.
Dans le principe "tromper un réseau de classification" c'est les réseaux antagonistes, genre GAN
GAN = Generative Adversarial Network, kezako ?
Cliquez pour révéler
Cliquez pour masquer
Inventé par Ian Goodfellow en genre 2015, le principe est d'avoir 2 réseaux de neurones : le premier est un réseau de classification entraîné, le second un algo qui génère qqch, et qui prend une entrée spéciale : la récompense, son but est de maximiser la récompense.
Et le concept est : on branche la sortie du second dans l'entrée du premier, et la sortie du premier sur la récompense du second.
Le second est entraîné à tromper le premier.
Exemple : on entraine le premier à reconnaître des visages humains, le second à générer des images à partir de bruit (image générée aléatoirement), entraîné pour avoir le meilleur score sur le premier (== générer des visages), et ça donne ça : https://thispersondoesnotexist.com/
Même si l'application qu'on va plus chercher à atteindre c'est ça : https://cdn-images-1.medium.com/max/2600/1*PmCgcjO3sr3CPPaCpy5Fgw.png on génère, sur une entrée du réseau 1 classique, un bruit qui utilise l'imprécision des poids du réseau de neurones pour changer la sortie.
Et pour faire ça sans Ankama, c'est impossible.
Après éventuellement, un truck sympa c'est entraîner un réseau de classification avec des données de jeu "non ban" et "ban" récoltées avec un sniffer par exemple. Ensuite, avant d'envoyer un paquet avec le bot, il faut le faire passer dans la classif, et ne pas l'envoyer si la sortie est "ban", ou même alerter si le % de chance de "ban" est supérieur à 40% et augmente par exemple.