VB/VB.Net une sorte de WPE pro en vb.net

  • Auteur de la discussion Anonymous
  • Date de début
A

Anonymous

Invité
#1
Bonsoir,

Ayant déjà utilisé wpe pro et comprenant un peu son fonctionnement, j'ai eu une idée d'un certains type de bot a créer..

Ce que j'ai pus analyser :
1.On Selectionne une fenêtre, ici D.2.
2.WPE PRO lis les packets échangé dans cette "Fenêtre".

Ensuite, imaginons que je vais lancer wpe pro et lancer "l'enregistrement"
3. Je marque "Salut !" Dans le chat D.2.
4. Je stop l'enregistrement sur WPE PRO.

Je vais donc sur wpe pro, et faire renvoyer ce packet pour qu'il me marque "Salut !" dans le chat, sans que j'ai besoin de l'écrire dans le client D.2 (c'est maintenant que sa m’intéresse)
5. WPE PRO se connecte au client sur le port de D.2
6. Ensuite il envoie le packet
7. Le "Salut !" s'affiche sur le jeu

Voilà, donc j'aimerai savoir si possible, comment pourrais-je réussir à créer les étape 5,6 & 7 en vb.net :
Je lance mon logiciel, je sélectionne la fenêtre D.2 grâce au nom de la fenêtre(pseudo du personnage), et il envoie le packet disant "Salut !" dans cette fenêtre.

ps : j'ai peut être mal interprété le fonctionnement de WPE PRO, dans ce cas il serait sympas de m'expliquer son fonctionnement :)
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#2
:mrgreen: salut , ca s'appelle un man in the middle :D
 
A

Anonymous

Invité
#3
Okey ! j'avais déjà entendue parler de "man in the middle" sur ce forum sans trop m'y intéresser, loin de savoir qu'en faite sa ressemble a ce que je veux faire.
Et donc pour le "man in the middle", j'aimerais avoir quelques informations, je vais exposer clairement mes questions, rien de mieu qu'un screen :



alors, normalement tout ce dont j'ai besoin pour envoyer un packet et me connecter sur le serveur est ici, mais je ne comprend pas tout :
->Le 1 je ne sais pas du tout a quoi il sert
->Le 2 c'est la phrase qui dit "Yo !" sur D.2
->Le 3 j'en ai aucune idée..
->Le 4 c'est la taille du packet sa je le sais, mais je ne sais pas bien l'utiliser :s
->Le 5 pas compliqué : L'ip et le port de D.2
->Le 6, si j'analyse bien, il faut pas "créer une socket" mais "ouvrir une socket"

Quelqu'un pourrait-il me donner des renseignements sur comment utiliser ces informations pour se connecter au serveur ainsi qu'envoyer un packet,
Es bien comme ça qu'on procède pour commencer un "man in the middle",
Y a t-il toutes les "données" nécessaire à la connexion dans ce sreen ?

Merci :)
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
regardes ca : http://toonsmil.chez-alice.fr/bot_in_th ... _ToOnS.rar
il te faudra peu etre changer cette ligne :
Code:
Private Sub modif_config_xml(ByVal Start As Boolean)
        Dim path As String = "C:\Program Files\Dofus 2" ' ici
donc tu le lances en 1er puis ensuite tu lances ton jeu (ton jeu se connectera plus au serveur mais au programme et le programme fera le pont)
si tu appuis sur debug tu verras 1 dans la fenetre de sortie de VB (1=2 sauf que 1 est en hexa et 2 en ascii)
ca va gerer tout seul 3 , 4 , 5 et 6

il y'a deja un bouton qui fait presque "salut" sauf que a la place il s'assoit , pas compliqué a changer
c'est cette ligne (tout a la fin) :
Code:
ServerSock.Send({&H58, &HD5, &H1, &H1})
&H58, &HD5, &H1, &H1 , c'est en fait 1 donc aussi 2 (que je te rapelle tu peux lire dans la fenetre de sortie de VB si debug est coché) , j'avais lu 58 05 01 01 pour s'assoir
toutes les autres lignes dans le bouton servent juste aux emotes (tu comprendras quand tu appuieras pour t'assoire) , tu peux les supprimer

si tu as des question pour le faire fontionner , ou si ton jeu ne veux plus se connecter apres l'avoir utilisé , demande moi
 
A

Anonymous

Invité
#5
Alors :
-Je lance le logiciel avec {F5} sous microsoft visual basic 2010 express
-Je lance DofusMod.exe, j'entre mes id, selectionne le serveur, entre en jeu
-Je coche "debug" sur ton logiciel
-Je clique sur s’asseoir, puis rien ne se passe :s

-Ensuite je clique sur déconecter, il me dit : "selectionner le client" peut etre serrais-ce parce que je n'aurais pas sélectionné de client auparavant ? Mais il ne me semble pas que le logiciel m'es demandé de le faire.

C'est bien la bonne procédure ?

Sinon j'ai commencer a regarder le code, apparemment tu créer un fichier config.xml que tu remplace par config.xml.bot pourquoi donc ne pas passer par le xml de dofus basique ?
<-- Ok j'ai compris, c'est pour l'histoire du pont ^^"
Et j'ai remarque ce bout de code :
Code:
 param1.WriteByte(18)
Y a t-il un rapport avec ce writeByte et "l'écriture de mémoire" que j'ai pus observer (qui servent souvent au cheat W0W) ou bien c'est moi qui mélange carrément tout et qui fait un truk bizare ? x'D


edit : ah je viens de voir que tu a édité ton poste, je vais relire sa
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#6
je creais un nouveau config.xml pour dir au jeu "maintenant tu te connectes plus au serveur officiel mais a cet IPA : 127.0.0.1" et le programme a un "serveur" qui vient ecouter 127.0.0.1 pour que le jeu se connecte a lui

d'ailleur c'est pourca que ca marche pas , avant d'uploader j'ai supprimé ce qu'il y avait dans les dossier debug et release donc du coup il manque ce fichier :
http://toonsmil.chez-alice.fr/config.xml.bot qu'il faudra que tu mettes dans les dossiers debug et release.

pour param1.WriteByte(18) , rien a voire avec un patch memoire , ca sert juste a envoyer un "bout" du paquet
 
A

Anonymous

Invité
#7
Il ne créer pas de config.xml.bot j'ai l'impression, je ne le trouve pas, le chemin est bien le bon ^^

ps: il me marque "-- Jeu mis en écoute --"
mais il passe bien par le xml officiel, il n'est pas en écoute, je pense.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#8
regardes mon edit ca devrait regler le probleme , au pire tu peux aussi mettre le fichier manquant dans le dossier du jeu a coté du config officiel :mrgreen:

j'ai reuploadé avec le fichier manquant
 
A

Anonymous

Invité
#9
Bon j'ai bien mis le xml dans tous les fichiers mais sa ne marchais pas, j'ai fait ma petite "modif maison" et sa marche :
j'ai sauvegarder le vrais xml dofus dans un autre répertoire, remplacer le .xml (le vrais) par le .xml.bot et renommer le .xml.bot en .xml
Je lance ton pogramme, je lance D.2, j'enclenche le mode debug, parfait tout marche ;)

J'ai plus qu'à étudier tout sa, modifier un peu ton programme et faire quelques crash tests, tester des idées (histoire de me familiariser avec le man in the middle), je vais avoir des questions d'ici quelques temps j'pense x'D

Merci beaucoup de l'aide que tu m'a apporter en tout cas ! :=)

Edit : Alors j'ai compris que les emotes changent en fonction de leur numéro, et si je ne me trompe pas :
Code:
Dofus.DofusMessage.Send(800)
800 mis pour la fonction s'asseoir.
Comment as tu fait pour trouver ce numéro, 800 ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#11
en fait pour s'assoir je me suis assis avec le jeu ce qui m'a donné dans la fenetre debug :
envoie : id -> 5685 len -> 1
58 D5 01 01
ce qui explique la ligne : ServerSock.Send({&H58, &HD5, &H1, &H1}) , j'envoie directement les octets en "brut"

pour le 800 en fait "envoie emote" avec une autre methode que celle du dessus pour envoyer (celle la c'est la methode standart pour un bot) ,
j'ai trouvé en lancant l'emote avec le jeu ce qui me donne :
envoie : id -> 800 len -> 1
0C 81 01 13
voila pour le 800 , apres j'a len->1 donc je prend le dernier octet : 13 (qui en decimal donne 18) et voila d'ou vient le 18 , a la place du 18 on peu mettre &H13

ce qui donne : (les 0 c'est en realité des o , c'est pour eviter la censure)
Code:
Dim param1 As New D0fus.D0fusMessage
param1.WriteByte(18) ' ou param1.WriteByte(&H13)
D0fus.D0fusMessage.Send(800)
donc tu as du comprendre que j'aurais aussi pu m'assoire aussi comme ca
Code:
Dim param1 As New D0fus.D0fusMessage
param1.WriteByte(1) ' ou param1.WriteByte(&H1)
D0fus.D0fusMessage.Send(5685)
a la place d'envoyer en brut : ServerSock.Send({&H58, &HD5, &H1, &H1})
 
A

Anonymous

Invité
#12
@Maxilia : Merci je vais y jeter un coups d'oeil sa m'a l'air pas mal :)

@ToOnS : Okey, donc en faite il y a 2 méthodes ici en gros, la première méthode avec ce qu'on trouve sur wpe pro (oui mon mode debug n'ouvre pas d'autre fenêtre, que je coche ou que je ne coche pas sa revient au même j'ai bien l'impression) et il y a la méthode que j'ai déjà pus observer qui utilise le dofusinvoker (d'ou le 800)

edit : j'ai bien compris pour l'envoie du packet bizare composé de chiffre :)
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#13
voila c'est ca pour les 2 methodes , pour le debug en fait quand il est coché il affiche 2 fois recu , une fois les octets en brut (ce que le socket recoit vraiment) et une autre fois les octets apres le parsing (donc quand le paquet est separé en message(s)) , si il est decoché il affiche juste la reception en brut et les id et len mais pas les octets apres parsing
 
A

Anonymous

Invité
#14
coché ou décoché, sa reviens au même, mais pas grâve t'inquiete, j'arrive a récupérer ce que j'ai envie avec wpe pro,
la j'ai modifier le fait de s'asseoir en une phrase : "mdr trop"
ce qui donne donc :
Code:
ServerSock.Send({&HD, &H75, &HB, &H0, &H8, &H6D, &H64, &H72, &H20, &H74, &H72, &H6F, &H70, &H0})
Mais j'ai pas l'impression qu'on puisse récupérer de cette façon des donné du jeu tel que le level, le sexe contrairement au d2invoker.

Et de faire un bot en "brut" c'est pas un peu suicidaire ? Car au moins il n'y a pas besoin d'utiliser le D.2Invoker => pas besoin de faire de mise à jours suivant maj de dofus :')
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#15
tu peux tout recuperer voir meme filtrer et renvoyer ce que tu veux au jeu , ou dans l'autre sens au serveur (bon pour envoyer au serveur faut savoir ce que tu fais si tu veux pas te faire bannir) ,
pour recuperer les infos recues ca se passe dans datacheck (comme pour la source overedge d'ailleur , un hazard ? peu etre pas tant que ca ...) , bon apres il faut traduire la ou les classes dont tu auras besoin


ca par exemple :
viewtopic.php?f=34&t=976 (video inside) ca ete fait tout simplement avec la source que tu viens d'avoir

edit : je vien de verifier mais la video est passée en privé , en gros y'avait un bouton pour faire passer ton perso lvl 200 (enfin le faire croire au jeu pour qu'il affiche 200 a la place du vrai level)

et franchement si lui a reussi a le faire avec son niveau heu ****** (censuré) , n'importe qui peu y arriver
 
A

Anonymous

Invité
#16
c'est malheureusement une vidéo privé :s

edit : Ah ouais d'accord, merci bien :)
j'vais m'entrainer alors
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#17
d'ailleur tu peux voir dans datacheck que lorsqu'on recoit le message 42 (on est sur le serveur de logging) je filtre ce message et j'envoie une fausse adresse au jeu (127.0.0.1 pour qu'il se connecte pas au serveur de jeu officiel et je sauvergarde l'ip officeil pour connecter le mitm sur l'ip du serveur de jeu officiel)

ca marche comme ca :
reception du 42 :
Code:
Case (42)
                    ID_Message = New Messages.Connection.SelectedServerDataMessage
                    ID_Message.Deserialize(PacketData)
                    Form1.Address = ID_Message.Address ' on recupere l'ip de serveur de jeu
jusque la tout est normal je fais simplement que de "decoder" pour le lire le message 42
**
puis je refais le meme message (avec une fausse adresse , celle du mitm) que je stock dans dataout
Code:
                    ID_Message.initSelectedServerDataMessage(ID_Message.serverId, "127.0.0.1", 5555, ID_Message.canCreateNewCharacter, ID_Message.ticket)

                    Dim Message As New Dofus.DofusMessage
                    ID_Message.serialize(Message)
                    Data_Out = Dofus.DofusMessage.Send(ID)
en fesant attention (dans le parsing) de pas envoyer le reel mais le faux message au jeu :
Code:
If Serveur = "213.248.126.180" Then ' si serveur de loging 
                    If packet_id = 42 Then 'si c'est packet qui contient l'ip de serveur de jeu
                        If sock IsNot Nothing AndAlso sock.State = BazSocketState.Connected Then
                            sock.Send(Data_Out) ' on envoie au jeu un faux paquet qui contient 127.0.0.1 pour l'ip de serveur de jeu
                        End If
le meme principe sur le message de lvl up ou alors le message 500 (je sais plus son nom) avec des fausse infos et tu fais afficher le lvl ou les kamas que tu veux
ca a aucun interet mais le principe est la



pour passer a autre chose si tu veux faire quelquechose d'un peu plus malin (et plus simple car y'a rien a filtrer , tu as juste a t'arreter a **) par exemple tu recuperes la vita apres un combat (faut trouver le bon paquet, tu ajoutes sa case dans datacheck et le decoder pour recuperer les infos de vita) et tu le fais s'assoire automatiquement si elle est trop faible
 
A

Anonymous

Invité
#18
Super source, j'ai enfin compris le principe du MITM, je pensais qu'il recréer un cleint ou un truc compliqué !
Merci ToOnS
 
A

Anonymous

Invité
#19
J'ai pas encore trop essayé le datachek, mais en j'ai tester autre chose, et même une chose m'étonne :

Si on lance le logiciel, on dit "ouais gars", on récupère le packet :
Code:
ServerSock.Send({&HD, &H75, &HD, &H0, &HA, &H6F, &H75, &H61, &H69, &H73, &H20, &H67, &H61, &H72, &H73, &H0})
on peux deco/reco autant de fois et le "send" et sa marchera

Au contraire, si on dit "ouais gars !" (avec le "!" en plus), on récupère le packet :
Code:
ServerSock.Send({&HD, &H75, &HF, &H0, &HC, &H6F, &H75, &H61, &H69, &H73, &H20, &H67, &H61, &H72, &H73, &H20})
on peux le send, mais une fois qu'on a déconnecté, quand on se reconnecte, on ne peux plus le send

Ok je cherche peut être la petite bête mais sa m'étonne que pour un "!" on ne peux pas renvoyer de packet
J'ai par conséquent remarqué la même chose pour un déplacement sur une map :
On se remet sur la cellule de départ, on send le packet de la case ou aller : sa marche,
si on deco/reco, on se remet bien sur la cellule de départ, on send le packet de la case ou aller : sa marche plus

Je l'ai fait sous forme "brute"
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#20
lolodu92 a dit:
Super source, j'ai enfin compris le principe du MITM, je pensais qu'il recréer un cleint ou un truc compliqué !
Merci ToOnS
je fais que des choses simples de toutes facon (faut juste les comprendre :mrgreen: , tu vois c'est comme "overedge" en fait , c'est meme plus simple car avec b@zsocket pas besoin d'invoke pour toucher a la gui)

pour le probleme de paquets qui marchent pas :
c'est normal que ca marche pas il manque la fin , pour le 2 ieme (avec !) tu as que 16 octets pour 18 , il manque les 2 derniers
!!! attention quand ca depasse 16 octets dans le debug il saute a la ligne d'apres (pour que ca soit plus facile a lire qu'une longue ligne de 70000 octets , il les affiche par bloc de 16)
ca doit etre le meme probleme pour le deplacement
 
Haut Bas