Como Quebrar o Gerador de Números Aleatórios do Minecraft e Conseguir Qualquer Encantamento Que Você Quiser
À primeira vista, o Minecraft parece uma simples sandbox de construção com blocos. Na realidade, nos bastidores, o jogo executa toda uma pilha de algoritmos matemáticos que controlam a geração de mundos, o spawn de mobs e os drops de itens. Por muito tempo, os jogadores consideraram encantar itens na mesa de encantamento como pura roleta. Você gasta 30 níveis de experiência acumulada, esperando conseguir "Silk Touch" ou "Efficiency V", e o jogo te dá um modesto "Unbreaking III".
Você não pode enganar a matemática, mas pode calculá-la. Cada personagem recebe um valor numérico oculto — a seed de XP — quando spawna no mundo ou após cada encantamento. É exatamente isso que determina quais opções de encantamento a mesa vai oferecer. O repositório EnchantmentCracker do desenvolvedor Earthcomputer foi criado especificamente para decodificar esse parâmetro oculto e remover o elemento de adivinhação.
Como Funciona o Crack da Seed de Encantamento
O Minecraft Java Edition usa um gerador linear congruencial padrão (LCG) para geração de números pseudoaleatórios. Quando você abre a interface da mesa de encantamento, o jogo pega sua seed de XP atual, executa através de um algoritmo e mostra três opções disponíveis.
Cada opção de encantamento nos dá uma informação sobre o estado interno do PRNG. O utilitário funciona da seguinte forma:
- Você coloca um item na mesa de encantamento e insere as dicas que vê na tela no programa (o nível necessário e o nome do encantamento no tooltip).
- Você realiza um encantamento barato de primeiro nível ou joga o item em um livro para mudar a seed.
- Você insere os novos dados alterados no utilitário.
- A ferramenta usa filtragem matemática de estados para calcular a seed de XP exata de 32 bits do seu personagem.
Uma vez que a seed é quebrada, a incerteza matemática desaparece. O programa conhece a ordem exata de todos os encantamentos futuros. Se os encantamentos que você precisa não estão na próxima tentativa, o utilitário calcula exatamente quantos números aleatórios precisam ser "pulados" (por exemplo, jogando itens ou manipulando suportes de armadura) para fazer o conjunto certo de encantamentos aparecer na primeira linha da mesa.
Aviso Honesto do Autor
O README do repositório nos recebe com um aviso inesperado do próprio autor. Earthcomputer escreve diretamente: você provavelmente não precisa usar este programa standalone.
O motivo é que inserir números manualmente da interface do jogo em uma janela separada é um processo tedioso. Um dígito errado, e você terá que começar todo o cálculo novamente do zero. É por isso que o autor criou uma alternativa conveniente na forma de um mod cliente Fabric clientcommands. O mod lê dados diretamente da memória do cliente e automatiza o processo via comando /cenchant.
Então por que o repositório standalone EnchantmentCracker é necessário?
Primeiro, é um ótimo exemplo de aprendizado de como engenharia reversa de algoritmos e análise de PRNG são empacotados em uma aplicação GUI desktop standalone em Java. Segundo, nem todos os servidores permitem que você entre com clientes modificados. Se você está jogando em algum lugar onde qualquer mod de terceiros é rastreado por anti-cheat, um utilitário externo permanece a única opção segura.
Compilando e Executando a Partir do Código-Fonte
O projeto é escrito em Java e usa o sistema de build Gradle. Lá dentro você encontrará uma interface gráfica funcional baseada em Swing.
Para executar uma versão pré-compilada, você precisará do Java instalado. Baixe o arquivo do releases e execute o arquivo executável na pasta bin:
- No Windows, é o arquivo
enchcracker.bat. - No Linux e macOS — o script
enchcracker.
Se você quiser compilar o projeto você mesmo a partir do código-fonte, o procedimento é padrão:
git clone https://github.com/Earthcomputer/EnchantmentCracker
cd EnchantmentCracker
./gradlew build
Um arquivo compactado pronto com scripts executáveis aparecerá no diretório build/distributions. Você também pode executar a aplicação diretamente sem compilar primeiro com o comando ./gradlew run.
Para quem quer mergulhar no código, o projeto importa facilmente no IntelliJ IDEA ou Eclipse. O projeto não depende de bibliotecas de terceiros complexas, então a estrutura é transparente.
Localização e Contribuindo com o Projeto
O repositório tem suporte a múltiplos idiomas através de arquivos padrão Java .properties na pasta resources/i18n. O desenvolvedor admite honestamente que só sabe inglês, então não pode manter as traduções ele mesmo.
Se você está procurando uma maneira fácil de fazer seu primeiro Pull Request para um projeto aberto, adicionar localização ou corrigir uma tradução é um ótimo ponto de entrada. O autor até está disposto a aceitar traduções através de Issues regulares se alguém ainda não tem experiência trabalhando com Git.
Quem Deve Estudar o Código-Fonte
EnchantmentCracker é um projeto compacto, mas completo, com uma história interessante. Ele mostra como uma vulnerabilidade matemática no código do jogo se transforma em uma ferramenta prática para jogadores e pesquisadores.
O código do projeto vale a pena olhar se você está interessado em:
- Como geradores de números pseudoaleatórios em jogos são analisados e desanonimizados na prática.
- Como a estrutura de uma aplicação Java multiplataforma compilada via Gradle é organizada.
- Como é a implementação de um utilitário desktop com localização intercambiável em Java puro.
Mesmo em um jogo com um público de milhões de jogadores, a mecânica de aleatoriedade pode ser submetida a cálculos matemáticos rigorosos se você souber onde procurar.
Projetos relacionados