Carregando...

Archer Network

0

Tutoriais


Ragnarok - Porquê a função replay não é confiável


Nome: Cleber Santos

Discord: Zephi#2098

Sobre: Tecnólogo em Redes de Computadores, Técnico em Informática e Eletrônica, sempre apaixonado por tecnologias eletrônicas principalmente as que envolvem games viu no site uma opertunidade de juntar pessoas que compartilham dessa paixão ou que simplesmente desejam saber mais como funciona esse universo vasto e que nos diverte a tanto tempo.

Gravatar

Número de acessos: 1136

Publicado em 28/01/2021 por Zephi

Olá pessoal, este é o segundo artigo da série que detalha alguns aspectos técnicos do funcionamento do Ragnarok, nesse em especial vamos ver o que são arquivos de replay, como eles funcionam e o por que deles não serem confiáveis para a abertura de chamados no suporte.

 

A função de replay do jogo lhe permite gravar durante um determinado tempo suas ações e resultantes no jogo, ou seja é possível gravar um determinado tempo no jogo e posteriormente poder assistir esse mesmo gameplay qualquer hora desejada, essa função é extremamente útil para por exemplo quem joga guerra do emperium, quem sobe torre do infinito ou qualquer outra circunstância onde não é possível ficar se preocupando com aplicativos de terceiros para gravar ou que ocasionam queda de desempenho no micro devido ao fluxo intenso desses eventos ou instâncias.

 

Quando é realizada uma gravação assim que finalizada o respectivo arquivo é salvo na pasta "Replay" dentro do diretório de instalação do jogo e eles possuem a extensão ".rrf" (significa Ragnarok Replay File, está no cabeçalho do arquivo gerado), e são extremamente pequenos (tamanho ocupado em disco) em relação ao tempo que conseguem gravar, isso claro comparado com um arquivo de vídeo (h.264 ou mesmo h.265), isso acontece pois eles não são arquivos de vídeo, mas sim uma captura de dados entre o cliente do Ragnarok e o servidores (nesse caso o de mapa e o de personagem).

 

 

Ou seja, na hora que o recurso do Replay é ativado, todo o trafego de dados necessário para se criar o replay é capturado e posteriormente salvo em disco, o que significa que ao se assitir um arquivo de replay, na verdade o cliente do jogo fará uma reconstituição dos dados capturados e irá "jogar" no seu lugar, realizando as mesmas ações e obtendo as mesmas repostas do servidor afinal essas também foram capturadas durante a gravação.

 

Por essa razão não é possível por exemplo gravar um replay em um cliente de Ragnarok atualizado e posteriormente pegar esse mesmo arquivo e reproduzi-lo em um outro cliente desatualizado, afinal poderão haver itens novos que existem no atualizado e que se tentar reconstituir o gameplay em um cliente que eles não existem quase certamente ocasionará em Gravity Error ou no mínimo um erro de GRF, pois não será encontrado o gráfico do item.

 

Outra flexibilidade que a gravação via captura de pacotes proporciona é a interação durante a reprodução do gameplay, por exemplo é possivel abrir o inventário, girar camera e criar outras diferenças que não existam no gameplay original, obviamente não é possível alterar por exemplo o item equipado durante a exibição do replay ou qualquer outra ação que ocasione a inconsistencia da resposta obitida pelo servidor. (Exemplo, se o personagem deu 1.000 de dano com o equipamento "x", ele tem que estar equipado com esse mesmo equipamento para que os 1.000 seja reproduzido).

 

É inegável a utilizade dessa função, tão útil que com certeza a maioria de vocês já pensou em utiliza-lá como ferramenta de prova de infração aos termos de uso do jogo, afinal deixar gravando e em caso de um KS ou ainda de um flagrante de uso de BOT poder enviar um arquivo minúsculo em tamanho que pode ser reproduzido e analizado pelo suporte com toda a calma e ainda com liberdade de mover o cursor e ver o nome do possivel infrator seria o casamento perfeito entre o útil e o agradável, certo?

 

Pois é, infelizmente quem já tentou fazer isso no suporte se deparou com uma mensagem do tipo "não podemos utilizar esse aquivo como prova" ou algo do tipo, na maioria das vezes sem nem explicar qual o motivo, afinal uma vez que eu capturei os dados direto do jogo, usando uma ferramenta do próprio jogo, como algo assim não seria aceitável como prova, ou seja como não seria confiável para tal... pois é acontece que infelizmente não é confiável mesmo e irei explicar o por quê.

 

O arquivo de replay como todo o arquivo salvo em disco é passivo de alteração, em resumo o arquivo pode ser editado, ter suas infromações alteradas, e salvo novamente, ou seja é possível gravar um replay que se exibe uma infração por exemplo, trocar o nome da pessoa ou texto digitado, salvar e enviar essas informações ao suporte, que em caso de aceito geraria prejuizo a terceiros que não tiveram participação na ocorrência, simplesmente foram "plantados" no replay.

 

Para fins didáticos irei realizar uma demonstração para que fique evidente o quão simples é alterar um arquivo de replay ao contrário do que possa parecer, a forma mais básica de edição seria a abertura do arquivo em um editor de texto como o Bloco de Notas do Windows por exemplo, no entanto não é possível editar lá pois provávelmente temos que alterar caracteres não imprimíveis, não irei me aprofundar muito nesse tema para não me extender, no entanto esse aplicativo não seria adequeado para a alteração em questão, como pode ser observado na imagem abaixo:

 

 

Um editor Hexadecimal seria a ferramenta correta para tal, ela permite alterar dados e salvá-los em disco, sem o risco de corromper o arquivo, pois ele consegue editar os dados em sua totalidade, basta comparar na imagem abaixo a diferença de exibição:

 

 

Uma vez que é possível editar esse arquivo vamos ao contexto do replay gravado, esse arquivo aberto de nome 5.rrf, foi gravado no feudo de payon (fora do horário das guerra do emperium, afim de não ter ninguem e gerar mais dados do que o necessário), com meu AB parado, e o objetivo dessa demonstração é alterar o que ele falou, eu inicio a gravação, escrevo "teste", aperto a tecla Enter e encerro a gravação, com isso tenho um arquivo enxuto e com somente uma ação, afim de ficar mais fácil achar no arquivo onde a palavra "teste" se encontra.

 

Em seguida gravo outro replay no mesmo cenário mas escrevo outra coisa ao invés de teste, salvo o arquivo replay e comparo no editor hexadecimal os dois arquivos, o editor retorna algumas diferenças entre eles, mas a que chama mais a atenção são cinco valores hexadecimais diferentes perto no final do arquivo (o valor 00, ultimo no editor é o final do arquivo ou EOF, e indica ao cliente do Ragnarok que o arquivo terminou), valor que coincide com a quantidade de caracteres digitados, sendo assim deixo aberto somente o arquivo de replay "5.rrf" (o que eu escrevi a palavra teste) e troco a penultima letra da palvra "teste", nesse caso o ultimo t ou em hexadecimal o valor E5.

 

Altero ele para E3 ou seja dois números abaixo, salvo o arquivo e rodo o replay no Ragnarok, e com isso temos nossa fala alterada para "tesre", ou seja o replay foi editado, mas porque ficou assim?, acompanhem na imagem abaixo o que foi alterado e o resultado:

 

 

Não é possível saber ao certo qual o algoritimo utilizado para o envio de chat no Ragnarok e nem é esse o intuito desse artigo, no entanto via engenharia reversa, podemos notar que ao decrementar em dois valores (E5, E4, E3) a letra "t" virou um "r", ou seja também decrementou em dois valores (t, s, r), com isso podemos concluir que não só todos os valores (textos, nome de personagem e qualquer outro valor na tela) são armazenados em texto aberto (sem criptografia) mas também que sendo assim qualquer coisa pode ser alterada, basta procurar onde se encontra no arquivo.

 

A notamos também que na palavra "teste" existem duas letras "t" no entanto no arquivo de replay a primeira é representada pelo valor em hexadecimal 54 e a segunda como valor E5, o que a primeira vista deveria ser o mesmo valor afinal são as mesmas letras, no entanto isso se deve ao fato de que existe uma alternância de referência entre o valor que vai representar cada letra, provávelmente característico do cliente do Ragnarok, mas novamente não entrarei em detalhes nesse assunto pois não é o objetivo, abaixo segue um resumo da alteração do valor e do resultado obtido:

 

 

Com isso fica claro que é possível alterar os valores e tornar o replay não confiável, por mais que possa parecer estranho por ser uma ferramenta do próprio jogo, no entanto em nenhum momento sua intenção inicial era para a abertura de chamados, porque nesse caso teria que ser implementado alguma forma de checagem hash do arquivo gerado ou ainda ser criptografado os dados do replay, coisa que demandaria processamento e provávelmente geraria lag durante o gameplay, em suma foi um recurso bem vindo ao cliente do Ragnarok mas para uso recreativo e não para segurança que como demonstrado nesse artigo não possui praticamente nenhuma.

 

 

 

Referências:

Warpportal - Guia de denuncia

Tabela ascii

End of file

Sistema de numeração hexadecimal