Ir para conteúdo
Entre para seguir isso  
sequeled

Criando otserver em vb.net - parte 1

Recommended Posts

sequeled    0
sequeled

Olá galera, resolvi dar um Up aqui na área dos programadores porque ela esta muito parada.

Vamos lá ...

Esse tutorial é a parte 1 aqui trabalhamos apenas o recebimento das informações de login de um cliente de tibia.

 

Não se esqueçam de usar o tibia ip changer no tibia 7.6 e setar o ip como localhost ou 127.0.0.1

Caso queira um cliente próprio use.

http://vapus.net/customclient

 

Para facilitar o tutorial escolhi a versão do tibia 7.6 pois não preciso descriptografar as informações para exibi-las.

Hoje só exibiremos o pacote de Login enviado.

Vá no visual studio 2008 -> File->New Project->Visual Basic->Windows Forms Application

Crie um novo projeto.

Dentro de Module1 cole.

 

'Necessário para criar a conexão
Imports System.Net.Sockets
Imports System.Text


Module Module1

   Sub Main()

       Const port As Integer = 7171
       Dim tcpListener As New TcpListener(port)

       tcpListener.Start()
       Console.WriteLine("DUCA OTS - TUTORIAL PARA DESENVOLVEDORES PARTE 1.")
       Console.WriteLine("Servidor Protocolo 7.6 rodando na porta [" & port & "].")

       Try
           'aceita a conexao do cliente e retorna uma inicializacao TcpClient
           Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
           Console.WriteLine("Conexão aceita na porta " & port & ".")

           ' obtem O STREAM -> dados que o cliente envia para o servidor
           Dim networkStream As NetworkStream = tcpClient.GetStream()

           'Declara o tamanho do array de bytes que será recebido
           Dim bytes(tcpClient.ReceiveBufferSize) As Byte


           'Lê as informações retornadas pelo cliente  e joga na variavel BYTES
           'Parametro ( bytes = variavel que recebe os bytes)
           'Parametro (0 = offset começo da leitura é na posição 0)
           'Parametro Converte para inteiro o tamanho da mensagem recebida ->
           'CInt(tcpClient.ReceiveBufferSize)

           networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))

           'Aqui as variaveis que usarei para separar os dados recebidos
           Dim PacketLenght(1) As Byte              'Tamanho do pacote de login
           Dim PacketType(0) As Byte                'Tipo de pacote nem sei aehayeagyea
           Dim PacketSo(1) As Byte                  'Sistema Operacional (1=linux, 2=windows)
           Dim PacketTibiaClietVersion(1) As Byte   'versão do tibia  7.6=760
           Dim PacketFilesVersion(11) As Byte       'versão dos arquivos tibia.dat, tibia.spr, tibia.pic
           Dim PacketAccountNumber(3) As Byte       'account
           Dim PacketPasswordLength(1) As Byte      'Tamanho da senha
           Dim PacketPassword(0) As Byte             'Senha

           'Copio os bytes para as variaveis
           'Array.Copy ( BYTES, POS_ARRAY, VAR_QUE_RECEBERA , POS_INICIAL, BYTES A COPIAR )
           Array.Copy(bytes, 0, PacketLenght, 0, PacketLenght.Length)  ' COPIA O BYTE DA POSIÇÃO 0 A 1 DO ARRAY EM -> BYTES...
           Array.Copy(bytes, 1, PacketType, 0, PacketType.Length)      ' COPIA O BYTE DA POSIÇÃO 1 A 2
           Array.Copy(bytes, 3, PacketSo, 0, PacketSo.Length)          ' COPIA O BYTE DA POSIÇÃO 3 A 4
           Array.Copy(bytes, 5, PacketTibiaClietVersion, 0, PacketTibiaClietVersion.Length) '// // // 5 A 7
           Array.Copy(bytes, 8, PacketFilesVersion, 0, PacketFilesVersion.Length) ' // // // //8 A 18
           Array.Copy(bytes, 19, PacketAccountNumber, 0, PacketAccountNumber.Length) ' // // // // 19 A 22
           Array.Copy(bytes, 23, PacketPasswordLength, 0, PacketPasswordLength.Length) '// // // // 23 APENAS
           ReDim PacketPassword(BitConverter.ToInt16(PacketPasswordLength, 0)) 'CALCULA O TAMANHO DO BYTE PASS
           Array.Copy(bytes, 24, PacketPassword, 0, PacketPassword.Length) '// COPIA O BYTE DA POSIÇÃO 24 A DIANTE "(PacketPassword.Length)"

           'ESCREVENDO OS PACOTES NO CONSOLE
           Console.Write("Tamanho do pacote: ")
           'CONVERTE OS 2 BYTES PARA  INTEIRO PARA PODER EXIBILO - (BitConverter.ToInt16 = 2 bytes)
           Console.WriteLine(BitConverter.ToInt16(PacketLenght, 0))
           Console.Write("Tipo de pacote: ")
           Console.WriteLine(PacketType(0).ToString)
           Console.Write("Sistema operacional 20 =windows 10 = linux: ")
           'CONVERTE OS 2 BYTES PARA  INTEIRO PARA PODER EXIBILO - (BitConverter.ToInt16 = 2 bytes)
           Console.WriteLine(BitConverter.ToInt16(PacketSo, 0))
           Console.Write("Versão do cliente: ")
           'CONVERTE OS 2 BYTES PARA  INTEIRO PARA PODER EXIBILO - (BitConverter.ToInt16 = 2 bytes)
           Console.WriteLine(BitConverter.ToInt16(PacketTibiaClietVersion, 0))
           'Console.Write("Versão de arquivos tibia.dat, tibia.spr e tibia pic [OBS:POR PREGUIÇA VOU JOGAR AQUI TUDO]: ")
           'Console.WriteLine(BitConverter.ToInt64(PacketFilesVersion, 0))
           Console.Write("Account: ")
           'CONVERTE OS 4 BYTES PARA  INTEIRO PARA PODER EXIBILO - (BitConverter.ToInt32 = 4 bytes)
           Console.WriteLine(BitConverter.ToInt32(PacketAccountNumber, 0))
           Console.Write("Tamanho do Password: ")
           'CONVERTE OS 2 BYTES PARA  INTEIRO PARA PODER EXIBILO - (BitConverter.ToInt16 = 2 bytes)
           Console.WriteLine(BitConverter.ToInt16(PacketPasswordLength, 0))
           Console.Write("Password: ")
           'DECODIFICA OS BYTES E EXIBE OS NA TELA Encoding.ASCII.GetString(bytes, inicio, fim)
           Console.WriteLine(Encoding.ASCII.GetString(PacketPassword, 0, PacketPassword.Length))

           'qualquer comunicacao com o cliente remoto usando o TcpClient pode comecar aqui
           Dim responseString As String = "Conectado ao servidor."
           Dim dec As Byte()

           'cp.Flags = CspProviderFlags.UseUserProtectedKey
           'dec = rsa.
           Dim sendBytes As [byte]() = Encoding.ASCII.GetBytes(responseString)

           networkStream.Write(sendBytes, 0, sendBytes.Length)
           Console.WriteLine(("Mensagem enviada /> : " + responseString))

           'fecha TcpListener e TcpClient.
           tcpClient.Close()
           tcpListener.Stop()
           Console.WriteLine("Encerrando conexão com o servidor")
           Console.ReadLine()
       Catch e As Exception
           Console.WriteLine(e.ToString())
           Console.ReadLine()
       End Try
   End Sub







End Module

 

Pronto, colou o código depois é só compilar e tentar logar no cliente .

 

 

Print do console:

attachment.php?attachmentid=5315&d=1367419643

Dúvidas postem aqui.

Editado por sequeled
faltous

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×