C# leafbot + dlinjector

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#21
Essaye de faire ton propre MITM au lieu de reprendre celui du LeafBot. C'est pas qu'il est sale, mais juste qu'on voit pas forcément la nécessité de chaque ligne quand on a pas essayé de faire son propre MITM. Et il faut arrêter la traduction automatique sans réfléchir quand on fait un MITM. A partir du moment où on ne fait pas un bot socket, on ne peut pas se contenter de traduire les sources, surtout dans la partie de connexion qui est celle qui diffère le plus.
Le paquet 42 est sûrement la chose la plus difficile à gérer. En effet, il faut créer un nouveau serveur AVANT de renvoyer le paquet, et si on veut pas faire son fdp en fermant la connexion dès qu'on a envoyé le 42 pour respecter la norme TCP, ça donne quelque chose de très sale (même ou plutôt surtout chez moi).
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#22
oh mais c'est pas dans la bonne section , c'est pas du C# ca , je me disais bien c'est bizarre que je comprend d'un seul coup le C# sans effort
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#23
D'acc merci de vos conseils les gars, bon je refais un projet propre en m'inspirant (fortement) du leafbot pour essayer comprendre étape par étape, c'est vrais que pour le moment j'ai pas trop de temps donc j'arrive pas à bien rentrer dans le sujet ..

Euh oui désolé je me suis trompé de section effectivement :/
 
Inscrit
27 Juin 2012
Messages
238
Reactions
0
#24
ToOnS moi je me suis dis à l'inverse que le C# m'avait l'air vraiment dégueulasse à première vue :(
 
Inscrit
25 Février 2012
Messages
178
Reactions
3
#25
Si tu veux te co vers un perso/serveur direct, fait la même chose que pour le 42 pour 6469
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#26
Bon j'avais un problème de taille lors du parsing de ma fonction serialise()

Le problème venait de "BooleanByteWrapper"

le code faux était le suivant :

Code:
Public Class BooleanByteWrapper
        Public Function BooleanByteWrapper()
            Return Me
        End Function

        Public Shared Function setFlag(ByVal param1 As UInteger, ByVal param2 As UInteger, ByVal param3 As Boolean) As UInteger
            Select Case (param2)
                Case 0
                    If (param3) Then
                        param1 = param1 & 1
                    Else
                        param1 = param1 & (255 - 1)
                    End If
                Case 1
                    If (param3) Then
                        param1 = param1 & 2
                    Else
                        param1 = param1 & 255 - 2
                    End If
                Case 2
                    If (param3) Then
                        param1 = param1 & 4
                    Else
                        param1 = param1 & 255 - 4
                    End If
                Case 3
                    If (param3) Then
                        param1 = param1 & 8
                    Else
                        param1 = param1 & 255 - 8
                    End If
                Case 4
                    If (param3) Then
                        param1 = param1 & 16
                    Else
                        param1 = param1 & 255 - 16
                    End If
                Case 5
                    If (param3) Then
                        param1 = param1 & 32
                    Else
                        param1 = param1 & 255 - 32
                    End If
                Case 6
                    If (param3) Then
                        param1 = param1 & 64
                    Else
                        param1 = param1 & 255 - 64
                    End If
                Case 7
                    If (param3) Then
                        param1 = param1 & 128
                    Else
                        param1 = param1 & 255 - 128
                    End If
                Case Else
                    Console.WriteLine("Bytebox overflow.")
            End Select
            Return param1
        End Function

        Public Shared Function getFlag(ByVal param1 As UInteger, ByVal param2 As UInteger) As Boolean
            Select Case (param2)
                Case 0
                    Return (param1 And 1)
                Case 1
                    Return (param1 And 2)
                Case 2
                    Return (param1 And 4)
                Case 3
                    Return (param1 And 8)
                Case 4
                    Return (param1 And 16)
                Case 5
                    Return (param1 And 32)
                Case 6
                    Return (param1 And 64)
                Case 7
                    Return (param1 And 128)
                Case Else
                    Console.WriteLine("Bytebox overflow.")
            End Select
            Return param1
        End Function
    End Class

Mais Alexandre me l'a donc corrigé, et sa marche maintenant :

Code:
Public Class BooleanByteWrapper

        Public Shared Function SetFlag(ByVal flag As Byte, ByVal offset As Byte, ByVal value As Boolean) As Byte
            If (offset >= 8) Then
                Console.WriteLine("offset must be lesser than 8")
                Return Nothing
            End If

            Return If(value, CByte(flag Or (1 << offset)), CByte(flag And 255 - (1 << offset)))
        End Function

        Public Shared Function GetFlag(ByVal flag As Byte, ByVal offset As Byte) As Boolean
            If (offset >= 8) Then
                Console.WriteLine("offset must be lesser than 8")
                Return Nothing
            End If

            Return (flag And CByte(1 << offset)) <> 0
        End Function


    End Class
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#27
Woaw, la conjecture Cadernis est encore vérifiée !!!
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#28
Je n'y arrive vraiment pas, à passer ce packet 42 ....

Pourtant mon gameSock ainsi que mon loginSock sont bien lancé dès le départ du programme..

Si, quand je reçois le packet 42, après l'avoir sérialisé et renvoyé, que je laisse le socket du login ouvert, le sablier de dofus tourne dans le vide..
Or si, quand je reçois le packet 42, après l'avoir sérialisé et renvoyé, que je ferme le socket du login (et que le gameSockest bel et bien sur écoute), je suis déconnecté de dofus comme les screens que j'avais mis...

Je ne sais pas si j'ai oublié une étape, mais alors le problème pourrait venir du gameSock? (C'est celui de leafbot)
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#29
Tu as pas oublié de démarrer un autre socket en écoute avant de renvoyer le paquet 42 ?
Normalement, le client devrait se déconnecter du premier et se reconnecter au deuxième, si tu as bien changé l'ip et le port du 42 par ceux du second socket.
Essaye de le faire "à la main" (encore une des raisons pour lesquelles j'aime Python, on a une console), en démarrant dans un autre programme le second serveur en écoute.
 
Inscrit
28 Mars 2015
Messages
38
Reactions
0
#30
Labo a dit:
Tu as pas oublié de démarrer un autre socket en écoute avant de renvoyer le paquet 42 ?
Normalement, le client devrait se déconnecter du premier et se reconnecter au deuxième, si tu as bien changé l'ip et le port du 42 par ceux du second socket.
Essaye de le faire "à la main" (encore une des raisons pour lesquelles j'aime Python, on a une console), en démarrant dans un autre programme le second serveur en écoute.
Effectivement, tout est fait de ce côté là, Alexandre est venus voir mon programme aussi ce matin et on a pas encore trouvé la solution, on regardera sa de nous d'ici demain soir normalement, je vous dirais s'il y a du nouveau
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#31
Vérifie avec Wireshark alors ;)
 
Haut Bas