hacktricks/reversing/reversing-tools-basic-methods/cheat-engine.md

10 KiB

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Cheat Engine é um programa útil para encontrar onde valores importantes estão salvos na memória de um jogo em execução e alterá-los.
Quando você baixa e executa, é apresentado um tutorial de como usar a ferramenta. Se você quer aprender a usar a ferramenta, é altamente recomendado completá-lo.

O que você está procurando?

Esta ferramenta é muito útil para encontrar onde algum valor (geralmente um número) está armazenado na memória de um programa.
Geralmente números são armazenados em forma de 4bytes, mas você também pode encontrá-los em formatos double ou float, ou pode querer procurar por algo diferente de um número. Por isso, você precisa ter certeza de selecionar o que deseja procurar:

Também é possível indicar diferentes tipos de buscas:

Você também pode marcar a caixa para parar o jogo enquanto escaneia a memória:

Atalhos

Em Editar --> Configurações --> Atalhos você pode definir diferentes atalhos para diferentes propósitos, como parar o jogo (o que é bastante útil se em algum momento você quiser escanear a memória). Outras opções estão disponíveis:

Modificando o valor

Uma vez que você encontrou onde está o valor que está procurando (mais sobre isso nos próximos passos), você pode modificá-lo clicando duas vezes nele, e depois clicando duas vezes no seu valor:

E finalmente marcando a caixa para realizar a modificação na memória:

A mudança na memória será imediatamente aplicada (note que até o jogo não usar esse valor novamente, o valor não será atualizado no jogo).

Procurando o valor

Então, vamos supor que há um valor importante (como a vida do seu usuário) que você quer melhorar, e você está procurando por esse valor na memória)

Através de uma mudança conhecida

Supondo que você está procurando pelo valor 100, você realiza uma varredura procurando por esse valor e encontra muitas coincidências:

Então, você faz algo para que o valor mude, e você para o jogo e realiza uma nova varredura:

Cheat Engine procurará pelos valores que mudaram de 100 para o novo valor. Parabéns, você encontrou o endereço do valor que estava procurando, agora você pode modificá-lo.
Se você ainda tem vários valores, faça algo para modificar novamente esse valor, e realize outra "nova varredura" para filtrar os endereços.

Valor Desconhecido, mudança conhecida

No cenário em que você não conhece o valor mas sabe como fazê-lo mudar (e até o valor da mudança), você pode procurar pelo seu número.

Então, comece realizando uma varredura do tipo "Valor inicial desconhecido":

Depois, faça o valor mudar, indique como o valor mudou (no meu caso, diminuiu em 1) e realize uma nova varredura:

Você será apresentado todos os valores que foram modificados da maneira selecionada:

Uma vez que você encontrou seu valor, você pode modificá-lo.

Note que há muitas possíveis mudanças e você pode fazer esses passos quantas vezes quiser para filtrar os resultados:

Endereço de Memória Aleatório - Encontrando o código

Até agora aprendemos como encontrar um endereço que armazena um valor, mas é muito provável que em diferentes execuções do jogo esse endereço esteja em diferentes lugares da memória. Então vamos descobrir como sempre encontrar esse endereço.

Usando algumas das técnicas mencionadas, encontre o endereço onde seu jogo atual está armazenando o valor importante. Então (parando o jogo se desejar) faça um clique com o botão direito no endereço encontrado e selecione "Descobrir o que acessa este endereço" ou "Descobrir o que escreve neste endereço":

A primeira opção é útil para saber quais partes do código estão usando este endereço (o que é útil para mais coisas como saber onde você pode modificar o código do jogo).
A segunda opção é mais específica, e será mais útil neste caso, pois estamos interessados em saber de onde esse valor está sendo escrito.

Uma vez que você selecionou uma dessas opções, o debugger será anexado ao programa e uma nova janela vazia aparecerá. Agora, jogue o jogo e modifique esse valor (sem reiniciar o jogo). A janela deve ser preenchida com os endereços que estão modificando o valor:

Agora que você encontrou o endereço que está modificando o valor, você pode modificar o código ao seu prazer (Cheat Engine permite que você modifique rapidamente para NOPs):

Assim, você pode agora modificá-lo para que o código não afete seu número, ou sempre afete de maneira positiva.

Endereço de Memória Aleatório - Encontrando o ponteiro

Seguindo os passos anteriores, encontre onde o valor que lhe interessa está. Então, usando "Descobrir o que escreve neste endereço", descubra qual endereço escreve este valor e clique duas vezes nele para obter a visão de desmontagem:

Então, realize uma nova varredura procurando pelo valor hex entre "[]" (o valor de $edx neste caso):

(Se vários aparecerem, geralmente você precisa do endereço menor)
Agora, nós temos encontrado o ponteiro que modificará o valor que nos interessa.

Clique em "Adicionar Endereço Manualmente":

Agora, clique na caixa "Ponteiro" e adicione o endereço encontrado na caixa de texto (neste cenário, o endereço encontrado na imagem anterior foi "Tutorial-i386.exe"+2426B0):

(Note como o primeiro "Endereço" é automaticamente preenchido a partir do endereço do ponteiro que você introduz)

Clique em OK e um novo ponteiro será criado:

Agora, toda vez que você modifica esse valor, você está modificando o valor importante mesmo que o endereço de memória onde o valor está seja diferente.

Injeção de Código

Injeção de código é uma técnica onde você injeta um pedaço de código no processo alvo, e então redireciona a execução do código para passar pelo seu próprio código escrito (como dar pontos em vez de subtrair).

Então, imagine que você encontrou o endereço que está subtraindo 1 da vida do seu jogador:

Clique em Mostrar desmontagem para obter o código desmontado.
Depois, clique CTRL+a para invocar a janela de montagem automática e selecione Template --> Injeção de Código

Preencha o endereço da instrução que você quer modificar (isso geralmente é preenchido automaticamente):

Um template será gerado:

Então, insira seu novo código assembly na seção "newmem" e remova o código original da seção "originalcode" se você não quiser que ele seja executado**.** Neste exemplo, o código injetado adicionará 2 pontos em vez de subtrair 1:

Clique em executar e assim por diante e seu código será injetado no programa, mudando o comportamento da funcionalidade!

Referências

  • Tutorial do Cheat Engine, complete-o para aprender como começar com o Cheat Engine
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: