1.29 Detection de bot

Inscrit
5 Novembre 2016
Messages
55
Reactions
2
#1
Je poste ce message, essayant d'informer tout le monde des nouvelles mesures AntiBot sur dofus retro.

Aujourdhui, j'étais intérogé par le modérateur Sispano :
et voici les packets :


2020-10-10 15:59:54.696 INFO --- [IN] : BC1;http://dofusretro.cdn.ankama.com/lang/versions.swf
2020-10-10 15:59:54.706 INFO --- [IN] : BC2;invisiblemodules/enable.swf
2020-10-10 15:59:54.733 INFO --- [IN] : BC3;invisiblemodules/netfucheck.swf
2020-10-10 15:59:54.733 INFO --- [IN] : BC4;invisiblemodules/snowbotcheck.swf
2020-10-10 15:59:54.735 INFO --- [OUT] : BC2;-11
2020-10-10 15:59:54.737 INFO --- [OUT] : BC3;-11
2020-10-10 15:59:54.737 INFO --- [OUT] : BC4;-11
2020-10-10 15:59:54.762 INFO --- [IN] : BC5;loader.swf
2020-10-10 15:59:54.766 INFO --- [IN] : BC6;modules/core.swf
2020-10-10 15:59:54.785 INFO --- [OUT] : BC1;6449
2020-10-10 15:59:54.901 INFO --- [OUT] : BC6;2558383
2020-10-10 15:59:54.903 INFO --- [OUT] : BC5;2921346
2020-10-10 15:59:55.252 INFO --- [IN] : BC7;je-sais-que-tu-triches.swf
2020-10-10 15:59:55.360 INFO --- [OUT] : BC7;-11


après cette analyse (initié par le modérateur), j'ai été banni (MITM qui necessite aucune modification du serveur, le client se connecte sur mon MITM tout simplement en modifiant le fichier hosts, pour modifier le DNS localement)

D'après cette analyse, je vois mon client cherche le fichier versions.swf, puis active qlq chose, puis vérifie si mon bot est un netfu / snowbot .. puis des BC5, BC6, BC7 que j'ignore leur utilisé,

je suis trop curieux, je veux comprendre à quoi ca correspend, mais en decompressant tous les swf (utiles) du projet, je ne vois aucun moment les swf netfucheck.swf ou autre,


sauriez vous ou est ce que je peux retrouver ces fichiers ? et comprendre le resultat de chaque étape ? merci
 
Inscrit
23 Janvier 2019
Messages
9
Reactions
3
#2
Il se peut que les fichiers "*check.swf" aient été téléchargés pour être executé une seule fois ou même pas présents du tout?
Pour moi, il a calculé la taille des fichiers, la requête provenant du server [IN] puis étant retournée [OUT] avec BC + id du fichier.

Je n'ai pas vraiment d'informations à ce sujet mais tu explique donc t'etre faire bannir le 10 octobre en ayant posté avant le sujet suivant : https://cadernis.fr/index.php?threads/bannissement-dun-bot-mitm.2595/ ?
Tu as demandé au modérateur de vérifier ton compte après?

Pourrais-tu expliquer plus en détails ce qui à permis ton ban? Quel actions réalisait-tu ?

Code:
   _loc1_.fileCheckAnswer = function fileCheckAnswer(_loc2_, _loc3_)
   {
      this.aks.send("BC" + _loc2_ + ";" + _loc3_,false);
   };


_loc1_.onFileCheck = function onFileCheck(§\x1e\x12\x12§)
   {
      var _loc3_ = _loc2_.split(";");
      var _loc4_ = Number(_loc3_[0]);
      var _loc5_ = _loc3_[1];
      if(_loc5_.indexOf("bright.swf") == 0)
      {
         this.api.network.send("BC" + _loc4_ + ";-1",false);
         _loc2_ = _loc5_.substr(10);
         this.onBrightCell(_loc2_);
      }
      else
      {
         dofus["\x1e\n\f"]["\x1d\x1b"].getInstance().checkFileSize(_loc5_,_loc4_);
      }
   };

function checkFileSize(sFile, nCheckID)
   {
      var _loc2_ = sFile.split("*");
      sFile = _loc2_[0];
      var arg = "";
      if(_loc2_.length > 1)
      {
         arg = _loc2_[1];
      }
      var _loc3_ = !this.datacenter.Player.isAuthorized && (!this.datacenter.Player.isSkippingFightAnimations && (!this.datacenter.Player.isSkippingLootPanel && this.ui.getUIComponent("Debug") == undefined));
      if(_loc3_)
      {
         var _loc4_ = _global.CONFIG.connexionServer.ip;
         if(_loc4_ == undefined)
         {
            _loc4_ = this.datacenter.Basics.serverHost;
         }
         if(_loc4_ != undefined && (_loc4_.indexOf("127.0.0.1") == 0 || _loc4_.indexOf("192.168") == 0))
         {
            _loc3_ = !_loc3_;
         }
      }
      var nAddition = !!_loc3_?-10:0;
      var _loc5_ = new Object();
      var ref = this;
      _loc5_.onLoadInit = function(§\x0b\x01§, §\r\x04§)
      {
         var _loc4_ = _loc2_.getBytesTotal() + nAddition;
         var _loc5_ = "CHALLENGE";
         var _loc6_ = _loc2_[_loc5_];
         if(_loc6_ != undefined)
         {
            var _loc7_ = false;
            var _loc8_ = 0;
            while(_loc8_ < ref.config.dataServers.length)
            {
               if(sFile.indexOf(ref.config.dataServers[_loc8_].url) == 0)
               {
                  _loc7_ = true;
               }
               _loc8_ = _loc8_ + 1;
            }
            if(_loc7_)
            {
               var _loc9_ = Number(_loc6_.apply(ref,[sFile,arg]));
               if(!_global.isNaN(_loc9_))
               {
                  _loc4_ = _loc9_;
               }
            }
         }
         ref.onFileCheckFinished(true,_loc4_,nCheckID);
         _loc2_.removeMovieClip();
      };
      _loc5_.onLoadError = function(§\x0b\x01§, §\x0f\x07§, §\r\x04§)
      {
         var _loc5_ = _loc2_.getBytesTotal() + nAddition;
         ref.onFileCheckFinished(true,_loc5_,nCheckID);
         _loc2_.removeMovieClip();
      };
      var _loc6_ = dofus["\x10\x17"].getInstance().getTemporaryContainer();
      var _loc7_ = _loc6_.createEmptyMovieClip("FC" + nCheckID,_loc6_.getNextHighestDepth());
      var _loc8_ = new MovieClipLoader();
      _loc8_.addListener(_loc5_);
      _loc8_.loadClip(sFile,_loc7_);
   }
   function onFileCheckFinished(§\x14\x19§, §\x05\n§, §\x07\n§)
   {
      this.network.Basics.fileCheckAnswer(_loc4_,!_loc2_?-1:_loc3_);
   }
 
Dernière édition:
Inscrit
6 Juin 2020
Messages
19
Reactions
39
#3
Il semblerait que ce soit à cause du check de : http://dofusretro.cdn.ankama.com/lang/versions.swf
Ta redirection via le fichier hosts a du rediriger le domaine dofusretro.cdn.ankama.com vers des swf locaux qui ne correspondent pas.
Le versions.swf fait 940o et le tiens visiblement 6ko, ce qui est bien trop.
 
Inscrit
10 Mai 2015
Messages
343
Reactions
39
#4
Je te conseil d'injecter une dll pour effectuer la redirection, ici comme tu peux le voir il y a une vérification de l'ip du serveur d'authentification :

Code:
         var _loc4_ = _global.CONFIG.connexionServer.ip;
         if(_loc4_ == undefined)
         {
            _loc4_ = this.datacenter.Basics.serverHost;
         }
         if(_loc4_ != undefined && (_loc4_.indexOf("127.0.0.1") == 0 || _loc4_.indexOf("192.168") == 0))
         {
            _loc3_ = !_loc3_;
         }
 
Inscrit
5 Novembre 2016
Messages
55
Reactions
2
#5
donc si je comprend bien, c'est que le modérateur fait que calculer la taille du fichier en o, puis envoyer le resulat afin de checker si j'ai modifié les clients.

ce système représente une faille, car je peux très bien forcer l'envoie d'une réponse customiser pour chaque requete.

d'après ce que j'ai compris, le BC1 permet de calculer la taille du version.swf (qui doit être égale à 940),
mais je vois que la taille du fichier BC5;loader.swf n'est pas 2921346 (mais 1 078 724), et que la taille de modules/core.swf n'est pas 2558383. (mais 1 521 544) ..... alors que je n'ai modifié aucun fichier du jeu.
 
Inscrit
6 Juin 2020
Messages
19
Reactions
39
#6
Faut voir ce que calcul vraiment getBytesTotal() en action script. ça retourne peut être la taille décompressée ?
De toute façon il détecte que tu as redirigé ton host en sur une IP locale (d'où le -11).
 
Inscrit
30 Octobre 2019
Messages
37
Reactions
21
#7
Il semblerait que ce soit à cause du check de : http://dofusretro.cdn.ankama.com/lang/versions.swf
Ta redirection via le fichier hosts a du rediriger le domaine dofusretro.cdn.ankama.com vers des swf locaux qui ne correspondent pas.
Le versions.swf fait 940o et le tiens visiblement 6ko, ce qui est bien trop.
C'est bien à cause de ce fichier, il a du ajouté une autre ligne dans le config.xml et du coup la version locale de versions.swf a été chargée sauf que c'est sans doute une ancienne version vu la taille du fichier. Ca semble quand même bizarre, pour moi si y'a l'url c'est qu'il a dl qql chose sur le web mais bon p'tet pas. zouhair quels fichiers as-tu modifié exactement ? Tu devrais te tourner vers Frida pour ton MITM, ça permet de juste rediriger la connexion au serveur à l'auth et à l'entrée sur le serveur de jeu.
 
Inscrit
5 Novembre 2016
Messages
55
Reactions
2
#8
je n'ai modifié aucun fichier. j'ai juste fait une résolution DNS,
j'ai modifié le fichier hosts de mon PC,

# real dns of co-retro.ankama-games.com is 172.65.206.193
127.0.0.1 co-retro.ankama-games.com

[edit] :
je veux essayer cette technique pour injecter le DDL, mais je ne sais pas comment le réaliser, un tuto pour une technique sera la bienvenue :)
 
Inscrit
5 Janvier 2016
Messages
6
Reactions
0
#9
C'est marrant, j'ai aussi été convoqué par Sispano pour suspicion de bot.

J'ai en effet modifier le fichier config.xml pour rediriger vers mon serveur en local (solution plus simple).

Pour moi bizarrement, il ne m'a pas banni (j'ai dû bien répondre aux questions)).
Je ne sais pas si il m'a testé car on m'a dénoncé ou si il l'a fait car il a détecté une anomalie dans le fichier de config... bizarre.
 
Inscrit
23 Janvier 2019
Messages
9
Reactions
3
#10
C'est marrant, j'ai aussi été convoqué par Sispano pour suspicion de bot.

J'ai en effet modifier le fichier config.xml pour rediriger vers mon serveur en local (solution plus simple).

Pour moi bizarrement, il ne m'a pas banni (j'ai dû bien répondre aux questions)).
Je ne sais pas si il m'a testé car on m'a dénoncé ou si il l'a fait car il a détecté une anomalie dans le fichier de config... bizarre.

Ton système est certes plus simple mais surtout il ne bloque pas la résolution du domaine, il ne fais que changer la route sans changer la destination. Par contre, assure toi que la taille de ton fichier config sois identique au fichier initial pusique c'est, comme le sugère le code que j'ai publié dans le second message de ce sujet, leur actuel moyen de vérifié l'intégrité du client et il semblerait qu'il n'ai pas vérifié ton fichier pour cette fois-ci.
 
Inscrit
28 Février 2014
Messages
97
Reactions
20
#11
je n'ai modifié aucun fichier. j'ai juste fait une résolution DNS,
j'ai modifié le fichier hosts de mon PC,

# real dns of co-retro.ankama-games.com is 172.65.206.193
127.0.0.1 co-retro.ankama-games.com

[edit] :
je veux essayer cette technique pour injecter le DDL, mais je ne sais pas comment le réaliser, un tuto pour une technique sera la bienvenue :)
Regarde du côté de Frida pour la redirection.
 
Inscrit
5 Novembre 2016
Messages
55
Reactions
2
#12
Hello tout le monde , je viens update cette conversation,
j'ai utilisé frida, voici mon code JS injecté

var connect_p = Module.getExportByName(null, 'connect');

Interceptor.attach(connect_p, {
onEnter: function (args) {
// int connect(int sockfd, const struct sockaddr *addr,
// socklen_t addrlen);
this.sockfd = args[0];
var sockaddr_p = args[1];
this.port = 256 * sockaddr_p.add(2).readU8() + sockaddr_p.add(3).readU8();
this.addr = "";
for (var i = 0; i < 4; i++) {
this.addr += sockaddr_p.add(4 + i).readU8(4);
if (i < 3) this.addr += '.';
}
var newport = 443;
sockaddr_p.add(2).writeByteArray([Math.floor(newport / 256), newport % 256]);
sockaddr_p.add(4).writeByteArray([127, 0, 0, 1]);
console.log("connection to:", this.addr, this.port);
},
onLeave: function (retval) {
console.log("retval:", retval.toInt32());
},
})

pour expliquer brièvement ce qu'elle fait ce code, c'est que pendant l'authentification, frida altère l'IP/port de destination.

après avoir envoyé ces packets de check (qui sont envoyé normalement par le modérateur), j'ai remarqué que j'ai les memes réponses, frida ne nous met pas à l'abris.

je vous tiens au courant dès que j'ai trouvé une solution
 
Dernière édition:
Inscrit
5 Février 2020
Messages
1
Reactions
0
#13
Salut @zouhair

Comme dit plus haut par Brizze, le client check si la requête part vers un serveur local (127.0.0.1 ou 192.168...), donc si tu positionnes ton MITM sur une adresse locale c'est normal que ça ne passe pas.
A priori tu peux utiliser Frida si ton MITM est derrière un simple proxy, tu n'auras touché aucun fichier du jeu et le check de l'IP sera ok, à moins que je me trompe ?

Tiens nous au jus
 
Inscrit
5 Novembre 2016
Messages
55
Reactions
2
#14
Salut @zouhair

Comme dit plus haut par Brizze, le client check si la requête part vers un serveur local (127.0.0.1 ou 192.168...), donc si tu positionnes ton MITM sur une adresse locale c'est normal que ça ne passe pas.
A priori tu peux utiliser Frida si ton MITM est derrière un simple proxy, tu n'auras touché aucun fichier du jeu et le check de l'IP sera ok, à moins que je me trompe ?

Tiens nous au jus

pour que le check fonctionne, faudrait que l'adresse du MITM soit différente du 192.168/127.0.0.1,
Ankama a mis à jour une nouvelle politique (antibot), cette politique consiste à bloquer les connexions si l'adresse ip source est différente de 192.168.***. (le proxy (MITM) ne peut pas avoir une adresse IP genre 10.10.10.x/x), donc le check plantera tjrs. (du moins que je me trompe)

pour l'instant, j'essaye de trouver une alternative
 
Inscrit
26 Janvier 2016
Messages
99
Reactions
28
#15
Vous parlez de mitm du coup j'ai du mal à comprendre ce qui vous bloque , pourquoi ne pas tout simplement renvoyé l'adresse attendu plutôt que celle de votre serveur ?
 
Inscrit
30 Octobre 2019
Messages
37
Reactions
21
#16
pour que le check fonctionne, faudrait que l'adresse du MITM soit différente du 192.168/127.0.0.1,
Ankama a mis à jour une nouvelle politique (antibot), cette politique consiste à bloquer les connexions si l'adresse ip source est différente de 192.168.***. (le proxy (MITM) ne peut pas avoir une adresse IP genre 10.10.10.x/x), donc le check plantera tjrs. (du moins que je me trompe)

pour l'instant, j'essaye de trouver une alternative
oui j'ai vu ce bout de code aussi, le mieux c'est de modifier cette fonction en supprimant la vérif sur l'ip et de renvoyer dans ton mitm la bonne taille de fichier du loader.swf, pour les autres fichiers aucune modif à faire et la fonction de vérif du loader fera le taff.
 
Inscrit
19 Avril 2020
Messages
2
Reactions
1
#17
Je poste ce message, essayant d'informer tout le monde des nouvelles mesures AntiBot sur dofus retro.

Aujourdhui, j'étais intérogé par le modérateur Sispano :
et voici les packets :


2020-10-10 15:59:54.696 INFO --- [IN] : BC1;http://dofusretro.cdn.ankama.com/lang/versions.swf
2020-10-10 15:59:54.706 INFO --- [IN] : BC2;invisiblemodules/enable.swf
2020-10-10 15:59:54.733 INFO --- [IN] : BC3;invisiblemodules/netfucheck.swf
2020-10-10 15:59:54.733 INFO --- [IN] : BC4;invisiblemodules/snowbotcheck.swf
2020-10-10 15:59:54.735 INFO --- [OUT] : BC2;-11
2020-10-10 15:59:54.737 INFO --- [OUT] : BC3;-11
2020-10-10 15:59:54.737 INFO --- [OUT] : BC4;-11
2020-10-10 15:59:54.762 INFO --- [IN] : BC5;loader.swf
2020-10-10 15:59:54.766 INFO --- [IN] : BC6;modules/core.swf
2020-10-10 15:59:54.785 INFO --- [OUT] : BC1;6449
2020-10-10 15:59:54.901 INFO --- [OUT] : BC6;2558383
2020-10-10 15:59:54.903 INFO --- [OUT] : BC5;2921346
2020-10-10 15:59:55.252 INFO --- [IN] : BC7;je-sais-que-tu-triches.swf
2020-10-10 15:59:55.360 INFO --- [OUT] : BC7;-11


après cette analyse (initié par le modérateur), j'ai été banni (MITM qui necessite aucune modification du serveur, le client se connecte sur mon MITM tout simplement en modifiant le fichier hosts, pour modifier le DNS localement)

D'après cette analyse, je vois mon client cherche le fichier versions.swf, puis active qlq chose, puis vérifie si mon bot est un netfu / snowbot .. puis des BC5, BC6, BC7 que j'ignore leur utilisé,

je suis trop curieux, je veux comprendre à quoi ca correspend, mais en decompressant tous les swf (utiles) du projet, je ne vois aucun moment les swf netfucheck.swf ou autre,


sauriez vous ou est ce que je peux retrouver ces fichiers ? et comprendre le resultat de chaque étape ? merci
Du nouveau ?
 
Inscrit
17 Avril 2016
Messages
3
Reactions
0
#18
2020-10-10 15:59:54.735 INFO --- [OUT] : BC2;-11
2020-10-10 15:59:54.737 INFO --- [OUT] : BC3;-11
2020-10-10 15:59:54.737 INFO --- [OUT] : BC4;-11

il sort d'ou ton -11 ?

Mitm : new data received from client : aborted : BC2;-1\n\x00
Mitm : new data received from client : aborted : BC3;-1\n\x00
Mitm : new data received from client : aborted : BC4;-1\n\x00
Mitm : new data received from client : aborted : BC1;6459\n\x00
Mitm : new data received from client : aborted : BC5;2923459\n\x00
 
Haut Bas