Tempo de leitura: 2 minutos
No artigo passado, falei sobre ponteiros e mostrei como acessar a memória local(do processo atual). Mas, isso não é o suficiente para acessar a memória de outros processos, pois, como mencionado anteriormente, o sistema operacional não permite que acessemos de forma direta, através de ponteiros. Para isso, existe uma excelente alternativa que é a função ReadProcessMemory.
Neste artigo lhe apresentarei a função da API do Windows chamada ReadProcessMemory.
Leitura e tratamento de memória é uma poderosa ferramenta. Muitos gostariam de saber, mas poucos sabem como fazê-lo e, principalmente, tratar o resultado.
Com esta API torna-se capaz a leitura de dados da memória de um processo específico. Exatamente, poderemos ler e tratar a memória de outro processo.
ReadProcessMemory é um problema para muitos programadores inexperientes que almejam grandes criações, em sua maioria Memory Scanners(Cheat Engine, por exemplo).
Segundo o MSDN, as especificações da ReadProcessMemory são:
BOOL WINAPI ReadProcessMemory( __in HANDLE hProcess, __in LPCVOID lpBaseAddress, __out LPVOID lpBuffer, __in SIZE_T nSize, __out SIZE_T *lpNumberOfBytesRead );
Sendo:
- hProcess – Handle do processo alvo
- lpBaseAddress – Ponteiro do Address alvo
- lpBuffer – Pointeiro do buffer alocado no processo atual para receber os dados lidos
- nSize – Tamanho, em bytes, da memória para ser lida
- lpNumberOfBytesRead – Pointeiro para uma variável DWORD que retornará a quantidade de bytes lidos
OBS: hProcess deve ter acesso do tipo PROCESS_VM_READ. (Para isso, utiliza-se a API OpenProcess).
ReadProcessMemory lê dados (bytes) de uma área da memória em um processo, se esta área estiver acessível (Com uma das seguintes permissões: PAGE_READONLY, PAGE_READWRITE, PAGE_WRITECOPY, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY).
Se a função tiver êxito, o retorno é diferente de zero. Se falhar, o retorno é zero.
Funciona da seguinte forma:
Após a leitura, faz-se o tratamento de dados conforme as necessidades do usuário. Nesta parte está o problema da maioria. Os tipos Byte, Word, DWORD, QWORD, ANSI String e UNICODE String podem ser tratados diretamente. Porém, quando se trata tudo como um data stream, deve-se ter em mente que o processador armazena os bytes na ordem inversa.
Vale observar que mesmo com retorno zero, lpNumberOfBytesRead pode ter retornado diferente de zero e os dados podem, e devem, ser tratados.
Para facilitar o aprendizado, irei disponibilizar abaixo uma Source Code em Pascal feita no Delphi7 pelo Yuh L. a qual exemplifica muito bem a leitura e tratamento de dados(de todos os tipos citados anteriormente) com ReadProcessMemory.
Faça o download do projeto de exemplo:
Link permanente
Valew mais uma vez, tinha uma duvida a respeito disso.. eu tentei fazer de outra maneira não dava certo, agora eu vi onde era o erro !!
Link permanente
Oi Zaue,
Fico feliz que tenha lhe ajudado em seu projeto =]
Link permanente
Cara, estou sem palavras, a anos venho tentando e desistindo, mas você é a luz no fim do túnel, parabéns, muito ansioso pelo próximo tutorial, um forte abraço.
Link permanente
Parabens ! Ancioso para os proximos artigos!
Vlw por deixar uma source para estudos 🙂
Link permanente
Obrigado, Henrique Smith =]
Link permanente
Obrigado Lipinf mesmo eu não entendendo nada sobre como fazer hack ou aprender sobre Delphi 7 vc esta me dando uma luz Obrigado 🙂
Link permanente
Não entendi como usar o programa.
Link permanente
OQUE VC FALOU ATÉ AGORA EU JA SEI QUERO VER O AVANÇADO MAIS TA TOP CONTINUE ASSIM .VLW E UM ABRAÇO…
Link permanente
Parabéns cada vez mas to ansioso pelas futuras vídeo aulas para começar coloca em praticas obrigado por nos ajuda (y) forte abraço
Link permanente
Cara eu tive sorte de encontrar suas aulas! Até agora eu acredito estar fluindo bem, material mt bem preparado, bem explicado, fazer esse tipo de coisa foi algo q sempre pensei mas nunca coloquei pra frente, agora que é possivel eu n posso desperdiçar essa chance!! obg Felipe Abraço!
Link permanente
Felipe, como eu vou usar este arquivo no delphi ? Obs: Abrir o programa no Delphi eu sei, mas eu não sei utiliza-lo.
Link permanente
Fala Maurilio, beleza? =]
Ele serve para você ler a memória de outro processo, você digita o nome do processo que alvo, o endereço de memória que deseja ler (address) e o tamanho de bytes que deseja ler de uma vez. =)
É quase um programa base para se fazer um scanner de memória, como o Cheat Engine, por exemplo.
Se tiver mais dúvidas é só escrever aqui ou me mandar um e-mail que lhe explico melhor ou quem sabe até não faço mais artigos explicando as dúvidas 🙂
Abraço!
Link permanente
Não da para baixar o site de download não abre.
Link permanente
consegui abrir o site 🙂
Link permanente
Estou ansioso para que vc possa me ajudar todos os comentários elogiando espero que vc possa me ajudar em que estou procurando
Link permanente
Opa ate que enfin um tutorial interessante na net sobre cheating,parabens cara vai me ajuda muito
Link permanente
Valeu, Alessandro! 😉
Link permanente
GG GOSTO DE HACKERS
Link permanente
ansioso pelo proximo tutorial obg por enquanto
Link permanente
Cara, teus textos sao bem explicativos, porem to muito perdido, MUITO MESMO! Estou tipo cego em tiroteio, nunca vi nada disso, nada mesmo. Entao seria bom video aulas explicando, assim por texto pra mim nao ta sendo bom, acho que nao so pra mim, mas pra alguns tambem que deve ter desistido ou nao, peço que faça video aula e tals explicando junto com o texto, porque estou perdidin da silva :/
Link permanente
Oi Lincoln, tudo bom?
Na verdade, eu já tenho um curso completo em video-aulas: o Treinamento Online de Cheats.
Nesse curso você vai aprender um método eficiente, testado e aprovado por mais de 90 alunos do treinamento, a desenvolver seus próprios cheats, começando do zero, em 4 semanas, através de video-aulas passo-a-passo.
Se tiver interessado, manda um e-mail para [email protected], ok?
Abraço!
Link permanente
Olá eu comprei mas não recebi nada ainda. Comprei segunda-feira !
Link permanente
Bom dia amigo , estou iniciando agora na programação e tenho uma dúvida a respeito de leitura e escrita na memória. é o seguinte eu tenho um endereço que peguei no cheat engine, e este endereço aponta para outro endereço , onde está o dado que preciso coletar , porém esse segundo endereço altera toda vez que fecho o game , além disso quando faço a leitura do primeiro endereço , é me retornado um valor, ao invés do segundo endereço, então gostaria de saber se existe uma forma de ler o primeiro endereço e obter o segundo endereço