Mise à jour D..

Inscrit
22 Septembre 2013
Messages
44
Reactions
0
#21
Allé, maintenant que tu as un super decompileur, tu peux trouver la solution ! Moi je m'y remets d'ici deux heures :)

Ouais j'avais aussi trouvé ça juste avant de retourner en ccours. Une solution ?
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#22
Code:
 public function verify(param1:IDataInput, param2:ByteArray) : Boolean {
         var header:String = null;
         var len:uint = 0;
         var input:IDataInput = param1;
         var output:ByteArray = param2;
         try
         {
            header = input.readUTF();
         }
         catch(e:Error)
         {
            throw new SignatureError("Invalid file format (can\'t read header)",SignatureError.INVALID_HEADER);
         }
         if(header != ANKAMA_SIGNED_FILE_HEADER)
         {
            throw new SignatureError("Invalid header",SignatureError.INVALID_HEADER);
         }
         else
         {
            formatVersion = input.readShort();
            sigData = new ByteArray();
            decryptedHash = new ByteArray();
            try
            {
               len = input.readInt();
               input.readBytes(sigData,0,len);
            }
            catch(e:Error)
            {
               throw new SignatureError("Invalid signature format, not enough data.",SignatureError.INVALID_SIGNATURE);
            }
            try
            {
               this._key.verify(sigData,decryptedHash,sigData.length);
            }
            catch(e:Error)
            {
               return false;
            }
            decryptedHash.position = 0;
            ramdomPart = decryptedHash.readByte();
            hash = new ByteArray();
            i = 2;
            while(i < decryptedHash.length)
            {
               decryptedHash[i] = decryptedHash[i] ^ ramdomPart;
               i++;
            }
            contentLen = decryptedHash.readUnsignedInt();
            testedContentLen = input.bytesAvailable;
            signHash = decryptedHash.readUTFBytes(decryptedHash.bytesAvailable).substr(1);
            input.readBytes(output);
            tH = getTimer();
            contentHash = MD5.hash(output.readUTFBytes(output.bytesAvailable)).substr(1);
            trace("Temps de hash pour validation de signature : " + (getTimer() - tH) + " ms");
            output.position = 0;
            return (signHash) && signHash == contentHash && contentLen == testedContentLen;
         }
      }
sa ma pas l'aire si compliquer que sa :p
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#23
Enfaite c'est un rsa modifier je croie ,il faut donc ecrire la clef comme le client la lis mais aussi la cripter en rsa ...
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#25
apperement ca vient juste verifier la signature MD5 du fichier config.xml , on le modifie => la signature md5 change => ca passe plus , d'un autre coté ca veut dire que un bot socket (sans S) n'est pas du tout touché car y'a rien qui passe par le serveur , juste une verification coté client pour voir si le fichier config est d'origine
 

Sparkdaemon

Staff
Membre du personnel
Inscrit
7 Avril 2009
Messages
556
Reactions
3
#26
> Modifier le fichier hosts a la volée.
>Une fois que le client es connecté au serveur, Remettre le fichier hosts a son état d'origine.
> pu qu'as intercepter la connexion client.
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#27
Je suit sur une piste je croit , si sa marche je vous le fait savoire au plus vitte
 

Sparkdaemon

Staff
Membre du personnel
Inscrit
7 Avril 2009
Messages
556
Reactions
3
#28
Excuse moi Asyade, Mais, Pourrais-tu faire un effort sur ton orthographe s'il te plaît ? (Ou au pire, Utiliser un correcteur orthographique) Parce-que des fois, mes yeux sont les chutes du Niagara de la Bretagne
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#29
bon j'ai dit une connerie , j'ai modifier le fichier config en mettant un retour a la ligne a la 1ere ligne juste pour changer la signature md5 du fichier et ca se connecte quand meme
(en fait j'avais le jeu d'installé mais je m'en souvenais pas)
par contre en laissant juste un IP dans le fichier config (un ip officiel) a la place des 2 , ca se connecte pas
 
Inscrit
22 Septembre 2013
Messages
44
Reactions
0
#30
Donc cette signature permet bien de vérifier que le config.xml est officiel. Tu t'en sors asyade ?
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#31
Apres moulte et moulte recherche je commence a comprendre un peut comment sa marche :) (je croie) mais je suit encore loin du bute

ps. spark, je tacherais de faire un maximum d'effort pour mon orthographe
 
Inscrit
22 Septembre 2013
Messages
44
Reactions
0
#32
Quitte a faire de la crypto, autant faire son petit bot full socket non ? :)

Parce que au final, MITM était vraiment pratique pour faciliter la connexion, surtout pour envoyer le paquet 4 non ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#33
Ouai c'est sur que sa facilitai grandement le 4, après si vous faites un MITM uniquement pour le 4.
Moi je préfère le full socket, on m'a beaucoup appris sur l'anti-banne de dofus donc pas trop de souci à ce niveau la.

Cordialement
 

asyade

Membre Actif
Inscrit
26 Avril 2013
Messages
368
Reactions
1
#34
Je suit pas de cette avis , mais la jais un peut la fléme de detailller mon raisonemnt sinon, pour ce qui est de faire marcher tout sa je suit pas sure que je vais y arriver en tout cas je fait une pause

Voici ce que ma dérnier analizer a donner

Code:
ReadUTf() header
ReadInt() format version
ReadInt() Taille des donner rsa
ReadBytes() lis les donner rsa 
On verify si les  donner rsa son correct (singnaturKey.Verify cette class herite de rsakey) en vérifiant on obtien aussi les donner decrypter
DecryptedRsaData.ReadInt() on lis la randomPart dans les donnes obtnu l'ors du décriptage rsa
On fait une bloulce dans chaque byte des DecryptedRsaData en sautant le premier byte
On sauveagrde le byte dans une variable DecryptedHashData de cette facon 
decryptedHash[i] = decryptedHash[i] ^ ramdomPart; (je ne comprent pas trop le signe ^)

Donc on se retrouve avec un hash est aprés sa ma souler ...
C'est pas tout mais en gros c'est tout ce don je me souvient :)
 
Inscrit
22 Septembre 2013
Messages
44
Reactions
0
#35
Lolo, est-ce que tu maîtrises bien le full socket ? Parce que je m'y suis penché un bon moment, et je n'ai jamais réussi à sérialiser ce maudit paquet 4. Tu y arrives toi (à ce jour), si oui, tu pourrais m'aider à passer cette étape ?
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#36
Bonjour ArkhAnik,

Le 4 a changer depuis la mise à jour ?
Car j'avais fait un début de RSA que MoonLight m'avais aidé à compléter.
Si il a changer il faudra me laisser un peu de temps pour me remettre à jour.

Sinon aucun souci :)
Ajoute moi sur skype:
alexandre.frydman

Cordialement
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#37
heu un MITM ca sert pas seulement a envoyer le 4 mais aussi a faire le pont avec tout les autres , en gros ca sert a pas recoder tout le client
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#38
Oui c'est 100 fois plus pratique qu'un full socket, mais après reste à savoir pourquoi vous faîtes un MITM.
Si vous faites un MITM car vous abandonnez le 4, c'est dommage.

Cordialement
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#39
si mitm juste pour passer le 4 alors faut abandonner le bot socket , des messages 4 y'en a 5000
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#40
Beaucoup de gens sont bloqués par le RSA, je ne pense pas aurait pu pouvoir produire un code aussi propre sans MoonLight
 
Haut Bas