3 pontos por GN⁺ 2024-05-09 | 1 comentários | Compartilhar no WhatsApp

Novo código descoberto no NES Tetris

  • Hackers descobriram uma forma de reprogramar o NES Tetris dentro do próprio jogo
  • Esse método pode ajudar caçadores de pontuações altas que querem evitar o crash de fim de jogo

Como executar código

  • Usando a "kill screen" do NES Tetris como uma forma complexa de manipular a memória, é possível programar novos comportamentos na versão de Tetris executada em hardware e cartucho não modificados
  • Glitches semelhantes de "execução arbitrária de código" já foram descobertos em jogos como Super Mario World, Paper Mario e The Legend of Zelda: Ocarina of Time
  • O método básico para introduzir código externo no NES Tetris já vinha sendo teorizado publicamente pelo menos desde 2021
  • Este método detalha como fazer a tabela de recordes de Tetris começar a ser lida como instruções de código de máquina

Diversão com as portas de controle

  • O crash no NES Tetris acontece quando o processador de pontuação do jogo demora demais para calcular uma nova pontuação entre um frame e outro
  • Quando esse atraso ocorre, parte do código de controle é interrompida pela rotina de escrita do novo frame e acaba saltando para uma parte não intencional da RAM em busca da próxima instrução
  • Graças à forma como o Tetris processa entradas potenciais quando roda no Famicom, o console japonês, o jogador pode manipular esse salto

Programando na tabela de recordes

  • Para o método de controle de salto da Displaced Gamers, o jogador precisa manter pressionado "cima" no terceiro controle e direita, esquerda e baixo no quarto controle
  • Isso faz com que o código de salto seja enviado para a área da RAM que armazena nomes e pontuações da lista de recordes do jogo, oferecendo ao jogador uma superfície maior de RAM que pode ser manipulada diretamente
  • Colocar "(G" na parte alvo da tabela de recordes força o jogo a saltar para outra área da própria tabela de recordes
  • A partir daí, nomes e pontuações passam a ser lidos em sequência como opcodes para a CPU do NES
  • No entanto, como só existem 43 símbolos disponíveis na área de entrada de nomes e apenas 10 dígitos que podem fazer parte das pontuações altas, apenas parte dos comandos opcode disponíveis do NES pode ser "programada" na tabela de recordes
  • Como não existe um sistema de salvamento com bateria, os hackers precisam alcançar manualmente essas pontuações e inserir nomes complexos toda vez que iniciam o Tetris

Opinião do GN⁺

  • É surpreendente que a versão de NES de Tetris tivesse uma funcionalidade escondida desse tipo. Parece que isso não foi descoberto na época, e é curioso que só tenha aparecido agora, décadas depois.
  • Também é interessante que esse tipo de hack tenha sido possível usando a porta de expansão do Famicom. Provavelmente não era algo intencional da Nintendo, mas isso também mostra como o Famicom tinha mais recursos que o NES.
  • A ideia de usar esse bug justamente para inserir código que evita o crash também é muito engenhosa. Em teoria, isso permitiria continuar jogando e ajudaria bastante em tentativas de pontuação alta.
  • Por outro lado, parece incômodo ter de repetir toda essa configuração complexa cada vez que o jogo é iniciado. Para uso real, talvez fosse necessário encontrar uma forma de automatizar mais o processo.
  • No fim, esse método parece ter mais apelo para entusiastas de recordes ou pessoas interessadas em programação do que para usuários comuns que só querem jogar. Parece difícil imaginar um uso popular mais amplo.

1 comentários

 
GN⁺ 2024-05-09
Comentários do Hacker News

Resumo:

  • Uma fala mencionada no romance Accelerando, de Stross — "hackear a estrutura do espaço-tempo para descobrir o que existe por baixo" — faz lembrar esse exploit como o objetivo final do hacking.
  • Sente vergonha por não ter o espírito hacker de fazer algo apenas pela diversão, sem nenhum propósito prático.
  • Os cartuchos de NES rodam a partir de ROM, mas esse exploit faz a CPU saltar para a RAM usada para armazenar a tabela de pontuações máximas.
  • Alguém se pergunta quanto tempo vai levar até conseguirem rodar Doom dentro do Tetris.
  • Quer sair do jogo no Factorio causando uma falha de segmentação com um computador gigantesco feito de esteiras.
  • Acha que foi um excelente desperdício de tempo.
  • A descoberta de ACE em jogos antigos é extremamente interessante. Viu isso alguns anos atrás em Super Mario World e ficou obcecado em entender como isso era possível.
  • É ótimo ver pessoas realmente inteligentes investindo muito tempo e esforço em algo completamente inútil.
  • Talvez não exista motivo para injetar código no Tetris de NES agora, mas esse não é o ponto. A questão é descobrir o que é possível e o que se pode fazer com código antigo e computadores primitivos.
  • Surpreende que o Tetris tenha demorado tanto para ser quebrado desse jeito. Isso anuncia uma nova era de runs any% com o objetivo de chegar ao final/créditos do jogo o mais rápido possível.
  • Ocarina of Time já tem exploits de ACE há anos. O jogo foi tão completamente destruído que pode ser "concluído" em apenas alguns minutos manipulando a memória do jogo e editando warps de entrada específicos.
  • O mais impressionante é que as pessoas editam a memória manualmente usando só alguns botões e um joystick analógico.
  • A possibilidade de execução arbitrária de código é sempre mais interessante do que o que se faz depois disso.
  • Desmontar o jogo para descobrir quando e onde fazer tudo isso, e depois onde manipular para inserir a próxima instrução, é um nível de dedicação digno de admiração.
  • Em 2024, gastar tempo com NES/SNES parece ser prova de que a Nintendo usou truques antiéticos de controle mental/psicológicos em crianças.
  • Essas pessoas têm talento, e não parece haver nenhum motivo racional para terem escolhido este projeto.