Autre [RESOLU][HELP] types de données contradictoires - HumanCheck

A

Anonymous

Invité
#1
Salut à tous !

Je rencontre un drôle de problème pendant l'analyse de la méthode sendTicket() de la classe HumanCheck (décompilée avec As3Sorcerer)

voici la (l'une des) ligne(s) dont l'incohérence des types de données me laisse perplexe :

Code:
//as3

var _local_9:ByteArray = new ByteArray();
//on y entre ensuite la totalité du DInvoker.swf avec un readBytes
...
var _local_13:ByteArray = new ByteArray();
...
_local_13.writeBytes(by.blooddy.crypto.MD5.hash(_local_9));
2 soucis :
- la méthode MD5.hash() prend normalement une String en paramètre, or là c'est un ByteArray.
- la méthode ByteArray.writeBytes() prend normalement un ByteArray en paramètre, or là MD5.hash() renvoie une String.

Je soupçonne une erreur de décompilation de code obfusqué, mais je ne vois pas comment y remédier sans créer d'erreur.
Il paraît difficile de transformer en chaine un byteArray de données binaires sans perte d'info (tout octet n'ayant pas forcément un caractère associé).

Toute suggestion est la bienvenue.
Merci d'avance.

PS : des bots full socket ont-ils déjà réussi à survivre à la maj 2.23 ?

Atlantide
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
Re: [HELP] types de données contradictoires - HumanCheck

Bonsoir,

Peut etre que les fonctions sont simplement inversés ?

Oui des bots ont survécus. J'ai moi meme bypass le rdm.
 
A

Anonymous

Invité
#3
Re: [HELP] types de données contradictoires - HumanCheck

Merci pour ta réponse,
mais a priori, on a toujours un problème de type (un seul cette fois) :

Code:
by.blooddy.crypto.MD5.hash(_local_13.writeBytes(_local_9));
Md5.hash() réclame toujours une String et non un ByteArray.
La solution serait-elle de transformer le _local_13 en String style _local_13.toString() ?

Atlantide

PS : Félicitations pour ton bot !
 
A

Anonymous

Invité
#4
Re: [HELP] types de données contradictoires - HumanCheck

... et il y a un autre soucis.
La résultante doit être un ByteArray et non une String (ce que renvoie le hash)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#5
Re: [HELP] types de données contradictoires - HumanCheck

A vrai dire je ne pense pas que traduire le code du humancheck soit la meilleur solution. Sachant que les AS se mettent a jour casiment toute les semaines.
 
Inscrit
1 Mars 2014
Messages
120
Reactions
0
#6
Re: [HELP] types de données contradictoires - HumanCheck

Il paraît difficile de transformer en chaine un byteArray de données binaires sans perte d'info (tout octet n'ayant pas forcément un caractère associé).
Je comprends pas trop ce que tu as voulu dire par là ?
Je sais pas en quel langage tu code mais moi qui fais du C/C++, j'utilise des char* à la place des byteArray, bien-sur je ne peux pas afficher ce dernier si l'octet n'a pas de représentation ascii, mais en aucun cas je perd de l'info.
 
A

Anonymous

Invité
#7
Re: [HELP] types de données contradictoires - HumanCheck

DeepSiderZ a dit:
Je comprends pas trop ce que tu as voulu dire par là ?
Je sais pas en quel langage tu code mais moi qui fais du C/C++, j'utilise des char* à la place des byteArray, bien-sur je ne peux pas afficher ce dernier si l'octet n'a pas de représentation ascii, mais en aucun cas je perd de l'info.
Oui tu as raison, c'est moi qui suis dans l'erreur. Et ça me rassure, car effectivement je vais pouvoir convertir mes ByteArray en String sans faire de casse. Merci pour ce petit ré-aiguillage :)

Sinon, pour BlueDream :

je sais que le HumanCheck change très (trop) souvent pour qu'il soit rentable de prendre la peine de le traduire. Mais je n'ai adopté cette solution (c'est vite dit) qu'après avoir épuisé toutes les autres qui me semblaient possibles à ma connaissance et du point de vue de mes compétences.
Mon bot est en AS3 (facile direz-vous ^^) et pour les maj 2.21 et 2.22, il me suffisait de laisser le HumanCheck s'exécuter et intercepter le pm pour l'envoyer selon mes prescriptions.
A partir de la 2.23, ça ne fonctionne plus : HumanCheck/sendTicket() provoque une erreur qui, au vu du code décompilé, semble venir d'elle.

ArgumentError: Error #2004: One of the parameters is invalid.
at Error$/throwError()
at flash.filesystem::File/set nativePath()
at flash.filesystem::File()
at HumanCheck/sendTicket()
at MethodInfo-6()
https://cadernis.fr/index.php?threads/[full-socket]-rawdatamessage.1114/

Or je sais bien que cela ne se peut pas. La classe HumanCheck est par définition complètement fonctionnelle dans sa forme originale. Mais après avoir retourné le problème dans tous les sens, impossible de mettre le doigt sur l'origine de l'erreur. Ce qui est rendu plus difficile encore par le fait que ce code dynamique n'est pas débuggable à l'exécution.
J'ai donc pris le parti d'essayer de mettre en place une classe nommée HumanCheckLite.as qui est sensée reprendre uniquement les parties qui me semblaient utiles chez sa grande sœur, c-à-d la récupération du gameServerTicket et du DInvoker, leur passage à la moulinette selon le code source... et finalement l'envoi du CheckIntegrityMessage. J'en suis là avec mes ByteArray et mes String :(.

Mais je suis ouvert à toute autre piste, ou astuce me permettant d'éviter une traduction bête et méchante...

Atlantide
 
Dernière édition par un modérateur:

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#8
Re: [HELP] types de données contradictoires - HumanCheck

Je ne te donnerais malheureusement pas ma solution mais je pense que si tu réfléchi un petit peu tu trouveras tout un tas de possibilités très simple pur gérer dynamiquement le RDM.
 

Shornaal

Membre Actif
Inscrit
17 Février 2011
Messages
194
Reactions
0
#9
Re: [HELP] types de données contradictoires - HumanCheck

Si tu ne veux pas laisser ta solution au grand publique Alexandre tu peux lui envoyer une ébauche d'idée par MP, atlantide est présent depuis un certain temps et me semble être un membre de confiance qui a participé régulièrement pour émettre des solutions lors de l'apparition de sécurité supplémentaire. Je me rappelle qu'il avait participé lors de l'apparition du RSA dans le client. Sinon autant simplement ne pas répondre...

(Désolé ne pas proposer moi-même de solutions mais je ne développe plus de bot Dofus depuis un certain temps et je ne suis pas à jour du touuuuuut !)
 
A

Anonymous

Invité
#10
Re: [HELP] types de données contradictoires - HumanCheck

Shornaal a dit:
Si tu ne veux pas laisser ta solution au grand publique Alexandre tu peux lui envoyer une ébauche d'idée par MP, atlantide est présent depuis un certain temps et me semble être un membre de confiance qui a participé régulièrement pour émettre des solutions lors de l'apparition de sécurité supplémentaire. Je me rappelle qu'il avait participé lors de l'apparition du RSA dans le client. Sinon autant simplement ne pas répondre...

(Désolé ne pas proposer moi-même de solutions mais je ne développe plus de bot Dofus depuis un certain temps et je ne suis pas à jour du touuuuuut !)

Je te remercie Shornaal pour ton intervention.

Mais je comprends très bien Alexandre. Je suppose que AG développe ses systèmes de protection en analysant les façons dont les bots réussissent à les contourner, et notamment en venant visiter des sites du genre de celui-ci (ou d'autres) où très souvent des solutions très explicites sont données.
Et c'est pour cela également que ne pas dévoiler directement une astuce ou une parade est un gage de pérennité pour un bot perso.

Mais enfin, le fait de savoir que plusieurs personnes ont réussi à le faire de différentes manières à réussi à me remotiver.

Merci à vous
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#11
Re: [HELP] types de données contradictoires - HumanCheck

Voilà j'ai envoyé quelque solutions à atlantide en privé. J’espère que cela t'aidera.
 
A

Anonymous

Invité
#12
Re: [HELP] types de données contradictoires - HumanCheck

C'est très cool, merci !
On continue en MP :)
 
Haut Bas