Bonsoir à tous, je me suis lancé dans la création d'un bot pendant les grandes vacances 2011, cependant, ayant trouvé le travail long, j'ai abandonné. Cet après midi, quand j'ai voulu reprendre mes sources ( connexion fonctionnelle du mois d'août ), beaucoup de choses avaient changées. Tout d'abord, le cryptage du mot de passe et de la clef. Et c'est là que je pense se trouve mon premier problème. Voici mon petit bout de code
ID_Message = New Messages.Connection.HelloConnectMessage
ID_Message.Deserialize(PacketData)
Dim key = ID_Message.key
Dim Account As String = NDC.Text
Dim Password As String = MDP.Text
Dim Encryptage As String = RSACrypt.Encrypt(key & Password)
Dim Version_ As New Types.Version.Version
Version_.initVersion(2, 5, 3, 53948, 2, 0)
Dim certificate As New List(Of TrustCertificate)
Dim Message As New Messages.Connection.IdentificationMessage
Message.initIdentificationMessage(Version_, Account, EncryptedPassword, certificate, True)
Message.pack()
Ce morceau de code se situe dans mon form1.
Lorsque je test mon bot et que je met WPE, les paquets s'arrêtent au paquet 3 ( HelloConnectMessage ) c'est donc qu'il y a un problème avec mon code, et je pense du côté du cryptage. Je ne vois pas l'erreur pourtant ><
Voici la classe complète :
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Imports client.Network.Messages.Connexion
Public Class Form1
Public Shared _socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Public Shared _socket_Jeu As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim buffer(8191) As Byte
Dim Ecoute_Connexion_thread As New Thread(New ThreadStart(AddressOf Ecoute_Connexion))
Dim Ecoute_Jeu_thread As New Thread(New ThreadStart(AddressOf Ecoute_Jeu))
Sub Ecoute_Connexion()
While _socket.Connected
Dim i = _socket.Receive(buffer)
Dim data(i - 1) As Byte
Array.Copy(buffer, data, i)
parsing(data)
End While
End Sub
Sub Ecoute_Jeu()
While _socket_Jeu.Connected
Dim i = _socket_Jeu.Receive(buffer)
Dim data(i - 1) As Byte
Array.Copy(buffer, data, i)
parsing(data)
End While
End Sub
Dim Data_Out(0) As Byte
Dim Waiting As Integer
Public Sub parsing(ByVal data() As Byte)
Try
Dim index As Integer
Dim id_and_length As UShort
Dim packet_id As UShort
Dim packet_length_of As Byte
Dim packet_length As Integer
Dim Packet_Start As Integer
Dim Packet_End As Integer
If Waiting > 1 Then
Dim data_temps(data.Length + Data_Out.Length - 1) As Byte
Array.Copy(Data_Out, 0, data_temps, 0, Data_Out.Length)
Array.Copy(data, 0, data_temps, Data_Out.Length, data.Length)
data = data_temps
End If
Do Until index = data.Length
Packet_Start = index
id_and_length = data(index) * 256 + data(index + 1)
packet_length_of = id_and_length And 3
packet_id = id_and_length >> 2
index += 2 + packet_length_of
Select Case packet_length_of
Case 0
packet_length = 0
Case 1
packet_length = data(index - 1)
Case 2
packet_length = 256 * data(index - 2) + data(index - 1)
Case 3
packet_length = 65536 * data(index - 3) + 256 * data(index - 2) + data(index - 1)
End Select
If index + packet_length > data.Length Then
Waiting = packet_length + index - Packet_Start
ReDim Data_Out(data.Length - Packet_Start - 1)
Array.Copy(data, Packet_Start, Data_Out, 0, data.Length - Packet_Start)
Exit Sub
End If
Console.WriteLine("recu : id = " & packet_id & " taille = " & packet_length)
Dim packet(0) As Byte
If packet_length > 0 Then
ReDim packet(packet_length - 1)
Array.Copy(data, index, packet, 0, packet_length)
End If
index += packet_length
Packet_End = index
If Packet_End = data.Length Then
Waiting = 0
ReDim Data_Out(0)
End If
Loop
Catch e As Exception
Console.WriteLine("parsing() " & e.TargetSite.Name & " -> " & e.Message)
End Try
End Sub
Private Sub connexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles connexion.Click
_socket.Connect("213.248.126.180", 5555)
Ecoute_Connexion_thread.Start()
While Ecoute_Connexion_thread.IsAlive
Application.DoEvents()
End While
End Sub
Dim ip As String
Dim Ticket As String
Dim Suivre As Boolean
Dim PassBot As String = "ano"
Dim Chef As String = " "
Dim ID_Chef As Int32
Dim ID_Map As UInteger
Dim ID_Cell As UInteger
Private Sub DataCheck(ByVal ID As Integer, ByVal PacketData As Dofus.DofusReader)
Dim ID_Message As Object = Nothing
Select Case ID
Case 0
Beep()
Case 1
Beep()
Case 3
ID_Message = New Messages.Connection.HelloConnectMessage
ID_Message.Deserialize(PacketData)
Dim key = ID_Message.key
Dim Account As String = NDC.Text
Dim Password As String = MDP.Text
Dim EncryptedPassword As String = RSACrypt.Encrypt(key & Password)
Dim Version_ As New Types.Version.Version
Version_.initVersion(2, 5, 3, 54146, 1, 0)
Dim certificate As New List(Of TrustCertificate)
Dim Message As New Messages.Connection.IdentificationMessage
Message.initIdentificationMessage(Version_, Account, EncryptedPassword, certificate, True)
Message.pack()
End Select
End Sub
End Class
IdentificationMessage
Imports client.Network.Messages.Connexion
Imports client.Types.Version
Namespace Messages.Connection
Public Class IdentificationMessage
Private _isInitialized As Boolean = False
Public version As Types.Version.Version
Public login As String = ""
Public password As String = ""
Public certificate As New List(Of TrustCertificate)
Public autoconnect As Boolean = False
Public protocolId As UInteger = 4
Public Function IdentificationMessage()
Me.Version = New Version()
Return Me
End Function
Public Function get_isInitialized() As Boolean
Return Me._isInitialized
End Function
Public Function getMessageId() As UInteger
Return ProtocolId
End Function
Public Function initIdentificationMessage(ByVal param1 As Types.Version.Version, ByVal param2 As String, ByVal param3 As String, ByVal param4 As List(Of TrustCertificate), ByVal param5 As Boolean) As IdentificationMessage
Me.version = param1
Me.login = param2
Me.password = param3
Me.certificate = param4
Me.autoconnect = param5
Me._isInitialized = True
Return Me
End Function
Public Function reset()
Me.version = New Version()
Me.password = ""
Me.autoconnect = False
Me._isInitialized = False
Return Me
End Function
Public Function pack()
Dim _loc_2 As New Dofus.DofusWriter
Me.serialize(_loc_2)
Dofus.DofusWriter.Send(protocolId)
Return Me
End Function
Public Function unpack(ByVal param1 As Dofus.DofusReader)
Me.deserialize(param1)
Return Me
End Function
Public Function serialize(ByVal param1 As Dofus.DofusWriter)
Me.serializeAs_IdentificationMessage(param1)
Return Me
End Function
Public Function serializeAs_IdentificationMessage(ByVal param1 As Dofus.DofusWriter)
Me.version.serializeAs_Version(param1)
param1.writeUTF(Me.login)
param1.WriteUTF(Me.password)
param1.writeShort(Me.certificate.Count)
Dim _loc_2 As UInteger = 0
param1.writeBoolean(Me.autoconnect)
Return Me
End Function
Public Function deserialize(ByVal param1 As Dofus.DofusReader)
Me.deserializeAs_IdentificationMessage(param1)
Return Me
End Function
Public Function deserializeAs_IdentificationMessage(ByVal param1 As Dofus.DofusReader)
Me.version = New Version()
Me.version.deserialize(param1)
Me.login = param1.ReadUTF()
Me.password = param1.ReadUTF()
Me.autoconnect = param1.ReadBoolean()
Return Me
End Function
Private Function Sock() As Object
Throw New NotImplementedException
End Function
End Class
End Namespace
En vous remerciant de votre lecture, à bientôt.