Suporte no desenvolvimento de jogos


    Exemplo de falhas em derivados de E.O. e possíveis correções

    DragonicK
    DragonicK
    Lenda
    Lenda

    Mensagens : 488
    Créditos : 71
    Cash : 0

    Ficha do personagem
    Nível: 1
    Experiência:
    Exemplo de falhas em derivados de E.O. e possíveis correções Left_bar_bleue0/0Exemplo de falhas em derivados de E.O. e possíveis correções Empty_bar_bleue  (0/0)
    Vida:
    Exemplo de falhas em derivados de E.O. e possíveis correções Left_bar_bleue30/30Exemplo de falhas em derivados de E.O. e possíveis correções Empty_bar_bleue  (30/30)

    Exemplo de falhas em derivados de E.O. e possíveis correções Empty Exemplo de falhas em derivados de E.O. e possíveis correções

    Mensagem por DragonicK em Sex Mar 29, 2019 10:56 am

    Não há nenhuma novidade em dizer que o Eclipse Origins é falho. 
    Por enquanto, só vou mostrar como algumas coisas funcionam.

    Nada é criado dinamicamente, os slots para os jogadores (e conexões) são definidos assim que o servidor é iniciado. Quando uma conexão é aceita, esse slot fica ocupado como se o jogador já estivesse no jogo, e também, o tempo das conexões que não estão recebendo dados não são verificadas no servidor. Por causa disso, qualquer um pode deixar um servidor cheio usando um laço e criando novas conexões, impedindo outros usuários de fazerem uma nova ligação com o servidor.

    Qualquer um com o mínimo de conhecimento em uma linguagem de programação e TCP pode criar uma conexão com qualquer servidor.

    Além do código ser aberto, o servidor também é podendo receber pacotes de qualquer origem, você pode facilmente derrubar o servidor enviando valores diferentes do esperado onde não existe verificação no servidor.

    Exemplo 1:
    Um erro fácil de ser identificado está no PlayerSwitchSpellsSlots: 


    Runtime Error: 9
    Subcript out of range 


    Este é o método que faz a troca de slots de magias.
    Exemplo de falhas em derivados de E.O. e possíveis correções FlfikJa

    A quantidade máxima de slots de magia no personagem é de 35.
    Os arrays em VB6 podem ser declarados com índices definidos. Portanto, os slots de magia do personagem, seguem o valor entre 1 e 35.

    Qualquer valor diferente de entre 1 e 35 irá gerar um erro.
    Runtime Error: 9
    Subcript out of range 


    Exemplo de falhas em derivados de E.O. e possíveis correções P4G4nEN

    Quando um pacote com valores irregulares é recebido ocorrerá erros e fará com que o servidor caia.
    A correção do problema é simples, é necessário apenas verificar se os números dos slots estão dentro da faixa, 1 entre 35.

    Exemplo de falhas em derivados de E.O. e possíveis correções WK30uqW


    Exemplo 2:
    O problema de salvar os dados a todo momento.
    Vou apresentar um possível problema com o banco. 


    Exemplo de falhas em derivados de E.O. e possíveis correções BbMK6Pq

    Quando o pacote para fechar o banco é recebido do cliente, o personagem e o banco são salvos. Alguns servidores salvam os dados dos personagens em arquivos binários, outros em arquivos de configuração (.INI).

    O maior problema deste método, não é salvar os dados do personagem, mas a não verificação dele.

    Se alguém atacar floodando este pacote, o aumento do uso de CPU e acesso ao disco irão aumentar, e isso irá AGRAVAR se o servidor salva os dados em arquivos de configuração, pois há muitas operações com strings por debaixo dos panos. 

    Como em um VPS o processamento é limitado, a máquina ficará lenta e o processamento do restante dos usuários ficará comprometido.

    Uma maneira de evitar isso, é verificar se o personagem está dentro do jogo e verificar se o banco está aberto.

    Exemplo de falhas em derivados de E.O. e possíveis correções 5LTyl1Z

    Exemplo 3:
    ReadString tentando ler mais do que deveria.


    Uma string quando adicionada ao buffer, é convertida para bytes. 
    Na primeira posição é adicionado o tamanho da string em 4 bytes no array, em seguida, cada caractere é escrito.

    Exemplo: abc

    Posição 0: 3  (Tamanho)
    Posição 1: 97 (Letra a)
    Posição 2: 98 (Letra b)
    Posição 3: 99 (Letra c)

    Este é o método de escrita, na parte de leitura, primeiro, deve-se obter a quantidade de caracteres para obter os dados posteriormente.

    O problema aqui é que, o tamanho da string pode ser alterado fazendo com que o servidor tente ler uma quantidade de dados que não existe gerando outro erro.

    A solução é obter quantos caracteres devem ser lidos e verificar a quantidade disponível no pacote para leitura. Mas também, há outra solução e ambas são simples.

    Adicionar no início do método: 
    On Error Goto ou On Error Resume Next

    Exemplo de falhas em derivados de E.O. e possíveis correções 6VUo8Jx

    Exemplo 5:
    Buffer Overflow

    Por segurança, depois que o objeto for usado, sempre limpem o buffer e destruam o objeto para não ficar nada preso na memória.

    Exemplo de falhas em derivados de E.O. e possíveis correções Px9hGeH

    Processando o recebimento de dados corretamente:
    1. Se o metodo do pacote requisitar um acesso elevado, verifique sempre no início para não criar e não processar dados que serão descartados. Do contário, verifique se o usuário está realmente dentro do jogo usando a função IsPlaying.

    2. Crie o objeto para ler os dados recebidos, leia, limpe e destrua. 
    3. Verifique os valores recebidos e faça o tratamento de erros.
    4. Processe os dados que foram recebidos.
    Exemplo de falhas em derivados de E.O. e possíveis correções E6NBSi2


    Dicas finais:
    Se o servidor cair, é culpa sua por não verificar e revisar o código, e principalmente por não procurar informação o suficiente. O atacante está apenas prestando um serviço gratuito para que você possa melhorar a merda do seu servidor.
    Todos os valores que chegam no servidor devem ser verificados antes de serem processados. 

    Jamais use On Error Resume Next ou On Error Goto se você não sabe o que está fazendo seu burro, essas coisas farão com que a mensagem do erro desapareça, mas o erro irá continuar. 


    Quanto mais On Error Resume Next ou On Error Goto no projeto, menor será a manutenção e implementação de novos sistemas. O servidor irá rodar silenciosamente e quando você souber de um bug e precisar fazer a correção não conseguirá pois NÃO HAVERÁ MENSAGENS DE ERRO ALERTANDO ONDE ESTÁ O PROBLEMA.

    Não seja burro, estude antes de fazer algo.


    Última edição por DragonicK em Sab Mar 30, 2019 12:23 pm, editado 3 vez(es)
    avatar
    EUMORRI VIREI FANTASMA
    Novato
    Novato

    Mensagens : 15
    Créditos : 1
    Cash : 0

    Exemplo de falhas em derivados de E.O. e possíveis correções Empty Re: Exemplo de falhas em derivados de E.O. e possíveis correções

    Mensagem por EUMORRI VIREI FANTASMA em Sex Mar 29, 2019 2:18 pm

    Jesus do Eclipse Origins
    Blast
    Blast
    Administrador
    Administrador

    Medalhas : Exemplo de falhas em derivados de E.O. e possíveis correções 94JxvExemplo de falhas em derivados de E.O. e possíveis correções ZgLkiRU
    Mensagens : 4998
    Créditos : 1106
    Cash : 0

    Exemplo de falhas em derivados de E.O. e possíveis correções Empty Re: Exemplo de falhas em derivados de E.O. e possíveis correções

    Mensagem por Blast em Sex Mar 29, 2019 4:59 pm

    Sobre o problema do banco, acredito que seria melhor salvar o personagem e o banco apenas quando o jogador se desconectar (e a cada certo período de tempo definido no servidor). Não é uma boa ficar fazendo operação de entrada e saída durante o jogo (ao fechar o banco).

    Ótima contribuição, Drago.

    + 1 crédito


    _________________
    Exemplo de falhas em derivados de E.O. e possíveis correções AIymW
    Paulo Soreto
    Paulo Soreto
    Lenda
    Lenda

    Mensagens : 1962
    Créditos : 362
    Cash : 0

    Ficha do personagem
    Nível: 1
    Experiência:
    Exemplo de falhas em derivados de E.O. e possíveis correções Left_bar_bleue0/0Exemplo de falhas em derivados de E.O. e possíveis correções Empty_bar_bleue  (0/0)
    Vida:
    Exemplo de falhas em derivados de E.O. e possíveis correções Left_bar_bleue30/30Exemplo de falhas em derivados de E.O. e possíveis correções Empty_bar_bleue  (30/30)

    Exemplo de falhas em derivados de E.O. e possíveis correções Empty Re: Exemplo de falhas em derivados de E.O. e possíveis correções

    Mensagem por Paulo Soreto em Sex Mar 29, 2019 8:16 pm

    Eu curto esse tipo de análise e é um bom conteúdo pra quem ta desenvolvendo jogos online, não só nessa engine em questão.
    4. Verifique os valores recebidos e faça o tratamento de erros.
    3. Processe os dados que foram recebidos.
    Só muda a ordem ai.
    DragonicK
    DragonicK
    Lenda
    Lenda

    Mensagens : 488
    Créditos : 71
    Cash : 0

    Ficha do personagem
    Nível: 1
    Experiência:
    Exemplo de falhas em derivados de E.O. e possíveis correções Left_bar_bleue0/0Exemplo de falhas em derivados de E.O. e possíveis correções Empty_bar_bleue  (0/0)
    Vida:
    Exemplo de falhas em derivados de E.O. e possíveis correções Left_bar_bleue30/30Exemplo de falhas em derivados de E.O. e possíveis correções Empty_bar_bleue  (30/30)

    Exemplo de falhas em derivados de E.O. e possíveis correções Empty Re: Exemplo de falhas em derivados de E.O. e possíveis correções

    Mensagem por DragonicK em Sex Mar 29, 2019 8:43 pm

    @Paulo Soreto escreveu:Eu curto esse tipo de análise e é um bom conteúdo pra quem ta desenvolvendo jogos online, não só nessa engine em questão.
    4. Verifique os valores recebidos e faça o tratamento de erros.
    3. Processe os dados que foram recebidos.
    Só muda a ordem ai.

    Além dessas coisas, ainda tem mais, só separei algumas.
    GallighanMaker
    GallighanMaker
    Aldeia Friend
    Aldeia Friend

    Medalhas : Exemplo de falhas em derivados de E.O. e possíveis correções ZgLkiRU
    Mensagens : 914
    Créditos : 90
    Cash : 0

    Ficha do personagem
    Nível: 1
    Experiência:
    Exemplo de falhas em derivados de E.O. e possíveis correções Left_bar_bleue0/0Exemplo de falhas em derivados de E.O. e possíveis correções Empty_bar_bleue  (0/0)
    Vida:
    Exemplo de falhas em derivados de E.O. e possíveis correções Left_bar_bleue30/30Exemplo de falhas em derivados de E.O. e possíveis correções Empty_bar_bleue  (30/30)

    Exemplo de falhas em derivados de E.O. e possíveis correções Empty Re: Exemplo de falhas em derivados de E.O. e possíveis correções

    Mensagem por GallighanMaker em Sab Mar 30, 2019 2:51 am

    Muito bom Drag, esse tipo de coisa ajuda muito pra quem está começando a mexer e a entender essa desgraça de VB6 + EO.


    _________________
    @IndieDB @Steam Concept
    Exemplo de falhas em derivados de E.O. e possíveis correções 41324
    --
    Blast
    Blast
    Administrador
    Administrador

    Medalhas : Exemplo de falhas em derivados de E.O. e possíveis correções 94JxvExemplo de falhas em derivados de E.O. e possíveis correções ZgLkiRU
    Mensagens : 4998
    Créditos : 1106
    Cash : 0

    Exemplo de falhas em derivados de E.O. e possíveis correções Empty Re: Exemplo de falhas em derivados de E.O. e possíveis correções

    Mensagem por Blast em Sab Mar 30, 2019 1:01 pm

    Se achar mais falhas, posta aqui pra gente. Irá contribuir muito para o meu servidor.


    _________________
    Exemplo de falhas em derivados de E.O. e possíveis correções AIymW

    Conteúdo patrocinado

    Exemplo de falhas em derivados de E.O. e possíveis correções Empty Re: Exemplo de falhas em derivados de E.O. e possíveis correções

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Sab Set 21, 2019 4:23 pm