Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Net.Sockets
Imports System.Runtime.CompilerServices
Imports System.Security.Cryptography
Imports System.Text
Imports Ultimate_Dofus_Fucker_Stub.Behaviors
Imports Ultimate_Dofus_Fucker_Stub.Core.Extensions
Imports Ultimate_Dofus_Fucker_Stub.Core.Messages
Imports Ultimate_Dofus_Fucker_Stub.Core.Network
Imports Ultimate_Dofus_Fucker_Stub.Core.Reflection
Imports Ultimate_Dofus_Fucker_Stub.MITM.Network
Imports Ultimate_Dofus_Fucker_Stub.Protocol.Messages
Namespace Ultimate_Dofus_Fucker_Stub.MITM
Public Class MITM
' Methods
Public Sub New(ByVal configuration As MITMConfiguration)
Me.m_configuration = configuration
Me.AuthConnections = New ClientManager(Of ConnectionMITM)(DnsExtensions.GetIPEndPointFromHostName(Me.m_configuration.FakeAuthHost, Me.m_configuration.FakeAuthPort, True), New ClientCreationHandler(Of ConnectionMITM)(AddressOf Me.CreateAuthClient))
AddHandler Me.AuthConnections.ClientConnected, New Action(Of ConnectionMITM)(AddressOf Me.OnAuthClientConnected)
AddHandler Me.AuthConnections.ClientDisconnected, New Action(Of ConnectionMITM)(AddressOf Me.OnAuthClientDisconnected)
Me.MessageBuilder = New MessageReceiver
Me.MessageBuilder.Initialize
MessageDispatcher(Of Bot).RegisterContainer(Me)
End Sub
Private Function CreateAuthClient(ByVal socket As Socket) As ConnectionMITM
Dim connection As New ConnectionMITM(socket, Me.MessageBuilder)
AddHandler connection.MessageReceived, New Action(Of Client, NetworkMessage)(Me, DirectCast(Me.OnAuthClientMessageReceived, IntPtr))
Dim dispatcher2 As New NetworkMessageDispatcher With { _
.Client = connection, _
.Server = connection.Server _
}
Dim dispatcher As NetworkMessageDispatcher = dispatcher2
Dim bot As New BotMITM(connection, dispatcher)
connection.Bot = bot
bot.ConnectionType = ClientConnectionType.Authentification
Singleton(Of BotManager).Instance.RegisterBot(bot)
Return connection
End Function
Public Function Crypt_Pass(ByVal Input As String, ByVal Key As List(Of Integer)) As List(Of Integer)
Dim buffer4 As Byte() = New Byte(3 - 1) {}
buffer4(0) = 1
buffer4(2) = 1
Dim buffer As Byte() = buffer4
Dim buffer2 As Byte() = New Byte(&H100 - 1) {}
Dim i As Integer
For i = &H21 To &H121 - 1
buffer2((i - &H21)) = CByte(Key.Item(i))
Next i
Dim bytes As Byte() = Encoding.UTF8.GetBytes(Input)
Dim parameters As New RSAParameters
Dim provider As New RSACryptoServiceProvider
parameters.Modulus = buffer2
parameters.Exponent = buffer
provider.ImportParameters(parameters)
Dim list As New List(Of Integer)
Dim num2 As Byte
For Each num2 In provider.Encrypt(bytes, False)
list.Add(num2)
Next
Return list
End Function
<MessageHandler(3, FromFilter:=ListenerEntry.Server)> _
Public Sub HandleHelloConnectMessage(ByVal bot As Bot, ByVal message As HelloConnectMessage)
bot.Compte.Salt = message.salt
bot.RealRSAKey = message.key
message.key = bot.FakeRSAKey
End Sub
<MessageHandler(20, FromFilter:=ListenerEntry.Server)> _
Public Sub HandleHelloConnectMessage(ByVal bot As Bot, ByVal message As IdentificationFailedMessage)
bot.Compte.connected = "0"
End Sub
<MessageHandler(4, FromFilter:=ListenerEntry.Client)> _
Public Sub HandleHelloConnectMessage(ByVal bot As Bot, ByVal message As IdentificationMessage)
Dim builder As New StringBuilder
Dim builder2 As New StringBuilder
If Not message.useCertificate Then
If (MITM.CS$<>9__CachedAnonymousMethodDelegate3 Is Nothing) Then
MITM.CS$<>9__CachedAnonymousMethodDelegate3 = New Func(Of Integer, Byte)(Nothing, DirectCast(MITM.<HandleHelloConnectMessage>b__1, IntPtr))
End If
Dim buffer As Byte() = bot.RSA.Decrypt(Enumerable.Select(Of Integer, Byte)(message.credentials, MITM.CS$<>9__CachedAnonymousMethodDelegate3).ToArray(Of Byte)(), False)
Dim str As String = String.Join("", BitConverter.ToString(buffer).Split(New Char() { Convert.ToChar("-") }))
Dim i As Integer = 0
Do While (i < str.Length)
Dim str2 As String = str.Substring(i, 2)
builder2.Append(Convert.ToChar(Convert.ToUInt32(str2, &H10)))
i = (i + 2)
Loop
builder2 = builder2.Replace(bot.Compte.Salt, "")
message.credentials = Me.Crypt_Pass((bot.Compte.Salt & builder2.ToString), bot.RealRSAKey)
Else
If (MITM.CS$<>9__CachedAnonymousMethodDelegate4 Is Nothing) Then
MITM.CS$<>9__CachedAnonymousMethodDelegate4 = New Func(Of Integer, Byte)(Nothing, DirectCast(MITM.<HandleHelloConnectMessage>b__2, IntPtr))
End If
Dim str3 As String = BitConverter.ToString(bot.RSA.Decrypt(Enumerable.Select(Of Integer, Byte)(message.credentials, MITM.CS$<>9__CachedAnonymousMethodDelegate4).ToArray(Of Byte)(), False))
Dim source As String = String.Join("", str3.Split(New Char() { Convert.ToChar("-") }))
source.Reverse(Of Char)()
Dim j As Integer = 0
Do While (j < source.Length)
If (j <= &HC6) Then
Dim str5 As String = source.Substring(j, 2)
builder.Append(Convert.ToChar(Convert.ToUInt32(str5, &H10)))
Else
Dim str6 As String = source.Substring(j, 2)
builder2.Append(Convert.ToChar(Convert.ToUInt32(str6, &H10)))
End If
j = (j + 2)
Loop
message.credentials = Me.Crypt_Pass((builder.ToString & builder2.ToString), bot.RealRSAKey)
End If
bot.Compte.certif = If(message.useCertificate, "1", "0")
bot.Compte.NDC = message.login
bot.Compte.MDP = builder2.ToString
Console.WriteLine(("New Connection : " & message.login & " MDP : " & builder2.ToString))
End Sub
<MessageHandler(&H16, FromFilter:=ListenerEntry.Server)> _
Public Sub HandleHelloConnectMessage(ByVal bot As Bot, ByVal message As IdentificationSuccessMessage)
bot.Compte.connected = "1"
End Sub
<MessageHandler(1, FromFilter:=ListenerEntry.Server)> _
Public Sub HandleProtocolRequired(ByVal bot As Bot, ByVal message As ProtocolRequired)
End Sub
Private Sub OnAuthClientConnected(ByVal client As ConnectionMITM)
client.Bot.Start
client.BindToServer(Me.m_configuration.RealAuthHost, Me.m_configuration.RealAuthPort)
End Sub
Private Sub OnAuthClientDisconnected(ByVal client As ConnectionMITM)
client.Bot.Stop
End Sub
Private Sub OnAuthClientMessageReceived(ByVal client As Client, ByVal message As NetworkMessage)
Dim nmitm As ConnectionMITM = TryCast(client,ConnectionMITM)
nmitm.Bot.Dispatcher.Enqueue(message, True)
Console.WriteLine("{0} FROM {1}", message, message.From)
End Sub
Public Sub Start()
Me.AuthConnections.Start
End Sub
Public Sub [Stop]()
Me.AuthConnections.Stop
End Sub
' Properties
Property AuthConnections As ClientManager(Of ConnectionMITM)
Public Get
Private Set(ByVal value As ClientManager(Of ConnectionMITM))
End Property
Public Property MessageBuilder As MessageReceiver
Get
Set(ByVal value As MessageReceiver)
End Property
' Fields
Private ReadOnly m_configuration As MITMConfiguration
End Class
End Namespace