C# CommunityTools sniffer

Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#1
Bonjour à tous ! :D

J'ai pour habitude de produire des logiciels qui ne sont pas des bots, celui-ci est limite limite avec les CGU puisqu'il y aura une lecture des packets cette fois ci.
Cependant quand j'ai essayer de comprendre comment lire les packets j'ai vu pas mal de sujets qui parlait de modifier les ports, de redirigé, de modifier le client ...

Mais moi je ne voulais rien de tout cela. Je suis donc partie vers SharpPcap qui permet de lire et d'écrire donc même de faire un bot MITM sans même toucher au client :)

Je vous partage mes bases de ce projet qui ne fait que la lecture, vous pouvez modifier pour en faire l'écriture à vous de chercher, en tout cas ici on est sur une simple lecture et cela fonctionne pour n'importe quel application qui envoie des requêtes TCP.

J'ai publié cela sur mon GitHub: https://github.com/Thomas-Anonymous/CommunityTools

Par contre, je ne promet pas d'arriver au bout du projet, en ce moment j'ai rarement du temps donc je vais travailler dessus comme je le peux.

Mon but de l'outil "communautaire" est de créer des fonctions complémentaire sans pour autant rentrer dans la tricherie, le sniffer est invisible alors aucun problème pour cela !

Comme je dois traduire les packets cela va me demander un petit temps je vais commencer sur Dofus Rétro qui est plus simple, mais j'ai déjà les bases de la traduction des packets de 2.0.

Mon but est de faire un tools rétro et 2.0 :

Rétro:
- Analyse des ressources en banque pour obtenir une liste d'items craftable (similaire à 2.0) check !
- Aide au calcul du puit/reliquat durant le FM (similaire à 2.0)
- Avertissement au spawn de mobs (comme les araknes par exemple pour le sort arakne)

2.0:
- Analyse des données de la chasse au trésor pour donner directement la position du prochain indice (hors phorreurs)
- Avertissement des spawn des mobs (encore)

Puis d'autres options à venir mais déjà on va commencer par lire les packets, même si ils sont inutiles d'être traduit au moins repérer ce qui est ou non utile.
J'ai déjà procéder à un triage des éléments (informations protocoles, destination, source etc etc) je ne sais pas si c'est fixe selon l'ordinateur.

D'ailleurs pour les débutants, si vous prenez les byte en ascii vous risquez d'avoir des parties manquantes pour la simple et bonne raison qu'il contient des caractères spéciaux désignant une fin d'écriture, il faut donc traiter avant de traduire en ascii. Cela peut être valable pour d'autres projets donc je préfère prévenir les débutants bloquant avec des parties manquantes, utilisez WireShark pour vous aidez :)

Voilà voilà !

PS: Il est possible d'envoyer des packets également, donc vous pouvez le transformer en MITM, cependant même si on ne touche pas à Dofus même, cela ne veut pas dire que vous êtes protéger des bannissements, ça reste du MITM classique quelque soit la façon utilisé :)

Edit: Bon ben finalement je lis que ce qui m'intéresse ... C'est à dire le packet de la banque commençant par "Mi" (49 6D) et finissant par "DV" (44 56 00). Il y à une partie inutile mais la partie qui est intéressante c'est celle avec les date~id~quantité~~, j'ai pas tester avec du stuff pour le moment. Et j'ai pas compris le format de la date, dans tout les cas j'ai l'id et la quantité (en hex), c'est tout ce que j'ai besoin moi pour mon outil que je vais essayer de finir d'ici demain, j'ai commencer hier soir je suis assez content :)
 
Dernière édition:

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
1 977
Reactions
104
#2
Sympa, merci du partage :D
 
Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#3
Sympa, merci du partage :D
Ce sera encore plus sympa quand je trouverais le moyens de chercher les crafts disponibles par rapport au total des ressources disponible, là tout de suite de tête je vois pas trop comment je vais pouvoir géré tout cela ... Je sens que je vais pas finir tout de suite finalement, je vais au moins finir la liste des ressources présente, faire des tests avec des stuffs, je suis en train de géré la liste des crafts & des items actuellement, pour déjà tout préparer.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
1 977
Reactions
104
#4
@JeBotPas Alors avec les D2O tu peux récupérer les liste des items et des recettes :)
Une recette est une list de integer dont chaque élément représente le GID d'une ressource.
 
Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#5
@JeBotPas Alors avec les D2O tu peux récupérer les liste des items et des recettes :)
Une recette est une list de integer dont chaque élément représente le GID d'une ressource.
C'est pour rétro j'ai récupérer la liste des SWF comme partager ici:
https://cadernis.com/index.php?threads/données-du-jeu-sorts-items-monstres.2713/#post-26637

J'ai donc la liste des recettes et des items, mais c'est plus comment je vais dire que je peux crafté ceci et cela ... Je pense devoir faire toute la liste des 2241 crafts et vérifier les ressources par rapport aux miennes, on verra pour optimiser plus tard :)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
1 977
Reactions
104
#6
@JeBotPas Plutot que de passer en revu les xxxxx milliers d'items, tu fais un dictionnaire avec comme key le GID.
Comme ca quand tu as une recette et que tu souhaites savoir si ton item est présent dans ton inventaire, tu as juste à appeler le dictionnaire à l'élément GID.
Donc tu n'as qu'une seule boucle, c'est celle des 2241 recipes, je pense que tu ne peux pas faire mieux.
 
Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#7
@JeBotPas Plutot que de passer en revu les xxxxx milliers d'items, tu fais un dictionnaire avec comme key le GID.
Comme ca quand tu as une recette et que tu souhaites savoir si ton item est présent dans ton inventaire, tu as juste à appeler le dictionnaire à l'élément GID.
Donc tu n'as qu'une seule boucle, c'est celle des 2241 recipes, je pense que tu ne peux pas faire mieux.
J'utilise des List de class custom pour les recettes et la fonction Find de List pour chercher à l'intérieur, cela peut me permettre de boucler les 2241 recettes et de vérifié que j'ai tel,tel,tel et tel item dans ma banque en tel,tel,tel et tel quantité.

Je viens d'actualiser le code source j'en suis à ce niveau là:
test.png

test.png

Après il n'y à que 9746 items maximum et généralement dans la banque on en à 500/1000 quoi ... Déjà j'en est presque 500 ce sera un bon test ^^

Edit: Bon ben j'ai finalement "fini" le logiciel. Plus qu'à tout mettre au propre et peut être à optimisé, je pense que j'aurais la flemme d'optimisé, je vais juste corriger le thread avec les invokes, faire une option pour sortir en .txt, il manquera à faire l'aide fm et avertisseur et voilà :) je boss sur ça demain ^^
 
Dernière édition:
Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#8
Pour informations, je vais travailler sur une version capable de voir exactement les groupes de packet au lieux de faire manuellement, on à déjà packet par packet bien défini bien propre avec cette méthode au lieux de bytes qu'on doit couper nous même, mais j'ai vu qu'il y à des histoires de segment et après avoir vu sur wireshark (utilisant la même DLL je crois) il y à écrit par exemple "1/2 segment" car c'est envoyer sur 2 packets le premier atteignant les 15XX bytes.

Ensuite je vais voir comment on sait quel est quel compte, actuellement tout est lu, donc que ce soit X ou Y comptes, vous ouvrez 8 fois la banque avec 8 comptes seul le dernier sera pris en compte etc etc...

J'ai bien commencer à décoder les stuff aussi (assez simple on va pas ce le cacher), intéressant à savoir que les items possède un ID unique en plus de l'ID lié à l'item en lui même et d'autres caractéristiques. Je vais devoir lire les stuff à la connexion pour ensuite savoir quel item est posé dans la table de FM vu que seul l'ID unique est mis, ensuite je dois voir les changements entre chaque rune un vrais bordel et si en plus vous êtes en multi compte, c'est le bordel ....

Donc je vais me pencher sur cela et essayer de vous partager une meilleure version :) n'hésitez pas à faire des propositions de tools utile, intelligent sans envoie de packet.
 
Inscrit
14 Mai 2019
Messages
51
Reactions
20
#9
Pour informations, je vais travailler sur une version capable de voir exactement les groupes de packet au lieux de faire manuellement, on à déjà packet par packet bien défini bien propre avec cette méthode au lieux de bytes qu'on doit couper nous même, mais j'ai vu qu'il y à des histoires de segment et après avoir vu sur wireshark (utilisant la même DLL je crois) il y à écrit par exemple "1/2 segment" car c'est envoyer sur 2 packets le premier atteignant les 15XX bytes.

Ensuite je vais voir comment on sait quel est quel compte, actuellement tout est lu, donc que ce soit X ou Y comptes, vous ouvrez 8 fois la banque avec 8 comptes seul le dernier sera pris en compte etc etc...

J'ai bien commencer à décoder les stuff aussi (assez simple on va pas ce le cacher), intéressant à savoir que les items possède un ID unique en plus de l'ID lié à l'item en lui même et d'autres caractéristiques. Je vais devoir lire les stuff à la connexion pour ensuite savoir quel item est posé dans la table de FM vu que seul l'ID unique est mis, ensuite je dois voir les changements entre chaque rune un vrais bordel et si en plus vous êtes en multi compte, c'est le bordel ....

Donc je vais me pencher sur cela et essayer de vous partager une meilleure version :) n'hésitez pas à faire des propositions de tools utile, intelligent sans envoie de packet.
Salut ton premier point m'interesse mais je ne suis pas sur d'avoir compris, lorsque tu parles de segment et 15XX tu veux dire que 1500 est le MTU ? Tu as trouvé un moyen alternatif pour pouvoir reconstruire la data qui serait présent sur "2 paquets et pas 1" si j'ai bien compris ?
 
Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#10
Salut ton premier point m'interesse mais je ne suis pas sur d'avoir compris, lorsque tu parles de segment et 15XX tu veux dire que 1500 est le MTU ? Tu as trouvé un moyen alternatif pour pouvoir reconstruire la data qui serait présent sur "2 paquets et pas 1" si j'ai bien compris ?
Salut j'ai pas compris ce qu'était MTU, mais par exemple quand ils envoient l'inventaire sur rétro je l'ai sur 5 paquets et sur wireshark il y a écrit segment 1/5 qui veut dire c'est le premier packet sur les 5 ensembles.

Je ne sais pas comment il voit ça je sais que quand je faisais du bot moi même je recevais les packets a la suite en devant les découper en 2.0, je n'ai pas vérifié si il découpe tout seul les packets sur cette version mais sur rétro c'est packet par packet et la il fait bien la différence en tout cas.

À tester sur wireshark en 2.0 mais étant donner que sur rétro c'est en "claire" c'est plus facile à voir :)

Car je suis pas sûr que lire les 4 prochains packet pour récupérer un inventaire ou une banque soit très optimisé ^^'

Edit: AAAAH MTU = maximum transfert unite, bah je sais pas, dofus rétro transfert max dans les 1516 après ça il met sur un autre packet j'ai remarqué, juste une remarque, le max je sais pas. Je vais faire des tests je reviendrais montrer :)
 
Dernière édition:
Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#11
Bonne année !

Bon pendant que les gens faisait la fête moi je travail sur le CommunityTools bien plus beau et plus propre. (Déjà en niveau de programmation c'est fait correctement enfin, mieux du moins). Avec des invokes pour le thread au lieux de bypass salement le système.

Après études, Rétro envoie un maximum de 1500 bytes, (1500++ avec les informations de connexion une fois supprimé on est à 1500), cependant des fois comme pour le stuff je sais qu'il envoie 600byte entre 2 fois 1500 bytes et pourtant c'est tout ensemble.

La seule chose que j'ai pu trouvé d'intéressant sur wireshark c'est les n° de packet en gros "le prochain packet est le n° 3, n° 2632, 251" etc etc. Rien avoir avec les n° des packets de la source, donc on peut savoir qui est le suivant, je l'ai pas trouvé sur SharpPcap et puis bon, je ne pense pas que ce soit utile et je pense que ce soit assez linéaire.

J'ai beaucoup travailler sur le logiciel hâte de vous le partager prochainement ! J'ai mis la liste des items directement dans une classe, j'ai mis une petite fenêtre à l'ouverture du logiciel pour choisir le réseau à entendre (comme WireShark avec le choix), choisir un serveur directement ou une ip à entré manuellement.

Des logs, avec d'un côté le reçu de l'autre l'envoie, d'un côté en brute de l'autre en hex :)
Beaucoup plus de souplesse dans l'idée de pouvoir être utilisé sur d'autres jeux, il suffira de dégager ma lecture des packets et de la changer. Puisque j'utilise à présent une fonctionnalité direct de SharpPcap me permettant de récupérer uniquement les bytes reçu en supprimant le header, le header de connexion et en récupérant juste et simplement les bytes. (Les premiers packets à priori vide 0 bytes jusqu'au premier packet de 2+1bytes (2 bytes à lire, 1 de 0x00 qui signe la fin du packet) etc etc.

config.png

logi.png

class.png

Je mettrais à jour le projet GitHub petit à petit :)

Le seul vrais problème que j'ai c'est le multi compte, comment savoir qui envoie quoi à où, puisqu'on regarde la carte réseau uniquement >_>
 
Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#12
La mise à jour est arrivée ! Je n'ai pas encore fini, je vais essayer de créer un auto choix de personnage pour test le MITM dans la prochaine mise à jour, pas plus.
Et je pense faire une pause sur la lecture de Rétro et essayer de faire l'aide chasse aux trésors pour 2.0.

Je comprend mieux les packets de 2.0 que Rétro ironiquement ... Mais cela me prendra bien évidemment bien plus de temps.
test.png
 
Inscrit
29 Janvier 2012
Messages
2
Reactions
0
#13
Salut ! Merci beaucoup pour ton partage ! Ton logiciel est t'il compatible avec le client modern de Rétro ou seulement le legacy ?
 
Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#14
Salut ! Merci beaucoup pour ton partage ! Ton logiciel est t'il compatible avec le client modern de Rétro ou seulement le legacy ?
Salut, aucun soucis.

Alors la façon de sniffer est compatible avec tout ce que tu veux (similaire à wireshark)

Par contre ma partie de programmation sur la traduction je le fais sur le client modern. Je n'ai pas vraiment fait attention si il y avait une différence entre le legacy et le modern en terme de traduction.

Mais tu peux modifier bien évidemment :)

J'ai pas eu le temps en ce moment mais je travail sur la traduction des FM, il y aura 2 valeurs une qui considère que tout ce qui est retiré est du reliquat en - et une qui considère aucun reliquat en -, on ne peut que faire une fourchette sur la. 1.29 :/

Je vais voir ce que je vais faire et comment je vais faire ^^

Après je passe à la 2.0 plus long et chiant :/

Il faudra que je montre aussi un test d'envoi de packet je pense un choix de personnages sélectionner via le logi pour démontré qu'on peut écrire je me suis pas pencher dessus ^^
 
Inscrit
20 Octobre 2021
Messages
23
Reactions
15
#15
Hey, je suis toujours là, je pense que l'envoie des packets il faut programmer je pense tout le packet complet (ce qu'on voit dans WireShark par exemple) incluant quel IP envoie à qui, etc etc. Cela à l'air super complet et surtout complèxe.

Je travail dessus mais j'ai du mal à tout comprendre, il y à comme sur D2 des calculs le binaire des hex et des joyeusetés du genre pour déclaré l'ip, la taille etc ... J'analyse encore tout ça pour faire un exemple d'envoie :)

Si vous avez des questions ou des améliorations n'hésitez surtout pas :)
 
Haut Bas