sequeled 0 #1 Posted May 1, 2013 (edited) 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: Dúvidas postem aqui. Edited May 1, 2013 by sequeled faltous Share this post Link to post