1 pontos por GN⁺ 2023-12-06 | 1 comentários | Compartilhar no WhatsApp

Hackeando jogos: alcançando 100% de taxa de vitória em Magic: The Gathering Arena

  • Foi descoberto um método para fazer o oponente se render automaticamente em Magic: The Gathering Arena
  • Com indicação de intenção de reportar o problema, foram oferecidos o código-fonte e uma proposta de solução

Introdução

  • Opinião sobre ofuscação de código no lado do cliente: a ofuscação eleva a barreira contra quem investe pouco esforço, mas também atrapalha desenvolvedores apaixonados que querem reportar vulnerabilidades de segurança
  • Em jogos de carta, o servidor gerencia totalmente o estado do jogo, e o cliente recebe apenas as informações necessárias
  • Como o cliente possui apenas informações limitadas, hackear é difícil

Começando

  • O hack do jogo começou com a análise da comunicação de rede
  • O MTGA, escrito em C#, facilita a manipulação de objetos do jogo em tempo de execução
  • Uso de reflection, que permite acessar campos e métodos privados

Procurando pistas

  • A descompilação de C# usa tokens de metadados para ligar elementos a nomes legíveis por humanos
  • Foi encontrada a função JoinMatch, presumivelmente o ponto inicial de conexão com o servidor do jogo

A implementação do Sparky

  • Sparky, o mascote do MTGA, é o tutorial e bot de prática para novos jogadores
  • A lógica do bot roda localmente, e todo o processo de decisão acontece no computador do usuário

O diabo mora nos detalhes da implementação

  • Ao iniciar uma partida contra bot, a lógica real do bot é processada pela classe HeadlessClient
  • O bot se conecta ao servidor do jogo e joga sem precisar renderizar o tabuleiro

Assumindo a partida

  • Usando reflection, é possível alterar o comportamento dos objetos do jogo
  • Foi escrito um código para identificar o próprio assento e conectar um cliente ao outro assento, fazendo o oponente se render

Opinião do GN⁺

O ponto mais importante deste texto é a postura responsável do desenvolvedor ao compartilhar a descoberta de uma vulnerabilidade de segurança no jogo com o objetivo de melhorá-lo. É muito interessante que, mesmo em sistemas como jogos de carta, em que o servidor gerencia totalmente o estado do jogo, ainda possam existir vulnerabilidades capazes de manipular o resultado por meio de alterações no lado do cliente. Esse tipo de informação oferece uma lição importante para desenvolvedores de jogos fortalecerem a segurança e tornarem o jogo mais justo.

1 comentários

 
GN⁺ 2023-12-06
Opiniões do Hacker News
  • Experiência ao conhecer Linux pela primeira vez e investigar tráfego de rede

    • Uso do programa ShowEQ para o jogo EverQuest para analisar tráfego não criptografado
    • Uso de um hub para espelhar o tráfego para uma máquina Linux, desenhar mapas em tempo real e mostrar a posição dos personagens
    • Era possível verificar quais itens os mobs possuíam e permitir caça seletiva de mobs específicos
    • Era um método passivo e impossível de detectar, mas depois a SOE começou a criptografar o tráfego
  • A impressionante eficiência da IA para o jogo Magic: The Gathering

    • Surpresa com o baixo uso de memória de uma IA capaz de rodar em máquina local
    • Pode fazer mais sentido executar a IA localmente do que no servidor
    • Considerações sobre a diferença de CPU entre servidor e máquina local e sobre suporte a múltiplos núcleos
  • A complexidade e a eficiência do desenvolvimento de IA para Magic: The Gathering

    • Correção de equívocos sobre a complexidade de desenvolver IA para MTG
    • Acessibilidade da lógica do Sparky e as escolhas de implementação dos desenvolvedores
    • Menção à natureza quase Turing-completa do jogo e ao desenvolvimento de estratégias de IA
  • Interesse em projetos pessoais relacionados ao MTGA e em hacking de jogos

    • Desenvolvimento de um cliente não oficial para MTGA, ainda em estágio inicial
    • Expressão de interesse por experiências de hacking de jogos, divulgação de bugs e estrutura do cliente
  • A diversão de jogar Magic 93/94 com o filho

    • Curtindo partidas com o filho usando cartas físicas
    • Participação no campeonato mundial realizado em Madri e orgulho pelo desempenho do filho
  • A importância da lógica do jogo no lado do cliente e da validação no servidor

    • Ênfase na responsividade da lógica no cliente em jogos em tempo real
    • Importância da validação no servidor em jogos de cartas e da limitação das informações do oponente
  • Bugs no jogo League of Legends e seus efeitos

    • Erro de servidor causado por combinações específicas de campeão e item, permitindo manipular o resultado da partida
  • Dúvidas sobre conexão de IA durante a partida e sobre como a desistência do oponente é tratada

    • Pergunta sobre permitir a conexão de IA em partidas reais e sobre o tratamento da rendição
  • Experiência reutilizando pacotes de conexão com o servidor no jogo Diablo 2

    • Compartilhamento de um método para conectar um personagem de servidor LAN ao servidor oficial da internet
  • Interesse em desenvolver emuladores de servidor e em partidas LAN

    • Exploração da possibilidade de desenvolver um emulador de servidor para partidas LAN com todas as cartas desbloqueadas