Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Alterando OPCODES


Ryokusei
 Compartilhar

Posts Recomendados

Antes de começar a ler o tutorial, siga essas regras abaixo à risca:

 

- Se você é iniciante saia desta página agora,

- Se você tem dúvidas idiotas saia desta página agora,

- Se você não sabe o que é uma API saia desta página agora,

- Se você não sabe o que é um ponteiro saia desta página agora,

- Se você pensa em reclamar por eu falar de assembly e você não entende nada saia desta página agora,

- Se você pensa em agradecer dizendo "vlw lesk mt bom e noiz mano zika flww" saia desta página agora,

- Se você pensa em reclamar porque deu erro na hora de compilar saia desta página agora,

- Se você pensa em reclamar por achar que eu copiei isso saia desta página agora e se mate,

- Se você não gosta de gatinhos saia desta página agora.

 

Neste artigo irei explicar e ensinar como alterar opcodes na memória do Pinball para se que a pontuação não se altere. Esse artifício pode ser usado de diversas formas e em qualquer processo (com exceção para códigos virtualizados, nesse caso a história é outra).

Ferramentas necessárias:

 

- Ollydbg

- Cheat Engine

- Pinball 3D Space Cadet para Windows

 

É necessário se cadastrar para acessar o conteúdo.

É necessário se cadastrar para acessar o conteúdo.

 

Um opcode é uma instrução que o processador irá interpretar e executar. Em simples palavras, é código em assembly (leve a primeira definição como verdadeira, essa é apenas uma analogia didática). Cada processador, seja qual for a capacidade de processamento e o fabricante, interpreta os códigos de máquina (opcodes) e então executa suas referentes operações. Seja ela somar um número ou desenhar um pixel na tela. Um opcode pode ter tamanho variável de bytes, por isso deve-se tomar cuidado ao alterar um opcode para ter certeza de se ocupar todos os bytes por ele utilizado. Caso algum byte sobre, ele pode alterar toda uma função e gerar resultados inesperados na execução do módulo.

Os programas (e DLLs) carregam em si todas as instruções que serão executadas por ele*, e podem ser vistas com um disassembler ou debugger. Em runtime essas instruções também estão na memória do processo e podem ser alteradas. Mas para alterar deve-se levar em conta o que se vai alterar e o resultado disso. Alterar opcodes cegamente pode gerar erros de execução que levarão o processo à um crash.

Se você quer impedir que, por exemplo, sua vida seja diminuída em um jogo você deve impedir que ela seja diminuída, seja qual for o meio para esse fim. Você pode remover a instrução que diminui sua vida, fazer sua vida aumentar ao invés de diminuir, atribuir um valor qualquer para sua vida, etc.

Este exemplo pode esclarecer melhor:

 

Suponha que esse opcode decremente em 1 sua vida em algum jogo:

É necessário se cadastrar para acessar o conteúdo.

 

Você pode substituí-lo por:

É necessário se cadastrar para acessar o conteúdo.

ou

É necessário se cadastrar para acessar o conteúdo.

 

*Programas e DLLs que foram comprimidos extraem suas instruções originais na memória no início ou durante a execução do mesmo.

 

1 - Para começar encontre o address da sua pontuação no pinball com o CE, clique com o botão direito sobre ele e selecione a opção "Find out what writes to this address";

 

e5da26b093cfdd7741d0e8a4625f55dd.jpg

 

2 - Faça algo para alterar a sua pontuação e veja o opcode que irá aparecer, deve ser o mesmo da imagem abaixo;

 

É necessário se cadastrar para acessar o conteúdo.

 

3086264277bbf327dbe9ad8d236e70e0.jpg

 

Vamos entender como esse opcode funciona.

 

É necessário se cadastrar para acessar o conteúdo.

 

Esse opcode pesa 2 bytes, #01#$30, e está no address 0x0101757C.

Se queremos alterá-lo para algo que não faça nada, devemos usar o opcode NOP duas vezes, pois o NOP pesa 1 byte e temos que sobreescrever um opcode que pesa 2 bytes. Portanto, ao sobreescrever o opcode, a memória ficaria assim:

 

É necessário se cadastrar para acessar o conteúdo.

 

3 - Feche o CE, vamos ao Delphi trabalhar. Monte um form conforme a imagem abaixo;

 

ce70602ba39d15f7ceac3375ef0b95c2.jpg

 

4 - Declare as seguintes variáveis globais e constantes:

 

É necessário se cadastrar para acessar o conteúdo.

 

5 - Declare agora esta função:

 

É necessário se cadastrar para acessar o conteúdo.

 

6 - No botão "Inicializar" iremos pegar um handle para o processo do pinball obtendo acesso total, faça conforme o code abaixo:

 

É necessário se cadastrar para acessar o conteúdo.

 

7 - No botão "Travar" vamos substituir o opcode no address 0x0101757C. Deve-se ter em mente que a memória nesse address possui uma proteção que não a deixa ser sobreescrita, portanto temos que mudar isso com VirtualProtectEx. Ponha o seguinte code:

 

É necessário se cadastrar para acessar o conteúdo.

 

8 - No botão "Normal" nós faremos o mesmo que no passo 7, mas restaurando o opcode original;

 

É necessário se cadastrar para acessar o conteúdo.

 

Rode o projeto e veja o resultado você mesmo. Não vou disponibilizar source desse artigo, e peço que quem consiga mantenha minha atitude.

 

Esse é meu último legado por aqui. Espero que vocês aprendam com isso e evoluam, sonhem outros sonhos e melhores.

Espero voltar aqui algum dia e ver que o nível desse lugar está melhor, programadores de alto nível, melhores que eu sou agora, todos em comunhão e respeito. Se esse dia chegar, então eu ficarei feliz em voltar aqui e contribuir mais. Por enquanto eu vou lurkar de vez em quando, mas sempre em silêncio. Boa sorte.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eba, duas semanas esperando este tópico, mas infelizmente vai ser o último ): Que pena.

Até lá eu te confesso postar outro ^^. Mas enfim, o tópico está muito bom Ryo !

Isto é um bom passo para quem quer usar o NOP em algumas funções no delphi, bem legal mesmo.

4I1ShmNRGyg2k.webp

Link para o comentário
Compartilhar em outros sites

Ótimo tópico Ryokusei. É sempre um prazer ler seus tutoriais, além de ser um ótimo conteúdo, sei que foi totalmente escrito por você.

 

É uma pena ver que muitas crianças não aproveitam conteúdos como estes, com um pensamento do tipo "pra que estudar se posso ir no fórum fazer um tópico estupido pedindo códigos/source de hacks prontos?".. ;/

 

@Off...

... Me lembro da primeira vez que falei sobre hacks com você, falei sobre bots de tibia, bocê comentou sobre opcodes, eu nem sabia o que era o.0 ( mas nem admiti que não sabia, só fiquei brisando >..<, eu era uma criança vergonhosa :corado: ), e então resolvi ler e entender mais sobre o assunto, esse tópico explica em poucas linhas o que passei dias pra entender '-'.

 

Mais uma vez, vlw Ryokusei, aguardamos mais tópicos do genero =D.

 

flw, abraços

Link para o comentário
Compartilhar em outros sites

Ola, eu consegui cria o que diz no tutorial acima de boa mas eu quero ir mais além.

Eu tenho que é muito importante de pode decidir muitas coisas uma delas é para eu continuar.

Código é

É necessário se cadastrar para acessar o conteúdo.

Suponhamos que o address que ta acima seja o da vida se eu fizer vai aumenta meu HP ??

E como eu faço pra aumenta de uma forma em q não caia mais .

Espero que apenas pessoas que entenda do assunto responde, não seja as pessoas que vem da área de jogos e que aprendeu resource e já acha que O PROGRAMADOR .

*(essa duvida é muito importante )

**(o code acima é em dll )

Link para o comentário
Compartilhar em outros sites

Ola, eu consegui cria o que diz no tutorial acima de boa mas eu quero ir mais além.

Eu tenho que é muito importante de pode decidir muitas coisas uma delas é para eu continuar.

Código é

É necessário se cadastrar para acessar o conteúdo.

Suponhamos que o address que ta acima seja o da vida se eu fizer vai aumenta meu HP ??

E como eu faço pra aumenta de uma forma em q não caia mais .

Espero que apenas pessoas que entenda do assunto responde, não seja as pessoas que vem da área de jogos e que aprendeu resource e já acha que O PROGRAMADOR .

*(essa duvida é muito importante )

**(o code acima é em dll )

 

Escreva corretamente em português, inclusive utilizando pontuação. Não vou responder dúvidas de analfabetos mano zika lesk qro fase raqui manolo.

 

"PBYTE($00000f48)^:=$ INC000000;"

"$ INC000000"

Isso não existe, não é Pascal.

 

Releia o artigo inteiro e entenda do assunto antes de fazer perguntas estúpidas. Isso só revela seu baixo nível de compreensão do assunto.

Link para o comentário
Compartilhar em outros sites

É necessário se cadastrar para acessar o conteúdo.

Bom so quero saber como faço para almenta o hp ou outras coisas..

É necessário se cadastrar para acessar o conteúdo.

se eu der um nop essa função vai fica com 0 , se for hp sera 0

como eu aumento em grande quantidade (15, 30, 50 etc..)

Link para o comentário
Compartilhar em outros sites

É necessário se cadastrar para acessar o conteúdo.

Bom so quero saber como faço para almenta o hp ou outras coisas..

É necessário se cadastrar para acessar o conteúdo.

se eu der um nop essa função vai fica com 0 , se for hp sera 0

como eu aumento em grande quantidade (15, 30, 50 etc..)

 

"INS" não é opcode, pare de postar fantasias da sua cabeça.

Se você der um NOP o opcode, e não função (porque opcode não é função, entenda pelo menos o básico do assunto antes de postar besteiras), vira 0x90 em um byte dele que você deu NOP. O valor que é alterado por esse opcode não vai mudar, seu hp não será zero, ele apenas não vai se alterar. Se você quer aumentar o valor use INC, ADD, MUL, ou qualquer outra coisa que faça o efeito desejado.

Pare de postar dúvidas idiotas e pseudo-códigos incorretos.

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois...

cara se não sabe responder sem ofender as pessoas?

isso só demonstra sua incapacidade de ajudar as pessoas, independente do nivel, nas suas perguntas.

 

(tonemaiprainfraçãocaramba)

 

Fora essa barbaridade sem tamanho o tópico está legal.

98r8.jpg
Link para o comentário
Compartilhar em outros sites

Ryokusei sempre me ajuda quando preciso, mas a ajuda dele é mais pesada que isso ai, ele não me da nada na mão, ele me diz a lógica(e olhe lá quando diz) e eu me viro, resultado, eu aprendo muito mais.

 

Esse negocio de ficar dado tudo de mão beijada é o cúmulo, você só perde com isso.

Link para o comentário
Compartilhar em outros sites

concordo, dar de mão beijada não dá certo.. mas desrrespeito é outro, mesmo que não seja tão ofensivo, porém ninguem mereçe ser tratado assim..

 

Pela minha opinião essa maneira de ensino é estranhamente estranha.

98r8.jpg
Link para o comentário
Compartilhar em outros sites

cara se não sabe responder sem ofender as pessoas?

isso só demonstra sua incapacidade de ajudar as pessoas, independente do nivel, nas suas perguntas.

 

(tonemaiprainfraçãocaramba)

 

Fora essa barbaridade sem tamanho o tópico está legal.

 

Meu método de ensino é prolífero, as pessoas aprenderam, seu argumento é inválido. Por favor, respeite o tópico. A intenção do tópico é discussão sobre o escopo do mesmo, e não "AIIIN ELE É GROÇU COMIGO PAPAIIN MAMAIIN MODS!".

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.