Salut, je viens d'intégrer votre communauté, j'ai lu pratiquement la majorité des tutos et j'ai de bonnes bases en programmation, bon je compte faire une mise à jour Rebirth "version MITM", alors tout d'abord j'ai maj les IO ainsi que les messages de "connection" en me basant sur les sources AS3 fraîchement décompilées. J'ai essayé de me connecter à dofus en session normale pour voir ce que ça donne sur WireShark, puis en session bot comme vous pouvez le voir sur les images.
D'une part, le 182 ne contient pas de données ormis l'id "02:d9 en session bot" et " 02:d9:01:01 en session normale" ce qui est louche et d'une autre part pas d'ack pour le 1 en session bot et ça bloque au 3 et donc le client essaie toujours de se connecter et reste bloqué sur la connexion.
Le 182 : BasicPingMessage
Le 1 rotocolRequired
Le 3 : HelloConnectMessage
Readers : Source SADIKK avec une petite adaptation et bien sûr traduction en Vb
Merci d'avance, et j’espère que vous m'orienteriez sur la bonne voie !
D'une part, le 182 ne contient pas de données ormis l'id "02:d9 en session bot" et " 02:d9:01:01 en session normale" ce qui est louche et d'une autre part pas d'ack pour le 1 en session bot et ça bloque au 3 et donc le client essaie toujours de se connecter et reste bloqué sur la connexion.
Le 182 : BasicPingMessage
Imports RebirthAPI.Network
Namespace Dofus.Network.Messages.Common.Basic
Public Class BasicPingMessage
Inherits NetworkMessage
Public Overrides Property ProtocolID As UInteger = 182
Private _Quiet As Boolean = False
Public Property [Quiet] As Boolean
Get
Return Me._Quiet
End Get
Set(value As Boolean)
Me._Quiet = value
End Set
End Property
Public Overrides Sub Serialize(ByVal Writer As BigEndianWriter)
Writer.WriteBoolean(Me._quiet)
End Sub
Public Overrides Sub Deserialize(ByVal Reader As BigEndianReader)
Me._quiet = Reader.ReadBoolean
End Sub
End Class
End Namespace
Namespace Dofus.Network.Messages.Common.Basic
Public Class BasicPingMessage
Inherits NetworkMessage
Public Overrides Property ProtocolID As UInteger = 182
Private _Quiet As Boolean = False
Public Property [Quiet] As Boolean
Get
Return Me._Quiet
End Get
Set(value As Boolean)
Me._Quiet = value
End Set
End Property
Public Overrides Sub Serialize(ByVal Writer As BigEndianWriter)
Writer.WriteBoolean(Me._quiet)
End Sub
Public Overrides Sub Deserialize(ByVal Reader As BigEndianReader)
Me._quiet = Reader.ReadBoolean
End Sub
End Class
End Namespace
Le 1 rotocolRequired
Imports RebirthAPI.Network
Namespace Dofus.Network.Messages.Handshake
Public Class ProtocolRequired
Inherits NetworkMessage
Public Overrides Property ProtocolID As UInteger = 1
Private _RequiredVersion As UInteger = 0
Private _CurrentVersion As UInteger = 0
Public Property [RequiredVersion] As Integer
Get
Return Me._RequiredVersion
End Get
Set(value As Integer)
Me._RequiredVersion = value
End Set
End Property
Public Property [CurrentVersion] As Integer
Get
Return Me._CurrentVersion
End Get
Set(value As Integer)
Me._CurrentVersion = value
End Set
End Property
Public Overrides Sub Serialize(ByVal Writer As BigEndianWriter)
Writer.WriteInt(Me._requiredVersion)
Writer.WriteInt(Me._currentVersion)
End Sub
Public Overrides Sub Deserialize(ByVal Reader As BigEndianReader)
Me._requiredVersion = Reader.ReadInt32
Me._currentVersion = Reader.ReadInt32
End Sub
End Class
End Namespace
Namespace Dofus.Network.Messages.Handshake
Public Class ProtocolRequired
Inherits NetworkMessage
Public Overrides Property ProtocolID As UInteger = 1
Private _RequiredVersion As UInteger = 0
Private _CurrentVersion As UInteger = 0
Public Property [RequiredVersion] As Integer
Get
Return Me._RequiredVersion
End Get
Set(value As Integer)
Me._RequiredVersion = value
End Set
End Property
Public Property [CurrentVersion] As Integer
Get
Return Me._CurrentVersion
End Get
Set(value As Integer)
Me._CurrentVersion = value
End Set
End Property
Public Overrides Sub Serialize(ByVal Writer As BigEndianWriter)
Writer.WriteInt(Me._requiredVersion)
Writer.WriteInt(Me._currentVersion)
End Sub
Public Overrides Sub Deserialize(ByVal Reader As BigEndianReader)
Me._requiredVersion = Reader.ReadInt32
Me._currentVersion = Reader.ReadInt32
End Sub
End Class
End Namespace
Le 3 : HelloConnectMessage
Imports System.Collections.Generic
Imports RebirthAPI.Network
Namespace Dofus.Network.Messages.Connection
Public Class HelloConnectMessage
Inherits NetworkMessage
Public Overrides Property ProtocolID As UInteger = 3
Private _Salt As String = String.Empty
Private _Key As List(Of Byte) = New List(Of Byte)
Public Property [Salt] As String
Get
Return Me._Salt
End Get
Set(value As String)
Me._Salt = value
End Set
End Property
Public Property [Key] As List(Of Byte)
Get
Return Me._Key
End Get
Set(value As List(Of Byte))
Me._Key = value
End Set
End Property
Public Overrides Sub Serialize(ByVal Writer As BigEndianWriter)
Writer.WriteUTF(Me._salt)
Writer.WriteVarInt(Me._Key.Count)
Dim _loc_2 = Nothing
For _loc_2 = 0 To Me._key.Count - 1
Writer.WriteByte(Me._Key(_loc_2))
Next
End Sub
Public Overrides Sub Deserialize(ByVal Reader As BigEndianReader)
Dim _loc_4 = Nothing
Me._salt = Reader.ReadUTF
Dim _loc_2 = Reader.ReadVarInt()
Dim _loc_3 = Nothing
For _loc_3 = 0 To _loc_2 - 1
_loc_4 = Reader.ReadByte
Me._key.add(_loc_4)
Next
End Sub
End Class
End Namespace
Imports RebirthAPI.Network
Namespace Dofus.Network.Messages.Connection
Public Class HelloConnectMessage
Inherits NetworkMessage
Public Overrides Property ProtocolID As UInteger = 3
Private _Salt As String = String.Empty
Private _Key As List(Of Byte) = New List(Of Byte)
Public Property [Salt] As String
Get
Return Me._Salt
End Get
Set(value As String)
Me._Salt = value
End Set
End Property
Public Property [Key] As List(Of Byte)
Get
Return Me._Key
End Get
Set(value As List(Of Byte))
Me._Key = value
End Set
End Property
Public Overrides Sub Serialize(ByVal Writer As BigEndianWriter)
Writer.WriteUTF(Me._salt)
Writer.WriteVarInt(Me._Key.Count)
Dim _loc_2 = Nothing
For _loc_2 = 0 To Me._key.Count - 1
Writer.WriteByte(Me._Key(_loc_2))
Next
End Sub
Public Overrides Sub Deserialize(ByVal Reader As BigEndianReader)
Dim _loc_4 = Nothing
Me._salt = Reader.ReadUTF
Dim _loc_2 = Reader.ReadVarInt()
Dim _loc_3 = Nothing
For _loc_3 = 0 To _loc_2 - 1
_loc_4 = Reader.ReadByte
Me._key.add(_loc_4)
Next
End Sub
End Class
End Namespace
Readers : Source SADIKK avec une petite adaptation et bien sûr traduction en Vb
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Text
Imports System.Net.Sockets
Namespace NETWORK
Public Class BigEndianReader
Implements IDisposable
Private m_BinaryReader As IO.BinaryReader
' Methods
Public ReadOnly Property BaseStream() As IO.Stream
Get
Return m_BinaryReader.BaseStream
End Get
End Property
Public ReadOnly Property BytesAvailable() As Long
Get
Return (m_BinaryReader.BaseStream.Length - m_BinaryReader.BaseStream.Position)
End Get
End Property
Public ReadOnly Property Position() As Long
Get
Return m_BinaryReader.BaseStream.Position
End Get
End Property
Public Sub New()
m_BinaryReader = New IO.BinaryReader(New IO.MemoryStream(), Encoding.UTF8)
End Sub
Public Sub New(content As Byte())
m_BinaryReader = New IO.BinaryReader(New IO.MemoryStream(content), Encoding.UTF8)
End Sub
Public Sub New(stream As IO.Stream)
m_BinaryReader = New IO.BinaryReader(stream, Encoding.UTF8)
End Sub
Public Function ReadBytes(count As Integer) As Byte()
Return m_BinaryReader.ReadBytes(count)
End Function
Public Function ReadBoolean() As Boolean
Return m_BinaryReader.ReadByte() = 1
End Function
Public Function ReadVarShort() As Short
Dim resultVar = 0
For offset As Integer = 0 To 15 Step 7
Dim readByte As Byte = Me.ReadByte()
Dim hasContinuationFlag As Boolean = (readByte And 128) = 128
Dim extractedValue As Integer = (readByte And 127)
If offset > 0 Then
extractedValue = extractedValue << offset
End If
resultVar += extractedValue
If hasContinuationFlag = False Then
If resultVar > 32767 Then
resultVar -= 65536
End If
Return CShort(resultVar)
End If
Next
Throw New Exception("Too much data")
End Function
Public Function ReadVarInt() As Integer
Dim resultVar As Integer = 0
For offset As Integer = 0 To 31 Step 7
Dim readByte__1 As Byte = ReadByte()
Dim hasContinuationFlag As Boolean = (readByte__1 And 128) = 128
Dim extractedValue As Integer = (readByte__1 And 127)
If offset > 0 Then
'TODO: not sure if the if statement is needed
extractedValue = extractedValue << offset
End If
resultVar += extractedValue
If hasContinuationFlag = False Then
Return resultVar
End If
Next
Throw New Exception("Too much data")
End Function
Public Function ReadByte() As Byte
Return m_BinaryReader.ReadByte()
End Function
Public Function ReadDouble() As Double
Return BitConverter.ToDouble(ConvertToBigEndian(8), 0)
End Function
Public Function ReadShort() As Short
Return BitConverter.ToInt16(ConvertToBigEndian(2), 0)
End Function
Public Function ReadInt32() As Integer
Return BitConverter.ToInt32(ConvertToBigEndian(4), 0)
End Function
Public Function ReadSByte() As SByte
Return m_BinaryReader.ReadSByte()
End Function
Public Function ReadSingle() As Single
Return BitConverter.ToSingle(ConvertToBigEndian(4), 0)
End Function
Public Function ReadUTF() As String
Dim stringLength As UShort = ReadUShort()
Dim stringContentInByte As Byte() = ReadBytes(stringLength)
Return Encoding.UTF8.GetString(stringContentInByte)
End Function
Public Function ReadUShort() As UInt16
Return BitConverter.ToUInt16(ConvertToBigEndian(2), 0)
End Function
Public Function ReadUInt32() As UInt32
Return BitConverter.ToUInt32(ConvertToBigEndian(4), 0)
End Function
Public Sub Seek(position As Integer)
m_BinaryReader.BaseStream.Position = position
End Sub
Public Sub Add(data As Byte(), offset As Integer, count As Integer)
Dim pos As Long = m_BinaryReader.BaseStream.Position
m_BinaryReader.BaseStream.Position = m_BinaryReader.BaseStream.Length
m_BinaryReader.BaseStream.Write(data, offset, count)
m_BinaryReader.BaseStream.Position = pos
End Sub
Private Function ConvertToBigEndian(ByVal count As Integer) As Byte()
Dim convertedContent As Byte() = New Byte(count - 1) {}
For index As Integer = count - 1 To 0 Step -1
convertedContent(index) = CByte(m_BinaryReader.BaseStream.ReadByte())
Next
Return convertedContent
End Function
Public Sub Dispose() Implements IDisposable.Dispose
m_BinaryReader.Dispose()
m_BinaryReader = Nothing
End Sub
End Class
End Namespace
Imports System.Collections
Imports System.Collections.Generic
Imports System.Text
Imports System.Net.Sockets
Namespace NETWORK
Public Class BigEndianReader
Implements IDisposable
Private m_BinaryReader As IO.BinaryReader
' Methods
Public ReadOnly Property BaseStream() As IO.Stream
Get
Return m_BinaryReader.BaseStream
End Get
End Property
Public ReadOnly Property BytesAvailable() As Long
Get
Return (m_BinaryReader.BaseStream.Length - m_BinaryReader.BaseStream.Position)
End Get
End Property
Public ReadOnly Property Position() As Long
Get
Return m_BinaryReader.BaseStream.Position
End Get
End Property
Public Sub New()
m_BinaryReader = New IO.BinaryReader(New IO.MemoryStream(), Encoding.UTF8)
End Sub
Public Sub New(content As Byte())
m_BinaryReader = New IO.BinaryReader(New IO.MemoryStream(content), Encoding.UTF8)
End Sub
Public Sub New(stream As IO.Stream)
m_BinaryReader = New IO.BinaryReader(stream, Encoding.UTF8)
End Sub
Public Function ReadBytes(count As Integer) As Byte()
Return m_BinaryReader.ReadBytes(count)
End Function
Public Function ReadBoolean() As Boolean
Return m_BinaryReader.ReadByte() = 1
End Function
Public Function ReadVarShort() As Short
Dim resultVar = 0
For offset As Integer = 0 To 15 Step 7
Dim readByte As Byte = Me.ReadByte()
Dim hasContinuationFlag As Boolean = (readByte And 128) = 128
Dim extractedValue As Integer = (readByte And 127)
If offset > 0 Then
extractedValue = extractedValue << offset
End If
resultVar += extractedValue
If hasContinuationFlag = False Then
If resultVar > 32767 Then
resultVar -= 65536
End If
Return CShort(resultVar)
End If
Next
Throw New Exception("Too much data")
End Function
Public Function ReadVarInt() As Integer
Dim resultVar As Integer = 0
For offset As Integer = 0 To 31 Step 7
Dim readByte__1 As Byte = ReadByte()
Dim hasContinuationFlag As Boolean = (readByte__1 And 128) = 128
Dim extractedValue As Integer = (readByte__1 And 127)
If offset > 0 Then
'TODO: not sure if the if statement is needed
extractedValue = extractedValue << offset
End If
resultVar += extractedValue
If hasContinuationFlag = False Then
Return resultVar
End If
Next
Throw New Exception("Too much data")
End Function
Public Function ReadByte() As Byte
Return m_BinaryReader.ReadByte()
End Function
Public Function ReadDouble() As Double
Return BitConverter.ToDouble(ConvertToBigEndian(8), 0)
End Function
Public Function ReadShort() As Short
Return BitConverter.ToInt16(ConvertToBigEndian(2), 0)
End Function
Public Function ReadInt32() As Integer
Return BitConverter.ToInt32(ConvertToBigEndian(4), 0)
End Function
Public Function ReadSByte() As SByte
Return m_BinaryReader.ReadSByte()
End Function
Public Function ReadSingle() As Single
Return BitConverter.ToSingle(ConvertToBigEndian(4), 0)
End Function
Public Function ReadUTF() As String
Dim stringLength As UShort = ReadUShort()
Dim stringContentInByte As Byte() = ReadBytes(stringLength)
Return Encoding.UTF8.GetString(stringContentInByte)
End Function
Public Function ReadUShort() As UInt16
Return BitConverter.ToUInt16(ConvertToBigEndian(2), 0)
End Function
Public Function ReadUInt32() As UInt32
Return BitConverter.ToUInt32(ConvertToBigEndian(4), 0)
End Function
Public Sub Seek(position As Integer)
m_BinaryReader.BaseStream.Position = position
End Sub
Public Sub Add(data As Byte(), offset As Integer, count As Integer)
Dim pos As Long = m_BinaryReader.BaseStream.Position
m_BinaryReader.BaseStream.Position = m_BinaryReader.BaseStream.Length
m_BinaryReader.BaseStream.Write(data, offset, count)
m_BinaryReader.BaseStream.Position = pos
End Sub
Private Function ConvertToBigEndian(ByVal count As Integer) As Byte()
Dim convertedContent As Byte() = New Byte(count - 1) {}
For index As Integer = count - 1 To 0 Step -1
convertedContent(index) = CByte(m_BinaryReader.BaseStream.ReadByte())
Next
Return convertedContent
End Function
Public Sub Dispose() Implements IDisposable.Dispose
m_BinaryReader.Dispose()
m_BinaryReader = Nothing
End Sub
End Class
End Namespace
Merci d'avance, et j’espère que vous m'orienteriez sur la bonne voie !