Baixe o app para aproveitar ainda mais
Prévia do material em texto
03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 1/187 Página 1 dentro do jogo Cano Ha Dese pDesenvolvimento de Página 2 Hacking de jogos 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 2/187 www.allitebooks.com Página 3 https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 3/187 www.allitebooks.com Página 4 JOGOS HACKING Desenvolvimento autônomo Bots para jogos online por Nick Cano São Francisco www.allitebooks.com Página 5 Hacking do jogo. Copyright © 2016 por Nick Cano. Todos os direitos reservados. Nenhuma parte deste trabalho pode ser reproduzida ou transmitida de qualquer forma ou por qualquer meio, eletrônico ou mecânico, incluindo fotocópia, gravação ou por qualquer armazenamento ou recuperação de informações sistema, sem a permissão prévia por escrito do proprietário dos direitos autorais e do editor. Impresso nos EUA Primeira impressão 20 19 18 17 16 1 2 3 4 5 6 7 8 9 ISBN-10: 1-59327-669-9 ISBN-13: 978-1-59327-669-0 Editor: William Pollock Editor de produção: Laurel Chun Ilustração da capa: Ryan Milner Design de interiores: Octopod Studios Editor de Desenvolvimento: Jennifer Griffith-Delgado Revisor Técnico: Stephen Lawler Editora de Texto: Rachel Monaghan Compositor: Laurel Chun Revisor: Paula L. Fleming Indexador: BIM Creatives, LLC Para obter informações sobre distribuição, traduções ou vendas a granel, entre em contato diretamente com a No Starch Press, Inc.: No Starch Press, Inc. 245 8th Street, San Francisco, CA 94103 telefone: 415.863.9900; info@nostarch.com www.nostarch.com Dados de Catalogação na Publicação da Biblioteca do Congresso Cano, Nick, autor. https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.nostarch.com 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 4/187 Hacking de jogos: desenvolvendo bots autônomos para jogos online / por Nick Cano. páginas cm Inclui índice. Resumo: "Um guia prático para hackear jogos de computador. Mostra aos programadores como dissecar o computador jogos e criar bots para alterar seu ambiente de jogo. Abrange os conceitos básicos de hacking de jogos, incluindo engenharia reversa, análise de código de montagem, manipulação de memória programática, persistente hacks, hacks responsivos e injeção de código. "- Fornecido pelo editor. ISBN 978-1-59327-669-0 - ISBN 1-59327-669-9 1. Agentes inteligentes (software de computador) 2. Programação para Internet. 3. Jogos da Internet - Programação. 4. Hacking. I. Título. QA76.76.I58C36 2016 005,8 - dc23 2015036294 No Starch Press e o logotipo No Starch Press são marcas registradas da No Starch Press, Inc. Outros os nomes de produtos e empresas mencionados aqui podem ser marcas comerciais de seus respectivos proprietários. Em vez de do que usar um símbolo de marca registrada em cada ocorrência de um nome de marca registrada, estamos usando apenas os nomes de forma editorial e em benefício do proprietário da marca, sem intenção de violação do marca comercial. As informações neste livro são distribuídas "no estado em que se encontram", sem garantia. Enquanto todas as precauções foi tomada na preparação deste trabalho, nem o autor nem a No Starch Press, Inc. deve ter qualquer responsabilidade para qualquer pessoa ou entidade com relação a qualquer perda ou dano causado ou alegadamente causado diretamente ou indiretamente pelas informações nele contidas. www.allitebooks.com Página 6 Sobre o autor Nick Cano escreveu seus primeiros scripts para servidores de jogos de código aberto quando tinha 12 anos e começou um negócio vendendo seus bots quando ele tinha 16. Ele tem faz parte da comunidade de hackers de jogos desde então e aconselha jogos desenvolvedores e designers sobre as práticas recomendadas para proteger seus jogos contra bots. Nick também tem anos de experiência na detecção e defesa contra malware, e ele falou em muitas conferências sobre sua pesquisa e Ferramentas. sobre o revisor técnico Stephen Lawler é o fundador e presidente de um pequeno software de computador e firma de consultoria de segurança. Ele tem trabalhado ativamente com informação segurança por mais de 10 anos, principalmente em engenharia reversa, análise de malware sis e pesquisa de vulnerabilidade. Ele era um membro do malware Mandiant equipe de análise e auxiliou com intrusões de computador de alto perfil que afetam várias empresas da Fortune 100. Stephen também desenvolveu e ensina o Aula prática de exploração ARM, que foi oferecida na BlackHat e várias outras conferências de segurança nos últimos cinco anos. www.allitebooks.com Página 7 https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 5/187 www.allitebooks.com Página 8 CONTEÚDOS RESUMIDOS Prefácio do Dr. Jared DeMott. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Agradecimentos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvii Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix PARTE 1: FERRAMENTAS DO COMÉRCIO Capítulo 1: Varredura de memória usando o Cheat Engine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Capítulo 2: Depurando jogos com OllyDbg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Capítulo 3: Reconhecimento com Process Monitor e Process Explorer. . . . . . . . . . . . . . . 49 PARTE 2: DISSECÇÃO DO JOGO Capítulo 4: Do Código à Memória: Um Manual Geral. . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Capítulo 5: Análise forense avançada de memória. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Capítulo 6: Lendo e gravando na memória do jogo. . . . . . . . . . . . . . . . . . . . . . . . 119 PARTE 3: PUPPETEERING DE PROCESSO Capítulo 7: Injeção de código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Capítulo 8: Manipulando o Fluxo de Controle em um Jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 6/187 PARTE 4: CRIANDO BOTS Capítulo 9: Usando a percepção extra-sensorial para afastar a névoa de guerra. . . . . . . . . . . . . . . . 189 Capítulo 10: Hacks responsivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Capítulo 11: Juntando tudo: Escrevendo Bots Autônomos. . . . . . . . . . . . . . . . . . . . . 221 Capítulo 12: Permanecendo Oculto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Índice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 www.allitebooks.com Página 9 www.allitebooks.com Página 10 CONTEÚDOS EM DEtAL PREFÁCIO pelo dr. Jared Demott xv acknOwLedGmenTS xvii https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 7/187 introdução xix Pré-requisitos para o leitor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . xx Uma breve história de hackeamento do jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xx Por que hackear jogos? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Como este livro está organizado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxii Sobre os recursos online. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xxiv Como usar este livro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xxiv PaRT 1 FERRAMENTAS DO COMÉRCIO 1 ScannGing memORy uSinG cHeaT enGine 3 Por que os scanners de memória são importantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Varredura de memória básica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Scanner de memória do Cheat Engine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Tipos de digitalização. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Executando sua primeira varredura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Próximas varreduras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Quando você não consegue obter um único resultado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Tabelas de trapaça. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Modificação de memória em jogos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Modificação manual com Cheat Engine. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Trainer Generator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Varredura de ponteiro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Cadeias de ponteiros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Fundamentos da varredura de ponteiro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Pointer Scanning with Cheat Engine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Rescanning do ponteiro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Ambiente de script Lua. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Procurando padrões de montagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Procurando Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 www.allitebooks.com Página 11 2 depurar jogos com OLLydbG 23 Uma breve olhada na interface do usuário do OllyDbg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Janela da CPU de OllyDbg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Visualizando e navegando no código de montagem de um jogo. . . . . . . . . . . . . . . . . . . 27 Visualizando e editando o conteúdo do registro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Visualizando e pesquisando a memória de um jogo. . . . . . . . . . . . . . . . . . . . . . . . . 29 Visualizando a Pilha de Chamadas de um Jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Criando Patches de Código. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Rastreamento através do código de montagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Motor de expressão de OllyDbg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Usando expressões em pontos de interrupção. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Usando operadores no Expression Engine. . . . . . . . . . . . . . . . . . . . . . . . . . 34 Trabalhando com elementos básicos de expressão. . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Acessando o conteúdo da memória com expressões. . . . . . . . . . . . . . . . . . . . . . . 36 Expressões OllyDbg em ação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Pausando a execução quando o nome de um jogador específico é impresso. . . . . . . . . . . . . 37 Pausando a execução quando a saúde do seu personagem diminui. . . . . . . . . . . . . . . 39 Plug-ins OllyDbg para hackers de jogos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Copiando o código de montagem com Asm2Clipboard. . . . . . . . . . . . . . . . . . . . . . . 42 Adicionando Cheat Engine ao OllyDbg com Cheat Utility. . . . . . . . . . . . . . . . . . . . 42 Controlando OllyDbg por meio da linha de comando. . . . . . . . . . . . . . . . . . . . . . 43 Visualizando o fluxo de controle com OllyFlow. . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3 RECONHECIMENTO COM MOnTOR DE PROCESSO e PROCESS EXPLOReR 49 Monitor de processo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Registrando eventos no jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Inspecionando Eventos no Log do Monitor de Processo. . . . . . . . . . . . . . . . . . . . . . . . . 52 Depurando um jogo para coletar mais dados. . . . . . . . . . . . . . . . . . . . . . . . . . 53 Process Explorer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Interface do usuário e controles do Process Explorer. . . . . . . . . . . . . . . . . . . . . . . 56 Examinando as propriedades do processo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Opções de manipulação de manipulação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Parte 2 DiSSecçãO do jogo https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 8/187 x Conteúdo em detalhe 4 FROm cOde to memORy: a GeneRaL PRimeR 65 Como as variáveis e outros dados se manifestam na memória. . . . . . . . . . . . . . . . . . . . . . . . . 66 Dados numéricos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 String Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Estruturas de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Página 12 Conteúdo em detalhe XI Sindicatos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Classes e tabelas de VF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Curso intensivo de montagem x86. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Sintaxe do comando. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Registros do processador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 A pilha de chamadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Instruções importantes do x86 para hack de jogos. . . . . . . . . . . . . . . . . . . . . . . . 89 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 96 5 FORENSICS DE MEMÓRIA AVANÇADA 97 Varredura de memória avançada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Deduzindo o propósito. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Encontrando a Saúde do Jogador com OllyDbg. . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Determinando novos endereços após as atualizações do jogo. . . . . . . . . . . . . . . . . . . 101 Identificando Estruturas Complexas em Dados de Jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A classe std :: string. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A classe std :: vector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 A classe std :: list. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 A classe std :: map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 6 Lendo FROm e ESCREVENDO A MEMÓRIA DO JOGO 119 Obtenção do identificador de processo do jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Obtenção de identificadores de processo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Trabalhando com OpenProcess (). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Acessando a memória. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Trabalhando com ReadProcessMemory () e WriteProcessMemory (). . . . . . . . . 122 Acessando um valor na memória com ReadProcessMemory () e WriteProcessMemory (). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Escrevendo funções de acesso à memória modelada. . . . . . . . . . . . . . . . . . . . . . . 123 Proteção de memória. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Diferenciando os atributos de proteção de memória do Windows x86. . . . . . . . . . . . . 125 Alterando a proteção da memória. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Randomização do Layout do Espaço de Endereço. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Desativando ASLR para simplificar o desenvolvimento de bots. . . . . . . . . . . . . . . . . . . . . . . . 128 Ignorando ASLR na produção. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 PaRT 3 PROCESS PuPPeTeeRinG 7 cOde inJecTiOn 133 Injetando Cavernas de Código com Injeção de Thread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Criando uma Caverna de Código de Montagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Traduzindo o Assembly para Shellcode. . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Página 13 Escrevendo a Caverna de Código na Memória. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Usando Injeção de Thread para Executar a Caverna de Código. . . . . . . . . . . . . . . . . . . . 137 Sequestrando o thread principal de um jogo para executar as cavernas de código. . . . . . . . . . . . . . . . . . . . 138 Construindo a Caverna do Código de Montagem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Gerando Código Shell de Esqueleto e Alocando Memória. . . . . . . . . . . . . . . . 140 Localizando e congelando o thread principal. . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Injetando DLLs para controle total. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Enganando um processo para carregar sua DLL. . . . . . . . . . . . . . . . . . . . . . . . . . 143 Acessando a memória em uma DLL injetada. . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Ignorando ASLR em uma DLL injetada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 8 MANIPULAÇÃO DO FLUXO DE CONTROLE EM UM JOGO 149 NOPing para remover código indesejado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Quando NOP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Como fazer NOP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Enganchando para redirecionar a execução do jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 9/187 xii Conteúdo em detalhe Call Hooking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 VF Table Hooking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 IAT Hooking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Jump Hooking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Aplicação de ganchos de chamada ao Adobe AIR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Acessando o RTMP Goldmine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Conectando a função encode () do RTMPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Conectando a função decode () do RTMPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Colocando os ganchos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Aplicando Jump Hooks e VF Hooks ao Direct3D. . . . . . . . . . . . . . . . . . . . . . . . . . . 175 O loop de desenho. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Encontrando o dispositivo Direct3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Escrevendo um gancho para EndScene (). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Escrevendo um Gancho para Reset (). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Qual é o próximo?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 PaRT 4 cReaTing bOTS 9 USANDO O EXTRASENSÓRIO PERCEPÇÃO PARA DESLIGAR Névoa da Guerra 189 Conhecimento prévio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Revelando detalhes ocultos com Lighthacks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Adicionando uma fonte de luz ambiente central. . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Aumentando a luz ambiente absoluta. . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Criando outros tipos de Lighthacks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Página 14 Revelando inimigos furtivos com Wallhacks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Renderizando com Z-Buffering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Criando um Wallhack Direct3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Impressão digital do modelo que você deseja revelar. . . . . . . . . . . . . . . . . . . . . . . 196 Obtendo um campo de visão mais amplo com o Zoomhacks. . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Usando NOPing Zoomhacks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Arranhar a superfície dos Zoomhacks de enganchamento. . . . . . . . . . . . . . . . . . . . . . 198 Exibindo dados ocultos com HUDs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 198 Criando um HUD de experiência. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Usando ganchos para localizar dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Uma Visão Geral de Outros Hacks ESP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 10 Hacks ReSPOnSive 203 Observando eventos do jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Memória de monitoramento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Detectando pistas visuais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Interceptando o tráfego da rede. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Execução de ações no jogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Emulando o teclado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Enviando pacotes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Amarrando as peças juntas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Fazendo o Curandeiro Perfeito. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Resistindo a ataques de controle de multidão do inimigo. . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Evitando Mana Desperdiçado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 11 PUTANDO TUDO JUNTO: MANUTENÇÃO DE BOTÕES AUTOMÁTICOS 221 Teoria de controle e hacking de jogos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Máquinas de estado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Combinando Teoria de Controle e Máquinas de Estado. . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Uma Máquina de Estado Básica do Curandeiro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Uma Máquina de Estado Hipotética Complexa. . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Correção de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Pathfinding com algoritmos de pesquisa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Duas técnicas de pesquisa comuns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Como os obstáculos interrompem as pesquisas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Um algoritmo de pesquisa A *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Quando as pesquisas A * são particularmente úteis. . . . . . . . . . . . . . . . . . . . . . . . . 240 Hacks automatizados comuns e interessantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Pilhagem com Cavebots. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Automatizando Combate com Warbots. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 10/187 Conteúdo em detalhe xiii Página 15 xiv Conteúdo em detalhe 12 STayinG Hidden 245 Software anti-cheat proeminente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 O PunkBuster Toolkit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Detecção baseada em assinatura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Capturas de tela. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Validação de hash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 O ESEA Anti-Cheat Toolkit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 O kit de ferramentas VAC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Varreduras de cache DNS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Validação binária. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Falso-positivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 O GameGuard Toolkit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Rootkit em modo de usuário. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Rootkit em modo kernel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 O Warden Toolkit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Gerenciando cuidadosamente a pegada de um bot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Minimizando a pegada de um bot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Mascarando sua pegada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Ensinando um bot a detectar depuradores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Técnicas anti-depuração. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Derrotando a detecção baseada em assinatura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Derrotando screenshots. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Derrotando a validação binária. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Derrotando um Rootkit anti-cheat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Derrotando Heurísticas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Pensamentos finais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 índice 265 Página 16 prefácio 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 11/187 Nick é ótimo. Primeiro nos demos bem de todas as maneiras certas e erradas, como você pode Imagine. Estou no campo da segurança há um tempo; ele é um pouco mais jovem. eu tenho tido a escolaridade, ao passo que ele não é muito para a faculdade. Eu sou um cara de fé, e ele é não. O interessante é que nada disso importa; nós tivemos uma explosão qualquer maneira. Idade, raça, gênero, graus - quando se trata de jogos, hacking e codificação, ninguém se importa! Nick faz isso. Ele é divertido. Ele é brilhante. Ele trabalha duro. E prob- habilmente mais pertinente: ele é um dos raros poucos que entendem o ção de jogos, hacking e codificação. Ele trabalhou neste nicho e criou bots lucrativos. Neste livro inédito, Nick explica o que significa separar jogos. Ele ensina as ferramentas e truques de investigação de software do comércio. Você aprenderá sobre os componentes internos do jogo, como separá-los e como modificar o jogo. Por exemplo, Nick ensina como evitar o anti-cheat para que você pode automatizar o jogo. Não seria legal ter seu próprio bot que coleta experiência, ouro, itens e muito mais - tudo enquanto você está fora? Você já se perguntou como os trapaceiros trapaceiam? Sempre quis remendar ou proteger seu jogo? Pegue um café, abra seu laptop e divirta-se. Bênçãos para você e seus, Dr. Jared DeMott Especialista em segurança e construtor de software Página 17Página 18 AGRADECIMENTOS Escrever este livro foi uma jornada incrível,e eu não poderia ter feito isso sozinho. No Starch Press tem sido extremamente favorável e trabalhado em estreita colaboração comigo para levar este livro do conceito à realidade. Em particular, eu gostaria de agradeço a minha editora de desenvolvimento, Jennifer Griffith-Delgado, e meu produtor editora de certificação, Laurel Chun. Bill Pollock, Tyler Ortman, Alison Law e o o resto da equipe da No Starch são pessoas maravilhosas, e estou feliz por ter trabalhei com eles. Agradecimentos à editora Rachel Monaghan, revisora Paula L. Fleming, e revisor técnico Stephen Lawler. Agradeço também aos meus amigos Cavitt “Synt4x” Glover e Vadim Kotov, que se deram ao trabalho de folhear alguns capítulos antes da submissão, e a Jared DeMott por escrever o prefácio do livro. Eu gostaria de agradecer a todas as pessoas no TPForums que me acolheram quando eu era apenas uma criança ingênua e me ajudou a aprender como hackear jogos. Em particular, Devo meus agradecimentos a Joseph “jo3bingham” Bingham, Ian Obermiller e jerêmica, que teve uma influência significativa em minha progressão como hacker, e ao fundador do TPForums, Josh “Zyphrus” Hartzell, que me ajudou a encontrar meu confiança e habilidades quando meu futuro parecia mais sombrio. Agradeço também a toda a minha equipe do fórum e a todos os clientes que já usei meus bots. E, finalmente, graças à minha família, amigos e colegas, que têm sido divertidos e solidários e ajudaram a me transformar no homem que sou hoje. Página 19Página 20 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 12/187 Introdução Um equívoco comum no mundo de jogos online é a ideia de que o único o jogo que você pode jogar é o do título. Na verdade, os hackers gostam de jogar o jogo que se esconde atrás da cortina: um jogo de gato e rato de inteligência entre eles e os desenvolvedores do jogo. Enquanto hackers de jogos trabalham para fazer engenharia reversa de binários de jogos, automatizar aspectos de jogo e modificar ambientes de jogo, combate de desenvolvedores de jogos as ferramentas projetadas por hackers (normalmente chamadas de bots ) usando anti-reversão técnicas, algoritmos de detecção de bot e mineração de dados heurística. À medida que a batalha entre hackers e desenvolvedores de jogos progredia, o métodos técnicos implementados por ambas as partes, muitos dos quais se assemelham técnicas utilizadas por desenvolvedores de malware e fornecedores de antivírus - têm evoluiu, tornando-se mais complexo. Este livro destaca a luta levantada por hackers de jogos e os métodos avançados que eles desenvolveram para manipular jogos atrasados e, ao mesmo tempo, iludindo desenvolvedores de jogos no escuro usuários de seu próprio software. Página 21 Embora o livro se concentre em ensinar você a desenvolver ferramentas que provavelmente ser considerado um incômodo ou até mesmo malicioso por empresas de jogos, você descobrirá que muitas das técnicas são úteis para o desenvolvimento de ferramentas que são perfeitamente benignos e neutros. Além disso, o conhecimento de como essas técnicas são implementadas é a chave para o trabalho dos desenvolvedores de jogos para evitar seu uso. Pré-requisitos para o leitor Este livro não tem como objetivo ensinar desenvolvimento de software e, portanto, pressupõe que você tenha, no mínimo, um sólido back-back de desenvolvimento de software chão. Este histórico deve incluir familiaridade com o Windows nativo desenvolvimento baseado, bem como experiência leve com desenvolvimento de jogos e gerenciamento de memória. Embora essas habilidades sejam suficientes para você seguir neste livro, a experiência com x86 assembly e componentes internos do Windows irá garantir que os detalhes de implementações mais avançadas não são perdidos por você. Além disso, uma vez que todos os hacks avançados discutidos neste livro dependem na injeção de código, a capacidade de escrever código em uma linguagem nativa como C ou C ++ é uma obrigação. Todo o código de exemplo neste livro é escrito em C ++ e pode ser compilado com o Microsoft Visual C ++ Express Edition. (Você pode baixe o MSVC ++ Express Edition em http://www.visualstudio.com/en-US/ produtos / visual-studio-express-vs .) Nota Outras linguagens que compilam para código nativo, como Delphi, também são capazes de injetar , mas não os discutirei neste livro. um breve histórico de hackers em jogos Desde o início dos jogos online para PC no início dos anos 1980, uma guerra contínua de A inteligência entre hackers e desenvolvedores de jogos vem ocorrendo. Esta luta aparentemente interminável levou os desenvolvedores de jogos a dedicar 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 13/187 xx Introdução incontáveis horas para evitar que hackers desmontem seus jogos e lubrificação entre as engrenagens. Esses hackers, que revidam com seus implementações furtivas sofisticadas, têm muitas motivações: personalizadas gráficos, melhor desempenho, facilidade de uso, jogo autônomo, recursos no jogo aquisição e, claro, lucro na vida real. O final dos anos 1990 e o início dos anos 2000 foram a era de ouro do hacking de jogos, quando os jogos online para PC se tornaram avançados o suficiente para atrair grandes multidões mas ainda eram simples o suficiente para facilmente fazer engenharia reversa e manipular. Jogos online que surgiram nessa época, como Tibia (janeiro de 1997), Runescape (janeiro de 2001) e Ultima Online (setembro de 1997) foram fortemente direcionado por desenvolvedores de bot. Os desenvolvedores desses jogos e outros como eles ainda lutam hoje para controlar as enormes comunidades de desenvolvimento de bots opers e usuários de bot. A falta de ação dos desenvolvedores de jogos e dos hackers Página 22 Introdução xxi a tenacidade não só destruiu completamente as economias dos jogos, mas também produziram uma indústria próspera com fins lucrativos focada em bot desenvolvimento e defesa de bot. Nos anos desde a idade de ouro, as empresas de jogos mais maduras começou a levar a defesa de bots muito a sério. Essas empresas agora têm dedi- equipes designadas com foco no desenvolvimento de sistemas de prevenção de bots, e muitos também vê os bots como uma questão legal e não hesitará em banir os jogadores que usam bots e processar os desenvolvedores de bot que os forneceram. Como resultado, muitos jogos hackers foram forçados a desenvolver técnicas avançadas de furtividade para manter seus usuários estão seguros. Esta guerra continua, e os números de ambos os lados da luta irão contra continua a crescer à medida que os jogos online se tornam mais prevalentes no futuro anos. Os principais desenvolvedores de jogos estão perseguindo hackers com determinação infinita. ção, até mesmo atacando alguns gigantes do hacking de jogos com milhões de dólares ações judiciais. Isso significa que os hackers de jogos que levam seus negócios a sério devem ter como alvo empresas de jogos menores ou comercializar anonimamente seus produtos das sombras, a fim de escapar da acusação. Para o previsto futuro, hacking de jogos e desenvolvimento de bots continuarão a crescer em uma indústria maior e mais lucrativa para os hackers de jogos ousados o suficiente para assumir os riscos. porque Hack Games? Além de seu atrativo óbvio e natureza desafiadora, o hacking de jogos alguns objetivos práticos e lucrativos. Todos os dias, milhares de novatos programadores experimentam hacking de jogos em pequena escala como uma forma de automatizar tarefas monótonas ou executar ações servis. Esses script kiddies usarão ferramentas de automação como AutoIt para seus pequenos hacks relativamente inofensivos. Sobre por outro lado, hackers de jogos profissionais, apoiados por seus grandes kits de ferramentas e anos de experiência em programação, dedicará centenas de horas ao desenvolvimento de hacks de jogos avançados. Esses tipos de hacks de jogos, que são o foco deste livro, muitas vezes são criados com a intenção de tornar grandes quantias de dinheiro. Os jogossão uma grande indústria que gerou US $ 22,4 bilhões em vendas em 2014, de acordo com a Entertainment Software Association. Das dezenas de milhões de jogadores que jogam diariamente, 20 por cento jogam massivamente multi jogos de RPG online (MMORPGs). Esses MMORPGs frequentemente tem milhares de jogadores que negociam bens virtuais dentro do próspero jogo economias. Os jogadores muitas vezes precisam de recursos no jogo e estão dispostos a compre esses ativos com dinheiro do mundo real. Consequentemente, jogadores de MMORPG acabam desenvolvendo grandes comunidades que fornecem serviços ouro por dinheiro. Esses serviços muitas vezes vão tão longe quanto a aplicação de taxas de câmbio do jogo ouro para moedas do mundo real. Para tirar vantagem disso, os hackers de jogos criarão bots que são capazes de cultivar ouro automaticamente e nivelar personagens. Então, dependendo em seu objetivo, os hackers criarão enormes fazendas de ouro e venderão seus Página 23 lucros no jogo, ou aperfeiçoe e venda seu software para jogadores que desejam obter níveis e ouro perfeitamente com o mínimo de interferência. Devido ao enormes comunidades em torno de MMORPGs populares, esses hackers de jogos pode fazer entre seis e sete dígitos anualmente. Embora os MMORPGs forneçam a maior superfície de ataque para hackers, eles têm um público relativamente pequeno em geral. Cerca de 38 por cento dos jogadores favorecem jogos de estratégia em tempo real (RTS) e enormes jogos de arena de batalha online (MOBA), e outros 6% jogam principalmente jogos de tiro em primeira pessoa (FPS). Esses jogos competitivos jogador versus jogador (PvP) representam coletivamente 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 14/187 xxii Introdução 44 por cento do mercado de jogos e oferece grandes recompensas para determinados hackers de jogos. Os jogos PvP costumam ser episódicos por natureza; cada partida é um jogo isolado, e normalmente não há muita progressão lucrativa para o uso de bots fora do teclado (AFK). Isso significa que, em vez de administrar fazendas de ouro ou criações usando bots autônomos para aumentar o nível dos personagens, os hackers criarão bots reativos que auxiliam os jogadores em combate. Esses jogos altamente competitivos são sobre habilidade e tática, e a maioria jogadores participam para provar suas habilidades para si próprios e para os outros. Como um conseqüência, o número de pessoas procurando bots para jogos do tipo PvP é substancialmente mais baixo do que você encontraria no mundo pesado dos MMORPGs. No entanto, os hackers ainda podem ganhar muito dinheiro vendendo seus bots PvP, que geralmente são muito mais fáceis de desenvolver do que bots autônomos completos. Como este livro está organizado Este livro está dividido em quatro partes, cada uma das quais se concentra em um núcleo diferente aspecto do hack de jogos. Na Parte 1: Ferramentas do Comércio , você receberá uma caixa cheia de ferramentas para ajudá-lo a hackear jogos. • Capítulo 1: Varredura de memória usando o Cheat Engine irá ensiná-lo como para verificar a memória de um jogo em busca de valores importantes usando o Cheat Engine. • No Capítulo 2: Depurando jogos com OllyDbg , você obterá um travamento curso de depuração e engenharia reversa com OllyDbg. O habilidades que você aprende aqui serão extremamente úteis quando você começar a fazer bots avançados e injeção de código. • Para finalizar, Capítulo 3: Reconhecimento com Monitor de Processo e Process Explorer , irá ensiná-lo a usar duas ferramentas de reconhecimento para inspecionar como os jogos interagem com arquivos, outros processos, a rede e o sistema operacional. Os recursos online para cada capítulo da Parte 1 incluem binários personalizados Eu criei para lhe dar um lugar seguro para testar e aprimorar seus recém-descobertos Habilidades. Quando estiver confortável com cada chave e martelo, Parte 2: Jogo Dissecação , vai te ensinar como entrar no capô e descobrir como jogos funcionam. Página 24 • No Capítulo 4: Do Código à Memória: Um Manual Geral , você aprenderá como o código-fonte e os dados de um jogo se parecem, uma vez compilados em um binário do jogo. • Capítulo 5: Análise de memória avançada baseia-se no conhecimento você aprenderá com o Capítulo 4. Você aprenderá como escanear a memória e usar depuração para localizar perfeitamente valores de memória complicados e dissecar classes e estruturas complexas. • Finalmente, o Capítulo 6: Lendo e escrevendo na memória do jogo mostra você como ler e modificar dados em um jogo em execução. Estes capítulos fornecem muitos exemplos de código de prova de conceito em profundidade que você pode usar para verificar tudo o que lê. Na Parte 3: Marionete de processo , você se tornará um titereiro enquanto você aprenda a transformar qualquer jogo em uma marionete. • Aproveitando as habilidades das Partes 1 e 2, Capítulo 7: Injeção de Código descreve como injetar e executar seu próprio código no espaço de endereço de um jogo. • Depois de dominar a injeção, Capítulo 8: Manipulando o fluxo de controle em um jogo irá ensiná-lo a usar injeção para interceptar, modificar ou desativa qualquer chamada de função feita por um jogo, e irá encerrar com alguns exemplos úteis do mundo real para as bibliotecas comuns Adobe AIR e 3D direto. Para complementar suas aulas de marionetes, estes capítulos são acompanhados contado por milhares de linhas de código pronto para produção que você pode usar como um biblioteca padrão para um futuro bot. Na Parte 4: Criando Bots , você verá como combinar sua caixa de ferramentas, dis- habilidades de seção, habilidades de manipulador de marionetes e formação em engenharia de software para criar bots poderosos. • Capítulo 9: Usando a percepção extra-sensorial para afastar a névoa de guerra explora maneiras de fazer um jogo exibir informações úteis que não são exposto por padrão, como a localização de inimigos ocultos e o quantidade de experiência que você ganha por hora. • Capítulo 10: Hacks responsivos mostra padrões de código que você pode usar para detectar eventos no jogo, como diminuição da saúde, e fazer bots que reage a esses eventos mais rápido do que jogadores humanos. • Capítulo 11: Juntando tudo: revelando como escrever robôs autônomos como bots que jogam jogos sem interação humana funcionam. Automatizado 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 15/187 Introdução xxiii bots combinam teoria de controle, máquinas de estado, algoritmos de pesquisa emodelos matemáticos, e este capítulo é um curso intensivo sobre esses tópicos. • No Capítulo 12: Permanecendo Oculto , você aprenderá sobre alguns dos técnicas de nível que você pode usar para escapar e evadir qualquer sistema que poderia interferir com seus bots. Página 25 xxiv Introdução Como você provavelmente deve esperar, esses capítulos têm muitos exemplos código. Alguns dos hacks mostrados nesta parte são construídos no código de exemplo de capítulos anteriores. Outros exploram padrões de design simples e sucintos você pode usar para criar seus próprios bots. Depois de terminar todos os quatro partes deste livro, você será enviado ao mundo virtual com seu novo superpotência. sobre os recursos online Você encontrará muitos recursos adicionais para este livro em https: //www.nostarc h .com / gamehacking / . Esses recursos incluem binários compilados para testar seu habilidades, uma quantidade considerável de código de exemplo e alguns trechos de código de hack de jogos pronto para produção. Esses recursos andam de mãos dadas com o livro, e ele realmente não está completo sem eles, então certifique-se de baixe-os antes de continuar. Como usar este livro Este livro deve ser usado principalmente como um guia para você começar no hack de jogos. A progressão é tal que o conteúdo de cada capítulo ter apresenta novas habilidades e habilidades que se baseiam em todos os capítulos anteriores. Conforme você completa os capítulos, encorajo você a brincar com o código deexemplo e teste suas habilidades em um jogo real antes de continuar a leitura. Isso é importante, pois alguns tópicos cobertos terão casos de uso que não se tornam amasse até estar a 3 metros de profundidade na lama. Depois de terminar o livro, espero que ainda possa ser útil para você como um manual de campo. Se você encontrar alguma estrutura de dados sobre a qual não tem certeza, talvez os detalhes no Capítulo 5 podem ajudar. Se você fizer engenharia reversa no mapa de um jogo para- e estão prontos para criar um pathfinder, você pode sempre voltar para o Capítulo 11, estude o conteúdo e use parte do código de exemplo como ponto de partida. Embora seja impossível prever todos os problemas que você pode enfrentar quando você está hackeando, tentei garantir que você encontrará algumas respostas dentro essas páginas. UMA OBSERVAÇÃO DO PuBlIsHEr Este livro não tolera a pirataria, violando o DMCA, infringindo direitos autorais, ou quebrar os Termos de Serviço do jogo. Hackers de jogos foram banidos de jogos pelo resto da vida, processados por milhões de dólares e até presos por seu trabalho. Página 26 Parte 1 https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=https://www.nostarch.com/gamehacking https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=https://www.nostarch.com/gamehacking 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 16/187 TOOls DO COMÉRCIO Página 27Página 28 1 ESCANEANDO MEMÓRIA USANDO O CHEAt ENGINE Os melhores hackers de jogos do mundo gastam anos personalizando arsenais expansivos com ferramentas personalizadas. Kits de ferramentas tão potentes permitem que esses hackers analisem perfeitamente jogos, protótipos de hacks sem esforço e de forma eficaz desenvolver bots. No fundo, no entanto, cada kit exclusivo é construído a partir da mesma usina de quatro peças: uma memória scanner, um depurador em nível de assembler, um monitor de processo tor e um editor hexadecimal. A varredura de memória é a porta de entrada para hackear jogos, e este capítulo ensiná-lo sobre o Cheat Engine, um poderoso scanner de memória que procura um memória operacional do jogo (que vive na RAM) para valores como o do jogador nível, saúde ou dinheiro no jogo. Primeiro, vou me concentrar na digitalização de memória básica, modificação de memória e varredura de ponteiro. Depois disso, vamos mergulhar em O poderoso mecanismo de script Lua embutido do Cheat Engine. 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 17/187 Página 29 4 Capítulo 1 Nota Você pode obter o Cheat Engine em http://www.cheatengine.org/ . Preste atenção ao executar o instalador porque ele tentará instalar algumas barras de ferramentas e outros bloat- porcelana. Você pode desativar essas opções, se desejar. porque os scanners de memória são importantes Saber o estado de um jogo é fundamental para interagir com a inteligência do jogo Ligeiramente, mas ao contrário dos humanos, o software não pode determinar o estado de um jogo simplesmente olhando para o que está na tela. Felizmente, por baixo de todos os estímulos produzidos por um jogo, a memória de um computador contém um puramente representação numérica do estado do jogo - e os programas podem números de suporte facilmente. Hackers usam scanners de memória para encontrar esses valores em memória, e então em seus programas, eles lêem a memória nestes locais para entender o estado do jogo. Por exemplo, um programa que cura jogadores quando eles caem abaixo de 500 saúde precisa saber como fazer duas coisas: monitorar a saúde atual de um jogador e lançar um feitiço de cura. O primeiro requer acesso ao estado do jogo, enquanto o último pode exigir apenas que um botão seja pressionado. Dado o local ção onde a saúde de um jogador é armazenada e a forma de ler a memória de um jogo, o programa seria parecido com este pseudocódigo: // faça isso em algum loop saúde = readMemory (jogo, HEALTH_LOCATION) if (saúde <500) pressione o botão (HEAL_BUTTON) Um scanner de memória permite que você encontre HEALTH_LOCATION para que seu software ware pode consultá-lo para você mais tarde. Varredura de memória básica O scanner de memória é a ferramenta mais básica, porém mais importante, para o aspirante a hacker de jogos. Como em qualquer programa, todos os dados na memória de um jogo reside em um local absoluto denominado endereço de memória . Se você pensa no memória como uma matriz de bytes muito grande, um endereço de memória é um índice que aponta a um valor nessa matriz. Quando um scanner de memória é instruído a encontrar algum valor x (chamado de valor de varredura , porque é o valor que você está procurando) em um jogo memória, o scanner percorre a matriz de bytes procurando por qualquer valor igual a x . Cada vez que encontra um valor correspondente, ele adiciona o índice do corresponder a uma lista de resultados. Devido ao tamanho da memória de um jogo, no entanto, o valor de x pode aparecem em centenas de locais. Imagine que x é a saúde do jogador, que atualmente é 500. Nosso x detém exclusivamente 500 , mas 500 não é detido exclusivamente por x , portanto, uma varredura para x retorna todas as variáveis com um valor de 500 . Quaisquer endereços não relacionados ax são, em última análise, desordem; eles compartilham um valor de 500 com x apenas por Página 30 chance. Para filtrar esses valores indesejados, o scanner de memória permite que você para verificar novamente a lista de resultados, removendo endereços que não são mais os mesmos valor como x , se x ainda é 500 ou mudou. Para que essas novas digitalizações sejam eficazes, o estado geral do jogo deve têm entropia significativa - uma medida de desordem. Você aumenta a entropia em mudando o ambiente do jogo, muitas vezes movendo-se, matando cria- ou alternar entre personagens. Conforme aumenta a entropia, os endereços não relacionados são menos provável de continuar a manter arbitrariamente o mesmo valor, e dado o suficiente entropia, algumas novas varreduras devem filtrar todos os falsos positivos e deixá-lo com o verdadeiro endereço de x . Scanner de memória do mecanismo de trapaça Esta seção fornece um tour pelas opções de verificação de memória do Cheat Engine, que o ajudará a rastrear os endereços dos valores de estado do jogo em mem- ory. Vou lhe dar a chance de experimentar o scanner em “Edição de memória básica” na página 11 ; por enquanto, abra o Cheat Engine e dê uma olhada. O scanner de memória está firmemente encapsulado em sua janela principal, conforme mostrado em Figura 1-1. 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 18/187 Verificando a memória usando o Cheat Engine 5 Figura 1-1: Tela principal do Cheat Engine Para começar a escanear a memória de um jogo, clique no ícone Anexar ❶ para anexar a um processo e, em seguida, insira o valor de varredura (referido como x em nosso conceito scanner digital) que deseja localizar ➌. Ao anexar a um processo, estamos dizendo www.allitebooks.com Página 31 6 Capítulo 1 Cheat Engine para se preparar para operar nele; neste caso, essa operação é um Varredura. Também ajuda a informar ao Cheat Engine que tipo de varredura executar, pois irei descartar xingar próximo. Tipos de digitalização O Cheat Engine permite que você selecione duas diretivas de varredura diferentes, chamadas Scan Tipo e tipo de valor ➍. Tipo de digitalização informa ao scanner como comparar o seu valor de varredura com a memória sendo varrida usando uma das seguintes varreduras tipos: Valor exato Retorna endereços apontando para valores iguais ao valor de varredura. Escolha esta opção se o valor que você está procurando não for mudança durante a varredura; saúde, mana e nível normalmente caem neste categoria. Endereços Bigger Than Returns apontando para valores maiores que o valor de varredura. Esta opção é útil quando o valor que você está procurando é aumentando constantemente, o que geralmente acontece com temporizadores. Menor que retornaendereços apontando para valores menores que o valor de varredura. Como Bigger Than, esta opção é útil para encontrar temporizadores (neste caso, aqueles com contagem regressiva em vez de crescente). Valor entre endereços de retorno que apontam para valores em uma varredura faixa de valor. Esta opção combina Bigger Than e Smaller Than, exibindo uma caixa de valor de varredura secundária que permite que você insira um valor intervalo menor de valores. Valor inicial desconhecido Retorna todos os endereços na memória de um programa, permitindo novas varreduras para examinar todo o intervalo de endereços em relação ao seu valores iniciais. Esta opção é útil para encontrar tipos de itens ou criaturas, já que você nem sempre saberá os valores internos que os desenvolvedores de jogos usado para representar esses objetos. A diretiva Value Type diz ao scanner do Cheat Engine que tipo de variável que está procurando. Executando sua primeira varredura Assim que as duas diretivas de varredura forem definidas, clique em Primeira Varredura ➋ para executar uma verifique os valores e o scanner preencherá a lista de resultados ❺. Qualquer verde endereços nesta lista são estáticos , o que significa que devem permanecer persistentes entre reinicializações do programa. Os endereços listados em preto residem em alo- memória designada , memória que é alocada em tempo de execução. Quando a lista de resultados é preenchida pela primeira vez, mostra o endereço e valor de tempo de cada resultado. Cada nova varredura também mostrará o valor de cada resultado durante a verificação anterior. (Quaisquer valores em tempo real exibidos são atualizados em um intervalo que você pode definir em Editar> Configurações> Configurações gerais> Atualizar intervalo.) Página 32 https://translate.google.com/translate?hl=pt-BR&prev=_t&sl=en&tl=pt&u=http://www.allitebooks.org 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 19/187 Verificando a memória usando o Cheat Engine 7 Próximas varreduras Uma vez que a lista de resultados é preenchida, o scanner habilita o Next Scan ➋ but- ton, que oferece seis novos tipos de digitalização. Esses tipos de verificação adicionais permitem que você para comparar os endereços na lista de resultados com seus valores na anterior scan, o que o ajudará a restringir o endereço que contém o estado do jogo valor que você está procurando. Eles são os seguintes: Aumento de valor Retorna endereços apontando para valores que têm aumentou. Isso complementa o tipo de verificação Bigger Than mantendo o mesmo valor mínimo e removendo qualquer endereço cujo valor tenha diminuiu. Valor aumentado por endereços de retorno que apontam para valores que têm aumentado por um montante definido. Este tipo de varredura geralmente retorna muito menos falsos positivos, mas você só pode usá-los quando sabe exatamente quanto um valor aumentou. Valor diminuído Esta opção é o oposto de valor aumentado. Valor diminuído em Esta opção é o oposto de Valor aumentado em. Valor alterado Retorna endereços apontando para valores que têm mudado. Este tipo é útil quando você sabe que um valor sofrerá mutação, mas você não tem certeza de como. Valor inalterado Retorna endereços apontando para valores que não mudado. Isso pode ajudá-lo a eliminar falsos positivos, uma vez que você pode facilmente cria uma grande quantidade de entropia e, ao mesmo tempo, garante o valor desejado continua o mesmo. Normalmente, você precisará usar vários tipos de verificação para restringir uma grande lista de resultados e encontre o endereço correto. Eliminar falsos positivos é muitas vezes uma questão de criar entropia corretamente (conforme descrito em "Memória Básica Scanning "na página 4), taticamente mudando suas diretivas de varredura, bravamente pressionando Próxima digitalização e, em seguida, repetindo o processo até que você tenha um único endereço restante. Quando você não consegue obter um único resultado Às vezes, é impossível apontar um único resultado no Cheat Engine, em caso em que você deve determinar o endereço correto por meio de experimentos ção Por exemplo, se você está procurando a saúde do seu personagem e não pode reduzi-lo a menos de cinco endereços, você pode tentar modificar o valor de cada endereço (conforme discutido em “Modificação manual com fraude Motor ”na página 8) até ver a alteração do visor de integridade ou outro os valores mudam automaticamente para o que você definiu. Tabelas de trapaça Depois de encontrar o endereço correto, você pode clicar duas vezes nele para adicioná-lo ao o painel da mesa de trapaça ➏; endereços no painel da tabela de cheat podem ser modificados, assistidos e salvos em arquivos de tabela de trapaça para uso futuro. Página 33 Para cada endereço no painel da tabela de cheat, você pode adicionar uma descrição por clicando duas vezes na coluna Descrição, e você pode adicionar uma cor com o botão direito clicando e selecionando Alterar cor. Você também pode exibir os valores de cada endereço em formato hexadecimal ou decimal clicando com o botão direito e selecionando Mostrar como hexadecimal ou Mostrar como decimal, respectivamente. Por último, você pode altere o tipo de dados de cada valor clicando duas vezes na coluna Tipo, ou você pode alterar o próprio valor clicando duas vezes na coluna Valor. Uma vez que o objetivo principal do painel da tabela de truques é permitir um jogo hacker para rastrear endereços ordenadamente, ele pode ser salvo e carregado dinamicamente. Vá para Arquivo > Salvar ou Arquivo > Salvar como para salvar o painel da tabela de truques atual para um arquivo de documento .ct contendo cada endereço com seu tipo de valor, descrição, cor de exibição e formato de exibição. Para carregar os documentos .ct salvos , vá para Arquivo > Carregar . (Você encontrará muitas tabelas de truques prontas para jogos populares em http://cheatengine.org/tables.php .) Agora que descrevi como procurar um valor de estado do jogo, discutirei como você pode mudar esse valor quando você sabe onde ele mora na memória. modificação de memória em jogos Os bots enganam um sistema de jogo, modificando os valores da memória no estado do jogo para lhe dar muito dinheiro no jogo, modifique a saúde do seu personagem, mude a posição do seu personagem e assim por diante. Na maioria dos jogos online, um char- os sinais vitais do ator (como saúde, mana, habilidades e posição) são mantidos na memória mas são controlados pelo servidor de jogo e retransmitidos para seu cliente de jogo local pela Internet, portanto, modificar esses valores durante o jogo online é apenas cosmético e não afeta os valores reais. (Qualquer modificação de memória útil para um jogo online requer um hack muito mais avançado que está além Recursos do Cheat Engine.) Em jogos locais sem servidor remoto, no entanto, você pode manipular todos esses valores à vontade. Modificação manual com Cheat Engine 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 20/187 8 Capítulo 1 Usaremos o Cheat Engine para entender como a mágica da modificação de memória trabalho. Para modificar a memória manualmente, faça o seguinte: 1. Anexe o Cheat Engine a um jogo. 2. Procure o endereço que deseja modificar ou carregue uma tabela de truques que contém. 3. Clique duas vezes na coluna Valor do endereço para abrir uma entrada prompt onde você pode inserir um novo valor. 4. Se você quiser ter certeza de que o novo valor não pode ser substituído, selecione o caixa sob a coluna Ativo para congelar o endereço, o que tornará O Cheat Engine continua escrevendo o mesmo valor de volta para ele toda vez que alterar. Página 34 Verificando a memória usando o Cheat Engine 9 Este método faz maravilhas para hacks rápidos e sujos, mas constantemente alterar os valores manualmente é complicado; uma solução automatizada seria muito mais atraente. Trainer Generator O gerador de treinamento do Cheat Engine permite automatizar toda a memória processo de modificação sem escrever nenhum código.Para criar um treinador (um bot simples que vincula ações de modificação de memória para as teclas de atalho do teclado), vá para Arquivo > Criar script Lua de treinador genérico de mesa . Isso abre uma caixa de diálogo do gerador do Trainer semelhante à mostrada em Figura 1-2. Figura 1-2: caixa de diálogo do gerador do Cheat Engine Trainer Existem vários campos a serem modificados aqui: Nome do processo O nome do executável que o treinador deve anexar para. Este é o nome mostrado na lista de processos quando você anexa com Cheat Engine, e deve ser preenchido automaticamente com o nome do pro cess Cheat Engine está conectado. Treinador de pop-up ao pressionar a tecla Opcionalmente, habilita uma tecla de atalho definido inserindo uma combinação de teclas na caixa abaixo da caixa de seleção - para exibir a janela principal do treinador. Título O nome do seu treinador, que será exibido em seu inter- Rosto. Isso é opcional. Sobre o texto A descrição do seu treinador, a ser exibida no interface; isso também é opcional. Intervalo de congelamento (em milissegundos) O intervalo durante o qual um congelamento operação substitui o valor. Você geralmente deve deixar isso em 250, como intervalos mais baixos podem esgotar recursos e valores mais altos podem ser muito lentos. Página 35 Depois que esses valores forem configurados, clique em Adicionar tecla de atalho para configurar uma chave sequência para ativar seu treinador. Você será solicitado a selecionar um valor da sua tabela de truques. Insira um valor e você será levado a um Conjunto / Alteração tela de tecla de atalho semelhante à Figura 1-3. 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 21/187 10 Capítulo 1 О θ θ Θ Figura 1-3: Tela de tecla de atalho de configuração / alteração do mecanismo de cheat Nesta tela, coloque o cursor na caixa chamada Digite as teclas que você deseja definir a tecla de atalho para ❶ e insira a combinação de teclas desejada. Próximo, escolha a ação desejada no menu suspenso ➋; suas opções deve aparecer na seguinte ordem: Alternar congelamento Alterna o estado de congelamento do endereço. Alternar congelar e permitir aumento Alterna o estado de congelamento do endereço, mas permite que o valor aumente. Sempre que o valor diminui, o treinador o substitui com seu valor anterior. Valores aumentados irão não ser sobrescrito. Alternar congelar e permitir diminuição O oposto de Alternar congelar e permitir o aumento. Congelar Define o endereço como congelado se ainda não estiver congelado. Descongelar Descongela o endereço se ele estiver congelado. Definir valor para Define o valor para o que você especificar na caixa de valor ➌. Diminuir o valor com Diminui o valor na quantidade que você especificar em a caixa de valor ➌. Aumentar o valor com Faz o oposto de Diminuir o valor com. Finalmente, você pode definir uma descrição para a ação ➍. Clique em Aplicar e depois OK , e sua ação aparecerá na lista no gerador do Trainer tela. Neste ponto, o Cheat Engine executa o treinador em segundo plano, e você pode simplesmente pressionar as teclas de atalho que configurou para executar o mem- ory ações. Página 36 Para salvar seu treinador em um executável portátil, clique em Gerar treinador . Executar este executável após o jogo ser iniciado irá anexar o seu treinador para o jogo para que você possa usá-lo sem iniciar o Cheat Engine. Agora que você conhece o scanner de memória do Cheat Engine e gerador de treinador, tente modificar alguma memória você mesmo. Varredura de ponteiro Como mencionei, os jogos online geralmente armazenam valores em alocados dinamicamente memória. Embora os endereços que fazem referência à memória dinâmica sejam inúteis para nós em e por si mesmos, algum endereço estático sempre apontará para outro endereço, que por sua vez aponta para outro, e assim por diante, até que a cauda da corrente aponte para a memória dinâmica em que estamos interessados. O Cheat Engine pode localizar esses cadeias usando um método chamado varredura de ponteiro . Nesta seção, vou apresentá-lo às cadeias de ponteiros e, em seguida, descrever como a varredura de ponteiro funciona no Cheat Engine. Quando você tem um bom domínio da interface do usuário, você pode obter alguma experiência prática em “Ponteiro Digitalizando ”na página 18. Cadeias de Ponteiros A cadeia de deslocamentos que acabei de descrever é chamada de cadeia de ponteiros e parece como isso: lista <int> cadeia = { início , deslocamento1 , deslocamento2 [ , ... ]} EDIÇÃO DE MEMÓRIA BÁSICA Baixe os arquivos deste livro em https://www.nostarch.com/gamehacking/ , e execute o arquivo BasicMemory.exe . Em seguida, inicie o Cheat Engine e conecte-o ao o binário. Então, usando apenas Cheat Engine, encontre os endereços para x- e Coordenadas y da bola cinza. (Dica: use o tipo de valor 4 bytes.) Depois de encontrar os valores, modifique-os para colocar a bola em cima do quadrado preto. O jogo irá informá-lo assim que obtiver sucesso no display- com o texto “Bom trabalho!” (Dica: Cada vez que a bola é movida, sua posição - armazenada como um inteiro de 4 bytes - nesse plano é alterado por 1. Além disso, tente procurar apenas por resultados estáticos [verdes].) 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 22/187 Verificando a memória usando o Cheat Engine 11 O primeiro valor nesta cadeia de ponteiros ( início ) é chamado de ponteiro de memória . Seu um endereço que inicia a cadeia. Os valores restantes ( deslocamento1 , deslocamento2 e assim por diante) crie a rota para o valor desejado, chamado de caminho de ponteiro . Página 37 12 Capítulo 1 Este pseudocódigo mostra como uma cadeia de ponteiro pode ser lida: int readPointerChain (cadeia) { ❶ ret = lido (corrente [0]) para i = 1, chain.len - 1, 1 { deslocamento = cadeia [i] ret = lido (ret + deslocamento) } retornar ret } Este código cria a função readPointerPath () , que recebe um ponteiro cadeia chamada cadeia como um parâmetro. A função readPointerPath () trata o caminho do ponteiro na cadeia como uma lista de deslocamentos de memória do endereço ret , que é inicialmente definido para o ponteiro de memória em ❶. Em seguida, ele faz um loop através desses conjuntos, atualizando o valor de ret para o resultado da leitura (ret + deslocamento) em cada iteração e retornando ret quando estiver concluída. Este pseudocódigo mostra o que readPointerPath () se parece com quando o loop é desenrolado: list <int> cadeia = {0xDEADBEEF, 0xAB, 0x10, 0xCC} valor = readPointerPath (cadeia) // a chamada de função se desdobra para este ret = ler (0xDEADBEEF) // corrente [0] ret = lido (ret + 0xAB) ret = lido (ret + 0x10) ret = lido (ret + 0xCC) valor int = ret A função, em última análise, chama lida quatro vezes, em quatro diferentes endereços - um para cada elemento da cadeia . Nota Muitos hackers de jogos preferem codificar suas leituras em cadeia no lugar, em vez de encapsular -los em funções como readPointerPath () . Noções básicas de varredura de ponteiro Cadeias de ponteiros existem porque cada pedaço de memória alocada dinamicamente deve ter um endereço estático correspondente que o código do jogo pode usar para referenciá-lo. Os hackers de jogos podem acessar esses blocos localizando o ponteiro cadeias que fazem referência a eles. Por causa de sua estrutura multicamadas, no entanto, cadeias de ponteiro não podem ser localizadas através da abordagem linear que a memória scanners usam, então os hackers de jogos desenvolveram novas maneiras de encontrá-los. De uma perspectiva de engenharia reversa, você pode localizar e analisar o código de montagem, a fim de deduzir qual caminho do ponteiro ele usou para acessar o valor, mas fazer isso consome muito tempo e requer ferramentas avançadas. Os scanners de ponteiro resolvem este problema usando força bruta para iterar recursivamente sobre cada cadeia de ponteiros possível até encontrarem um que resolva para o alvo obter endereço de memória. Página 38 O pseudocódigo daListagem 1-1 deve dar uma ideia geral de como um scanner de ponteiro funciona. list <int> pointerScan (target, maxAdd, maxDepth) { ❶ para endereço = BASE, 0x7FFFFFF, 4 { ret = rScan (endereço, destino, maxAdd, maxDepth, 1) if (ret.len> 0) { ret.pushFront (endereço) retornar ret } } Retorna {} } list <int> rScan (address, target, maxAdd, maxDepth, curDepth) { ➋ para deslocamento = 0, maxAdd, 4 { valor = ler (endereço + deslocamento) ➌ if (value == target) lista de retorno <int> (deslocamento) 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 23/187 Verificando a memória usando o Cheat Engine 13 } ➍ if (curDepth <maxDepth) { curDepth ++ ❺ para deslocamento = 0, maxAdd, 4 { ret = rScan (endereço + deslocamento, destino, maxAdd, maxDepth, curDepth) ➏ if (ret.len> 0) { ret.pushFront (deslocamento) ➐ retornar ret } } } Retorna {} } Listagem 1-1: Pseudocódigo para um scanner de ponteiro Este código cria as funções pointerScan () e rScan () . pointerScan () A função pointerScan () é o ponto de entrada para a varredura. É preciso o parâmetro eters target (o endereço de memória dinâmica a ser encontrado), maxAdd (o máximo valor de qualquer deslocamento) e maxDepth (o comprimento máximo do caminho do ponteiro). Em seguida, ele faz um loop por cada endereço alinhado de 4 bytes ❶ no jogo, chamando rScan () com o endereço dos parâmetros (o endereço na iteração atual), target , maxAdd , maxDepth e curDepth (a profundidade do caminho, que é sempre 1 nesse caso). rScan () A função rScan () lê a memória de cada deslocamento alinhado de 4 bytes entre 0 e maxAdd ➋, e retorna se o resultado for igual ao destino ➌. Se rScan () não retorna no primeiro loop e a recursão não é muito profunda ➍, ela aumenta curDepth e novamente faz um loop sobre cada deslocamento ❺, chamando a si mesmo para cada iteração. Página 39 Se uma auto chamada retornar um caminho de ponteiro parcial ➏, rScan () irá preceder o deslocamento atual para o caminho e retornar para cima na cadeia de recursão ➐ até que atinge o pointerScan () . Quando uma chamada para rScan () de pointerScan () retorna um caminho do ponteiro, o ponteiroScan () empurra o endereço atual para a frente do caminho e o retorna como uma cadeia completa. Varredura de ponteiro com Cheat Engine O exemplo anterior mostrou o processo básico de varredura do ponteiro, mas a implementação que mostrei é primitiva. Além de ser insanamente lento para executar, geraria inúmeros falsos positivos. Cheat Engine's scanner de ponteiro usa uma série de interpolações avançadas para acelerar o digitalizar e torná-lo mais preciso e, nesta seção, apresentarei a você a miscelânea de opções de digitalização disponíveis. Para iniciar uma varredura de ponteiro no Cheat Engine, clique com o botão direito em uma página dinâmica endereço de memória em sua tabela de cheat e clique em Pointer scan para este endereço . Quando você inicia uma varredura de ponteiro, Cheat Engine irá perguntar onde armazenar os resultados da verificação como um arquivo .ptr . Depois de inserir um local, um Pointerscanner A caixa de diálogo scanoptions semelhante à mostrada na Figura 1-4 aparecerá. Figura 1-4: Caixa de diálogo de opções de varredura do Cheat Engine Pointerscanner 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 24/187 14 Capítulo 1 Página 40 Verificando a memória usando o Cheat Engine 15 O campo de entrada Endereço para encontrar na parte superior exibe sua memória dinâmica endereço eletrônico. Agora selecione cuidadosamente entre as muitas varreduras do Cheat Engine opções. Opções de chave Várias das opções de varredura do Cheat Engine normalmente mantêm seus valores padrão. Essas opções são as seguintes: Os endereços devem ser alinhados a 32 bits. Diz ao Cheat Engine para fazer a varredura apenas endereços que são múltiplos de 4, o que aumenta muito a varredura Rapidez. Como você aprenderá no Capítulo 4, os compiladores alinham os dados para que a maioria os endereços serão múltiplos de 4 por padrão. Você raramente precisará desative esta opção. Apenas encontre caminhos com um endereço estático. Acelera a varredura, evitando ing Cheat Engine de procurar caminhos com um ponteiro de início dinâmico. Esta opção deve estar sempre habilitada porque a varredura de um caminho começa entrar em outro endereço dinâmico pode ser contraproducente. Não inclua ponteiros com nós somente leitura. Também deve ser sempre ativado. Memória alocada dinamicamente que armazena dados voláteis deve nunca seja somente leitura. Pare de percorrer um caminho quando uma estática for encontrada Encerra o faz a varredura quando encontra um caminho de ponteiro com um endereço inicial estático. Isto deveria ser habilitado para reduzir falsos positivos e acelerar a varredura. O caminho do ponteiro pode estar apenas dentro desta região. Normalmente, pode ser deixado como está. As outras opções disponíveis para você compensam esta grande variedade por estreitando de forma inteligente o escopo da varredura. O primeiro elemento do pointerstruct deve apontar para o módulo Tells Cheat O mecanismo não deve procurar por blocos de heap em que as tabelas de funções virtuais são não encontrado, partindo do pressuposto de que o jogo foi codificado usando o objeto orientação. Embora essa configuração possa acelerar imensamente as varreduras, é altamente não confiável e você deve quase sempre deixá-lo desativado. Sem ponteiros de loop Invalida todos os caminhos que apontam para eles mesmos, eliminando caminhos ineficientes, mas retardando ligeiramente a varredura. Esta geralmente deve ser ativado. Nível máximo Determina o comprimento máximo do caminho do ponteiro. (Lembra-se da variável maxDepth no código de exemplo na Listagem 1-1?) Isso deve ser mantido em torno de 6 ou 7. Claro, haverá momentos em que você precisará alterar essas opções das configurações descritas. Por exemplo, não obter resultados confiáveis com os ponteiros sem loop ou configurações de nível máximo normalmente significa que o o valor que você está procurando existe em uma estrutura de dados dinâmica, como uma lista vinculada, árvore binária ou vetor. Outro exemplo é a parada de atravessar um caminho quando um opção estática foi encontrada, o que em casos raros pode impedi-lo de obter resultados confiáveis. Página 41 Opções Situacionais Ao contrário das opções anteriores, suas configurações para as restantes dependerão em sua situação. Veja como determinar a melhor configuração para cada um: Melhorar a varredura de ponteiros com dados de heap coletados Permite Cheat Engine para usar o registro de alocação de heap para determinar os limites de deslocamento, efetivamente acelerando a varredura eliminando muitos falsos positivos. Se você correr em um jogo usando um alocador de memória personalizado (que está se tornando cada vez mais comum), esta opção pode realmente fazer exatamente o oposto do que deve fazer. Você pode deixar esta configuração habilitada na inicial varreduras, mas deve ser o primeiro a ir quando você não consegue encontrar caminhos capazes. Permitir apenas endereços estáticos e de heap no caminho Invalida todos os caminhos que não pode ser otimizado com dados de heap, tornando esta abordagem ainda mais agressivo. Máximo de deslocamentos diferentes por nó Limita o número de mesmo valor apontadores que o scanner verifica. Ou seja, se n endereços diferentes apontam para 0x0BADF00D , esta opção diz ao Cheat Engine para considerar apenas o primeiro m endereços. Isso pode ser extremamente útil quando você não consegue restringir abaixo seu conjunto de resultados. Em outros casos, você pode querer desativá-lo, pois irá perca muitos caminhos válidos. Permitir que endereços de pilha do (s) primeiro (s) thread (s) sejam tratados como estáticos Verifica as pilhas de chamadas dos threads m mais antigos do jogo, considerando o 03/07/2021 Hacking de jogos https://translate.googleusercontent.com/translate_f 25/187 16 Capítulo 1 primeiros n bytes em cada um. Isso permite
Compartilhar