Autre HASH_FUNCTION ,c'est quoi cette daube?

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#1
Salut, reprenant tranquillement ma fonctions combat je me suis aperçu que cette method avait fait son apparition dans NetworkMessage ,et était utiliser dans GameActionFightCastRequestMessage, apparemment sa sert a crypter les données contenus dans le paquet mais ce qui est gênant c'est qu'a première vue la fonctions n'est déclarer nulle part ,alors vue que sa fait un moment que je ne m’intéresse plus trop aux nouvelle sécurités j'aimerais que vous m'éclairiez un peut sur le sujet :3 je demande pas une réponse précise mais juste une vague représentations de ce que vous savez au sujet de cette fonction merci d'avance
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
C'est à la réception du RawDataMessage que la variable est initialisé, c'est un vrai bordel en tout cas ce hash.
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#3
Bordel de merde du coup méme en mitm on est obliger de gérer cette saloperie
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#4
Ouais c'est pour ça qu'ils l'ont fait je pense.
 
Inscrit
2 Novembre 2013
Messages
38
Reactions
0
#5
Petite question, le hash n'est pas désactivé ?
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#6
Nope , il est actif mais pas sur tout les paquets .
[strike] Petite question , comment on peut le savoir si un paquet nécessite un hash ou pas ? (ça figure dans les sources ? ou juste by sniffing) [/strike] faut que j'apprenne à chercher :x . c'est bon j'ai trouvé ...
@Asyade tu peux me mp avec un model de trajets de RaidBot stp ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#7
Ankama ne vérifie pas le hash tout le temps, c'est même très rare, cela arrive quand l'anti-bot suspecte un joueur selon ses activités.

Voici la liste des paquets touchés par le Hash:

 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#8
merci bien sa explique pourquoi les mouvements ne marchait plus :3 si non au niveau du rawdata toi tu est parvenu a le contourner? et de ce que j'ais compris un certains DofusInvoker.d2sf pourrait m’être utile mais impossible de mettre la main dessu
Si non je suis tomber sur sa : FightBotFrame a ce que je voie ankama commence a faire des siennes
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#9
Oui j'ai pu le contourner. Il faudrait que tu crées un fichier swf avec les bytes reçus et que tu le décompile pour mieux comprendre.
 

Sparkdaemon

Staff
Membre du personnel
Inscrit
7 Avril 2009
Messages
556
Reactions
3
#10
Wut ? Les données reçues c'est du swf ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#11
Oui le RawDataMessage c'est juste un fichier SWF que execute le client.
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#12
Ba putain! après avoir foutus mon nez la dedans j'en suis persuadé les développeurs de dofus sont des camé
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#13
Ahah non c'est juste très très obfusqué et la plus part du code n'est même pas codé par eux.
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#14
J'ais crue voire sa au niveau de l'obfu ^^ si non il se sont taper des bard avec des petites phrase du style "you shall not pace"

et au niveau de
Code:
   if(_loc2_)
                           {
                           }
                           if(_loc1_)
                           {
                           }
                           if(_loc1_)
                           {
                           }
                           if(_loc1_)
                           {
                           }
je comprends tout a fait l'utiliter de la chose :)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#15
Comme je te disais l'obfuscation est lourde, elle a était faite avec SecureSWF, il me semble que c'est le meilleur obfuscator du marché.
Tu tomberas souvent sur ce genre de choses, cependant avec AS3 Sorcerer on y voit un peu plus clair, et si tu as la foi de te taper la liste des versions de ffdec, tu peux trouver une version adaptée.

https://www.free-decompiler.com/flash/download/archive/
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#16
@Asyade Non, ces trucs bizarres ça provient de la décompilation.
@Sparky Lol tu débarques ^^
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#17
En fait après coup et beaucoup de redbul cette sécurité est aussi bidon que les autres
 

Sparkdaemon

Staff
Membre du personnel
Inscrit
7 Avril 2009
Messages
556
Reactions
3
#18
Labo a dit:
@Asyade Non, ces trucs bizarres ça provient de la décompilation.
@Sparky Lol tu débarques ^^
Totalement, j'avais jamais fait le rapprochement.
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#19
Une petie question pour éviter le double post , en full socket , le CheckIntegrity est rempli par le RawData (Hash_Func ?) .
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#20
Le RawDataMessage a deux objectifs:

- A son exécution, envoyer le CheckIntegrityMessage via la fonction SendTicket.

Code:
public function sendTicket() : void
      {
         if(_loc21_)
         {
         }
         var _loc18_:* = 0;
         if(_loc22_)
         {
         }
         var _loc1_:String = §_a_-_---§.§_a_--_--§(-1820302811);
         if(!ApplicationDomain["currentDomain"]["hasDefinition"](_loc1_))
         {
            return;
         }
         var _loc2_:Object = getDefinitionByName(_loc1_);
         var _loc3_:Class = getDefinitionByName("com.ankamagames.dofus.network.messages.security::CheckIntegrityMessage") as Class;
         if(_loc21_)
         {
         }
         var _loc4_:Object = getDefinitionByName(§_a_-_---§.§_a_--_--§(-1820302792));
         if(_loc21_)
         {
         }
         var _loc5_:Object = getDefinitionByName(§_a_-_---§.§_a_--_--§(-1820302803));
         if(_loc21_)
         {
         }
         var _loc6_:Object = getDefinitionByName(§_a_-_---§.§_a_--_--§(-1820302801));
         if(_loc21_)
         {
         }
         var _loc7_:Object = getDefinitionByName(§_a_-_---§.§_a_--_--§(-1820302806));
         if(_loc22_)
         {
         }
         var _loc8_:* = new _loc5_(_loc5_["applicationDirectory"]["resolvePath"](§_a_-_---§.§_a_--_--§(-1820302810)));
         var _loc9_:* = new _loc7_();
         var _loc10_:ByteArray = new ByteArray();
         _loc9_["open"](_loc8_,_loc6_["READ"]);
         _loc9_["readBytes"](_loc10_);
         _loc9_["close"]();
         var _loc11_:* = new getDefinitionByName("flash.utils.ByteArray")();
         if(_loc22_)
         {
         }
         if(_loc21_)
         {
         }
         _loc11_["writeByte"](-33497 - _SEEELXXDWEW(247) ^ this._SEOLMILLMMG);
         if(_loc22_)
         {
         }
         if(_loc21_)
         {
         }
         _loc11_["writeByte"](_SWWWMWEWDD(530) ^ -1080633 ^ this._SWOMDIMMGI);
         if(_loc21_)
         {
         }
         if(_loc22_)
         {
         }
         _loc11_["writeByte"](_SWWWMWEWDD(54) + 1077865 ^ this._SEHDDOIXLHD);
         if(_loc21_)
         {
         }
         if(_loc22_)
         {
         }
         _loc11_["writeByte"](2539398 - _SEDDEWLXHEE(766) ^ this._SEOLHGLDLXO);
         if(_loc22_)
         {
         }
         if(_loc22_)
         {
         }
         _loc11_["writeByte"](_SEEMOGEOHXE(335) + -137633 ^ this._SEOEMWWXWWE);
         if(_loc22_)
         {
         }
         if(_loc22_)
         {
         }
         _loc11_["writeByte"](_SEEMOGEOHXE(-450) ^ 1080592 ^ this._SEOLHGLDLXO);
         if(_loc21_)
         {
         }
         if(_loc22_)
         {
         }
         _loc11_["writeByte"](136739 - _SEEMOGEOHXE(-547) ^ this._SWOMDIMMGI);
         if(_loc22_)
         {
         }
         if(_loc21_)
         {
         }
         _loc11_["writeByte"](-1080614 - _SEEMOGEOHXE(189) ^ this._SEOEMWWXWWE);
         if(_loc22_)
         {
         }
         if(_loc22_)
         {
         }
         _loc11_["writeByte"](_SEDDEWLXHEE(436) + -2535681 ^ this._SHHWHWXIHE);
         if(_loc21_)
         {
         }
         if(_loc22_)
         {
         }
         _loc11_["writeByte"](_SHDLGEDWD(-216) ^ -34381 ^ this._SEIIHEEMHXM);
         if(_loc22_)
         {
         }
         if(_loc21_)
         {
         }
         _loc11_["writeByte"](9011 - _SEIWWOOXLEO(-733) ^ this._SEOEMWWXWWE);
         if(_loc22_)
         {
         }
         if(_loc22_)
         {
         }
         _loc11_["writeByte"](_SEXMLLHMLOO(584) + 111704 ^ this._SMXGGHEMXG);
         if(_loc21_)
         {
         }
         if(_loc22_)
         {
         }
         _loc11_["writeByte"](174220 - _SEEDMIMXHOM(756) ^ this._SGELXWXDM);
         if(_loc21_)
         {
         }
         if(_loc21_)
         {
         }
         _loc11_["writeByte"](_SEDDEWLXHEE(-442) ^ -1898 ^ this._SWOMDIMMGI);
         if(_loc22_)
         {
         }
         if(_loc21_)
         {
         }
         _loc11_["writeByte"](_SEXMLLHMLOO(-68) ^ -47292 ^ this._SEOEMWWXWWE);
         var _loc12_:_SIEIWIILDG = new _SIEIWIILDG();
         var _loc13_:_SDXOMXOELGI = new _SDXOMXOELGI(new _SEIDHHEEIME(new _SEEOXHMXHLX(_loc11_),_loc12_));
         var _loc14_:ByteArray = new getDefinitionByName("flash.utils.ByteArray")();
         _loc14_["writeUTF"](_loc2_["getInstance"]()["gameServerTicket"]?_loc2_["getInstance"]()["gameServerTicket"]:"");
         if(_loc22_)
         {
         }
         _loc14_["writeBytes"](getDefinitionByName(§_a_-_---§.§_a_--_--§(-1820302805) + "D5")["hash"](_loc10_));
         _loc12_["setBlockSize"](_loc13_["getBlockSize"]());
         _loc13_["decrypt"](_loc14_);
         var _loc15_:Vector.<int> = new Vector.<int>();
         if(_loc21_)
         {
         }
         _loc14_["position"] = 0;
         if(_loc21_)
         {
         }
         var _loc16_:uint = 0;
         while(true)
         {
            if(_loc21_)
            {
            }
            if(_loc14_["bytesAvailable"] == 0)
            {
               break;
            }
            _loc18_ = _loc14_["readByte"]();
            _loc15_[_loc16_] = _loc18_;
            _loc16_++;
         }
         if(_loc21_)
         {
         }
         getDefinitionByName(§_a_-_---§.§_a_--_--§(-1820302800))["HASH_FUNCTION"] = this.addCryptedHash;
         var _loc17_:* = new _loc3_();
         _loc17_["initCheckIntegrityMessage"](_loc15_);
         _loc4_["getConnection"]()["send"](_loc17_);
      }
   }

- Stoquer la fonction AddCryptedHash dans HASH_FUNCTION pour crypter les paquets par la suite.

Code:
getDefinitionByName(§_a_-_---§.§_a_--_--§(-1820302800))["HASH_FUNCTION"] = this.addCryptedHash;
 
Dernière édition:
Haut Bas