C# leafbot + dlinjector

Inscrit
28 Mars 2015
Messages
38
Reactions
0
#1
Bonjour,

Suite à mon échange skype avec Alexandre hier,
on en a conclu que c'était préférable d'opter pour une solution mitm que de faire son propre sniffer..

J'ai donc dl le projet leafbot et prix le dlinjector, j'ai essayé de faire fonctionner les 2 ensemble sans rien modifier, mais voici mon problème :


J'ai cliqué sur le bouton 'jouer' après avoir mis mes identifiants
La file d'attente s'est affichée en 1s a peine
Le jeu reste ensuite bloqué comme sa, rien ne se passe .. :/

Quelqu'un a une idée ?

Merci de votre aide ! :)
 
A

Anonymous

Invité
#2
Il doit y avoir un problème dans l'envoi des données au serveur officiel Dofus.

Je ne connais pas du tout LeafBot, mais il faudrait que tu vois s'il envoie bien ce qu'il reçoit du client au serveur.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#3
Je regarderais ce soir ou demain, je rentre tard désolé.
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#4
Bah oui XD , les IO du leafbot sont très anciens du coup ainsi que les packets du coup il ne peut rien gérer ^^ .
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#5
La raison a parlé, reprend les paquets et mon BigEndianReader.
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#6
Et si tu veux pas te casser la tête avec un traducteur de packets en VB ,contacte moi par skype je te passe celui d'Asyade version VB.net :D .
PS: ll n'est pas top en traduction , t'auras pas mal de modifications à faire :) .Et je te conseille de changer ton système de connexion (dans Dofus) de la connexion directe au jeu vers la connexion au choix de serveur .
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#7
D'accord merci a tous de ces informations, je vais exécuter de ce pas ;)
Je vous tiens au jus !

Et je viens d'avoir une interrogation,
Je pensais que pour le MITM les classes qu'on traduit sont prise en compte par le bot, mais celles qu'on ne traduit pas, elle sont prises en compte par le jeu et donc pas besoin de toutes les traduire si ? On en traduit une uniquement quand on souhaite récupérer des données dans un packet précis ?
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#8
bomikrob a dit:
D'accord merci a tous de ces informations, je vais exécuter de ce pas ;)
Je vous tiens au jus !

Et je viens d'avoir une interrogation,
Je pensais que pour le MITM les classes qu'on traduit sont prise en compte par le bot, mais celles qu'on ne traduit pas, elle sont prises en compte par le jeu et donc pas besoin de toutes les traduire si ? On en traduit une uniquement quand on souhaite récupérer des données dans un packet précis ?
les packets que le bot ne s'en rendra pas compte va les ignorer , ou plutôt juste les transférer vers le client , mais si y tu veux faire tout un bot ,la traduction de tous les packets nécessaires sera lassante , sinon , la récupération de 2,3 voir 10 info ne nécessitera pas de tout traduire.
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#9
D'aaaacord, donc c'est bien ce que je pensais (et esperait), ce qui veut donc dire que si je n'utilise aucune classe dans le 'ReceiveId',
le jeu marche normalement, sans traiter les packets au niveau du bot,
ce qui veut donc dire que je peux enlever le packet 42 ?
Or cela ne marche pas mieu, dans mon souvenir il y a une redirection dans dofus lors du changement de serveur ou je ne sais plus trop quoi, ce qui veut dire que le packet 42 est necessaire pour continuer l'écoute des données ?

Car dans la classe parsing de leaftbot on peut y voir le code suivant :

Code:
Dim SSD As New Network.Connection.Server.Select.SelectedServerDataMessage
                        SSD.init(_SSD.serverId, "127.0.0.1", 443, _SSD.ssl, _SSD.canCreateNewCharacter, _SSD.ticket) ' ces qui qui ecoute le porte 443
                        SSD.pack(MySock)
Donc le 127.0.0.1 est nécessaire si je veux continuer d'écouter les données, je ne peux donc pas mettre cette partie de code en commentaire
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#10
En fait après le 42 , le client Dofus ferme le socket d'identification et puis se reconnecte sur l'ip et le port que tu lui as envoyé dans le 42 .Du coup , on doit faire de même , écouter les connexions provenant du client et puis fermer tes propres socket connecté au serveur d'authentification , puis se connecter au serveur de jeu à travers l'IP reçue dans le 42 ainsi que le port avec le ticket que tu as sauvegardé .
J’espère que je ne me suis pas trompé :) .
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#11
D'accord, merci de ta réponse, c'est ce qui me semblait, bon bah c'est parti pour s'appliquer sur une bonne traduction ;)
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#12
En fait après le 42 , le client Dofus ferme le socket d'identification et puis se reconnecte sur l'ip et le port que tu lui as envoyé dans le 42 .Du coup , on doit faire de même , écouter les connexions provenant du client et puis fermer tes propres socket connecté au serveur d'authentification , puis se connecter au serveur de jeu à travers l'IP reçue dans le 42 ainsi que le port avec le ticket que tu as sauvegardé .
J’espère que je ne me suis pas trompé :) .
"Avec le ticket que tu as sauvegardé"

Je me suis rendu compte qu'il ne sauvegarde pas le ticket dans leafbot..
Donc j'ai ajouté une variable ticket dans la classe MainForm :

Code:
Public GameIp As String
    Public GamePort As Integer
    Public GameTicket As String
J'ai assigner la valeur à ce ticket lorsqu'on reçoit le packet 42

Code:
Main.GameIp = _SSD.address
                        Main.GamePort = _SSD.port
                        Main.GameTicket = _SSD.ticket
Sauf que je l'utilise comment après ce ticket ? :/

Dans SockManager on retrouve sa :

Code:
GameSock.Initialize(Main.GameIp, Main.GamePort)
Mais alors ajouté un ticket quelque part.. j'en sais rien :s

Parce que du coup la sa bloque lors du clique sur le serveur, embêtant :o
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#13
Tu envois un Fake 42 avec l'adresse du serveur de jeu locale.
Quand il va se connecter il va te fournir son ticket à la connexion et ca va te permettre de retrouver le client associé.

<- ProtocolRequired
<- HelloGameMessage
-> AuthentificationTicketMessage
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#14
Oui, je me suis trompé :s , c'est dans le full socket qu'il faut le gérer , tu n'as pas à t'en soucier dans le MITM , le client s'en charge .
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#15
<- ProtocolRequired
<- HelloGameMessage
-> AuthentificationTicketMessage
Il faut que je traduise les classes ci-dessus et que je les ajoutes à mon bot pour qu'il puisse les analyser et les renvoyer ?

Pour ce qui est du fake 42 c'est déjà fait, enfin il me semble et si j'ai bien compris :
- Renvoyer le packet 42 avec l'adresse 127.0.0.1

Quand il va se connecter il va te fournir son ticket à la connexion et ca va te permettre de retrouver le client associé.
Sa c'est le fait de garder le ticket pour retrouver le client à partir du ticket qu'il va me ré-envoyer, le problème c'est qu'il bloque avant déjà, je te montre les screens dans l'ordre :

Ecran de connexion :


Ecran de choix de serveur :


On clique sur le premier serveur :


On est de retour sur l'écran de connexion :


Voici les logs de la console avec les packets :


Voici le code qui change l'ip du serv :

Code:
Dim _SSD As New Network.Connection.Server.Select.SelectedServerDataMessage
                        _SSD.Deserialize(New BigEndianReader(New System.IO.MemoryStream(packet)))

                        Main.GameIp = _SSD.address
                        Main.GamePort = _SSD.port
                        Main.GameTicket = _SSD.ticket

                        Dim SSD As Network.Connection.Server.Select.SelectedServerDataMessage
                        SSD = New Network.Connection.Server.Select.SelectedServerDataMessage(_SSD.ssl, _SSD.canCreateNewCharacter, _SSD.serverId, "127.0.0.1", 443, _SSD.ticket) ' ces qui qui ecoute le porte 443

                        Dim maVar As BigEndianWriter = New BigEndianWriter()
                        SSD.Serialize(maVar)
                        Dim vmp As MessagePackaging = New MessagePackaging(maVar)
                        vmp.Pack(packet_id)

                        ServerSock.Close()
                        MySock.Close()
Après je n'ai peut être pas bien compris ton message aussi :/
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#16
Essaye d'enlever les ServerSock.Close() MySock.Close() déjà , j'ai eu le même problème ...
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#17
La du coup il reste charger en continue si je les enlèves (le petit sablier lors de la connexion après clique sur le serveur)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#18
Bizard, il devrait se connecter la seconde fois sur le serveur de jeu et non de connexion.
 

zahid98

Membre Actif
Inscrit
13 Decembre 2014
Messages
352
Reactions
2
#19
Change le port du SSD ainsi que celui du GameListener (5556 marche nickel de ma part) ...
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#20
et surtout change de socket apres le message 42 (ou au moins d'ip , la il te reconnecte sur l'ip du serveur de connexions apres etre logué au lieu du serveur de jeu) coté bot=>serveurS
 
Haut Bas