Python PyShark / Scapy : AnkaSisstant

nepk

Membre
Inscrit
23 Janvier 2016
Messages
25
Reactions
0
#1
Hello !

disclaimer (au cas où) : je ne suis pas familier avec le protocole de Dofus2

J'avais une idée qui me trottait dans un coin de la tête après avoir vu le tutoriel de Labo (ici : https://cadernis.fr/index.php?threa...-sniffer-en-live-les-paquets.1486/#post-23720)

Si on peut sniffer les paquets et lire ce qu'il y a dedans, pourquoi ne pas faire un tool pour aider au jeu, une sorte de conseiller ...
Un peu comme un tracker au Poker, mais en mieux.

Je pensais à certaines petites features sympas :
- Aide aux chasses (plus besoin d'entrer sa position, il dit auto où aller pour réussir la chasse, en utilisant les API de dofus-map)
- Évaluation auto des equip (notemment pour trouver auto des bons plans en HDV)
(ex fomule pour avoir un score -> (somme des produits poidsRuneCarac(i)*valeur(i)) / (somme des produits poidsRuneCarac(i)*valeurMAX(i)) )
- Puis sorte de iLvL par extension (avec classement éventuellement)
- Liste des adversaires rencontrés en Koli & statistiques sur eux
- Calcul auto du puits, et conseil de fm
- COMMUNAUTAIRE : Emplacement des portails
- Statistiques de jeu (Temps moyen par tour, apm en combat, temps moyen de changement de carte, etc..)
- ...

Je m'arrête là mais les possibilités sont nombreuses et sympas (enfin à mon sens),
ça offre un réel avantage, sans pour autant être de la triche... enfin un peu, mais pas trop quoi

Question : qqn a déjà essayé / fait qqch comme ça ?
Je préfère poser la question plutôt que perdre mon temps à chercher mdr : qqn voit un élément qui peut rendre ça infaisable ?
Genre paquets cryptés, sniffers non performants (perte d'infos, aléas dans un accès concurrent ou je ne sais quoi, ..), etc...
J'ai pas envie de faire ça en MITM, parce que ça deviendrai vraiment de la triche pour le coup.
 
Inscrit
10 Juin 2018
Messages
6
Reactions
4
#2
"qqn a déjà essayé / fait qqch comme ça" --> Oui
"qqn voit un élément qui peut rendre ça infaisable" --> Non, c'est totalement faisable

Par contre pour ce qui est de la "triche" même comme ça tu restes contraire aux "règles" du jeu donc c'est de la triche à proprement parler (je vois pas trop pourquoi tu fais une différence entre un sniffer et un MITM pour lequel tu te contenterais de lire les données d'ailleurs). Je pense notamment en combat où tu peux avoir accès à des données qui sont envoyées au client pour les prévisualisations mais qui ne sont jamais données directement aux joueurs (fuite/initiative par exemple).
 
Inscrit
28 Mai 2017
Messages
9
Reactions
0
#3
Hello,

Premier message pour moi sur ce forum mais j'y passe régulièrement depuis un moment quand je m'ennuie :).

Si ça peut te rassurer, ce genre d'outils est tout à fait faisable mais il te faut au minimum un protocol builder pour construire un sniffer à partir duquel tu pourras exploiter toutes les infos dont tu as besoin pour l'application que tu veux en faire.

A l'époque j'avais fait un outil d'aide à la chasse au trésor qui marchait bien mais était assez crade, j'avais récupéré des bouts de codes par ci par là en C# qui me permettaient de lire les messages à partir d'un sniffer réalisé à l'aide de SharpPcap. Comme la communication client-serveur Dofus 2 n'est pas chiffrée et tant que tu ne veux faire que de la lecture, c'est pas indispensable de faire ça en MITM. Ensuite j'ai pompé la base de données de Dofus Hunt et je retournais les infos dans une petite console qui restait au premier plan. C'était assez basique mais vachement efficace, il me fallait environ 4 fois moins de temps pour finir une chasse. Ensuite il y a eu le nerf des chasses et j'ai pas eu le courage de continuer comme j'avais pour objectif de remplacer Dofus Hunt ;)

Au final, je trouve qu'aujourd'hui ce genre d'outils facile à développer manque un peu. Pour moi, la principale raison c'est qu'il n'y a pas de brique de base technique dispo à partir de laquelle mettre en place ce genre de fonctionnalités. Par brique de base, j'entends un outil
du genre AmaknaCore Sniffer, mais qui proposerait une API toute simple permettant d'exploiter les messages du jeu et ainsi construire d'autres applications reposant dessus facilement.

Aujourd'hui, si tu veux faire ce genre d'outil, il faut fournir pas mal d'effort afin de reconstruire cette stack technique qui n'a pas de réelle valeur ajoutée et qui est pas mal chronophage. Aussi, j'ai cru comprendre que dans la culture du forum la compréhension de cette stack qui te permet d'exploiter les messages du jeu est un peu un passage obligé, ce qui expliquerait pourquoi cette brique de base n'existe pas.

En tout cas, je t'encourage vivement à te lancer dans la conception et la construction de ce genre d'outil car c'est très enrichissant et potentiellement utile à plein de monde ;)
 
Inscrit
23 Janvier 2016
Messages
25
Reactions
0
#4
Hello !
(C'est pas un up du tréfonds des âges vu que je bosse encore actuellement sur ce projet (quand j'ai le tmps))

C'est vrai que ça serait sympa d'avoir une telle brique, mais je pense que de ne pas l'avoir compose une sorte de barrière à l'entrée, c'est pas plus mal.

Pour le Protocole Builder, du coup pour l'instant c'est moi mdr, ça me fait la main je verrai plus tard s'il devient intéressant d'en avoir un.
Je commence par l'outil chasses au trésor.

Il me reste à :
- deserialiser CurrentMapMessage, MapComplementaryInformationsDatamEssage, MapInformationsRequestMessage
- Trouver un lien entre l'id indice dofus-map et l'id dofus (donc je crois qu'il faut un reader d2o et reader i18n pour le texte)
(d'ailleurs si qqn a une piste chui cho, un peu la flemme de le faire à la main)
- Conversion MapId en coordonnées (enfin je crois, j'ai pas vu si les coordonnées étaient dans les infos de map)


Edit:
ptdr c'est bon pour l'indice, suffit de faire poiLabelid+1 et on a l'id dans Dofus-map
 
Dernière édition:
Inscrit
23 Janvier 2016
Messages
25
Reactions
0
#5
update : toujours dessus à mes heures perdues (et j'en perds en moins en moins :/ ),
J'ai 2 versions de l'outil, une propre avec le protocol builder de Labo, et l'autre fait main.

j'ai mes scripts de création du fichier qui te file les coordonnées d'une map à partir du mapid,
script qui permet de faire un fichier de correspondance entre id dofus et id dofus-map pour les indices (pas hyper précis, mais ça fonctionne).

J'arrive à donner la prochaine map pour tous les indices, sauf les Phorreurs, pour ça il faut aller voir le paquet 226

Et dans les deux versions de l'outil je bloque sur le paquet 226 ...
 
Inscrit
28 Mai 2017
Messages
9
Reactions
0
#6
De mémoire le paquet 226 contient des infos sur la map et il a une taille dynamique (plus t’auras de joueurs ou autre sur la map plus il sera grand). Tu peux arriver jusqu’à une taille où le message 226 est fragmenté en plusieurs paquets et il faut que tu prévois un réassemblage pour avoir le message complet avant de l’exploiter.

Tout ça c’est de mémoire, j’espère ne pas avoir trop dit de connerie ^^
Bon courage pour ton debug !
 
Inscrit
26 Janvier 2016
Messages
99
Reactions
34
#7
Petite question , tu dis que tu peux donner la map pour tous les indices , tu lis un certains fichier qui les contiens tous ?
Si oui lequel est ce ?
Si non passes tu par une bdd ? Comment l as tu "peuplé" ?

Merci d avance .

Ps : je suis sur le mème projet
 
Inscrit
28 Mai 2017
Messages
9
Reactions
0
#8
Petite question , tu dis que tu peux donner la map pour tous les indices , tu lis un certains fichier qui les contiens tous ?
Si oui lequel est ce ?
Si non passes tu par une bdd ? Comment l as tu "peuplé" ?

Merci d avance .

Ps : je suis sur le mème projet
Il n’y a pas de fichier qui contient ces infos. Il te faut un référentiel que tu peux interroger en fonction de tes besoins. Moi j'ai utilisé les endpoints de https://dofus-map.com/hunt
Si tu connais un peu les systèmes web tu devrais pas avoir de mal à faire un petit script qui pompe les données du site.
 
Inscrit
26 Janvier 2016
Messages
99
Reactions
34
#9
Bon bah on a fait la même chose ahah
 
Inscrit
23 Janvier 2016
Messages
25
Reactions
0
#10
J'ai été un peu énervé par le parsage du paquet 226, c'est pas un soucis de paquets découpés, c'est un pb de deserializer.
Ma foction readUnsignedShort fonctionne plutôt bien (je crois .. j'fais ça en python et en gros je le lis comme un UInt16), néanmoins gros soucis au niveau de l'EntityLook, dans le GameContextActorInformations, je trouve un skinLen bcp trop aléatoire, des choses comme 1100 etc.

Le truc c'est que je lis très bien le paquet jusqu'à l'idActor, ensuite le plus souvent ça remonte jusqu'à GameContextActorInformations, du coup il faut lire un double ("ContextualId"), qui donne une valeur cheloue, puis ensuite l'EntityLook, avec le UhShort "BonesId",et ensuite le skinlen et là c'est le bordel.

Bref du coup j'ai trouvé une solution temporaire : je compte le nombre d’occurrences de 471 dans mon paquet 226, il y a quelques faux positifs, mais globalement ça marche
 
Inscrit
26 Janvier 2016
Messages
99
Reactions
34
#11
J'ai été un peu énervé par le parsage du paquet 226, c'est pas un soucis de paquets découpés, c'est un pb de deserializer.
Ma foction readUnsignedShort fonctionne plutôt bien (je crois .. j'fais ça en python et en gros je le lis comme un UInt16), néanmoins gros soucis au niveau de l'EntityLook, dans le GameContextActorInformations, je trouve un skinLen bcp trop aléatoire, des choses comme 1100 etc.

Le truc c'est que je lis très bien le paquet jusqu'à l'idActor, ensuite le plus souvent ça remonte jusqu'à GameContextActorInformations, du coup il faut lire un double ("ContextualId"), qui donne une valeur cheloue, puis ensuite l'EntityLook, avec le UhShort "BonesId",et ensuite le skinlen et là c'est le bordel.

Bref du coup j'ai trouvé une solution temporaire : je compte le nombre d’occurrences de 471 dans mon paquet 226, il y a quelques faux positifs, mais globalement ça marche
J ai pas encore eu le temps de m y attaquer jespere ne pas devoir me reposer sur un "globalement ca marche" c est trop frustrant !!!
 
Haut Bas