468x60 Ads

This is an example of a HTML caption with a link.
Mostrando postagens com marcador ler endereço de memória. Mostrar todas as postagens
Mostrando postagens com marcador ler endereço de memória. Mostrar todas as postagens
Já havia feito isso em Pascal, agora estou programando em c++ e refiz o código, esse código lê alguns endereços de memória do cliente pxg, usei como base para criar as funções deste código este link.


Código:
#include <windows.h>
#include <iostream>
#include <TlHelp32.h>
using namespace std;
void RM(uintptr_t *result, uintptr_t address); //Função para obter o valor do endereço base
void RD(double *result, uintptr_t offset, uintptr_t base); //Função para obter os valores
int main(){
//Variaveis
uintptr_t baseaddress, offset, addr;
double PlayerHP, PokemonHP, PlayerLevel, PlayerExp, PlayerMaxHP;
addr = 0x006C53C0; //Endereço base
RM(&baseaddress, addr); //Obtem o valor do endereço base para a soma
RD(&PlayerHP, 0x348, baseaddress); //Define a HP do player
RD(&PlayerMaxHP, 0x350, baseaddress); //Define a HP máxima do player
RD(&PokemonHP, 0x380, baseaddress); //Define a HP do pokemon
RD(&PlayerLevel, 0x370, baseaddress); //Define o Level do player
RD(&PlayerExp, 0x368, baseaddress); //Define a exp atual do player
//Escreve na tela os valores
cout << "Player HP: " << PlayerHP << "/" << PlayerMaxHP << "\n"; cout << "Player Exp: " << PlayerExp << "\n";
cout << "Player Level: " << PlayerLevel << "\n";
cout << "Pokemon HP: " << PokemonHP << "\n";
system("pause");
return 0;
}
void RM(uintptr_t *result, uintptr_t address){
int y;
HWND h = NULL;
DWORD pid;
cout << "Searching PXG Client..." << "\n";
while (h == NULL)
{
h = FindWindow(NULL, "PXG Client");
Sleep(1000);
}
cout << "PXG Client found!" << "\n";
GetWindowThreadProcessId(h, &pid);
HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
ReadProcessMemory(proc, (LPCVOID)address, &y, 8, NULL);
*result = y;
}
void RD(double *result, uintptr_t offset, uintptr_t base){
uintptr_t address = base + offset;
double y;
HWND h = NULL;
DWORD pid;
while (h == NULL)
{
h = FindWindow(NULL, "PXG Client");
Sleep(100);
}
GetWindowThreadProcessId(h, &pid);
HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
ReadProcessMemory(proc, (LPCVOID)address, &y, 8, NULL);
*result = y;
}


Façam bom proveito do código.
READ MORE

Olá amigos, tirei um tempo da minha sexta feira para ler as address do ot pokemon, consegui, e o melhor é que vou disponibilizar a source do código que usei e abaixo estarei explicando a lógica para a leitura dos endereços de memória.



Vamos lá, como podem ver na imagem está mostrando a address utilizada para leitura e a leitura da mesma, o que acontece que muitas pessoas não conseguiam achar ela ao usar o cheat engine se da ao fato de que os endereços de memória mudam a cada vez que o cliente é aberto (randômicos), porém todo endereço randômico tem uma forma de ser gerado, e o sistema aqui é bem simples, existe um endereço estático (que não se altera) quando o cliente é aberto e fechado, este endereço estático: 006C03B0 (4 bytes), que possui como valor um número em hexadecimal é sempre a base para alguns dos endereços de memória estáticos, entre eles os que estão na imagem.
Outro problema que leigos no cheat engine devem ter se deparado é o fato de não encontrarem nenhuma address, isso se dá porque os endereços de memória (pelo menos os que encontrei) estão no tipo double.
Ok, mas e agora? Você já possui o endereço de memória base para encontrar as address sempre que o cliente for aberto, possui o tipo de variável usando nos endereços de memória, como fazer para encontra-las?
Vamos lá, o método usado para os endereços de memória é bem simples, o valor do endereço de memória 006C03B0 (em hexadecimal) somado com o valor de uma offset vai nos resultar o endereço de memória que queremos saber, o offset é um valor que será somado também em hexadecimal, ao valor do endereço de memória 006C03B0, a soma desses valores nos resultará no endereço de memória que procuramos.
Por exemplo, o offset referente a vida do personagem é 348 (não se esqueça que esse valor está em hexadecimal), vamos imaginar que o valor de 006C03B0 é 0C99DA08, ao somarmos o valor $0C99DA08 + $348 obteremos  0C99DD50, o endereço de memória da vida do personagem, sobre o resultado dessa conta se lermos ele como double na linguagem que estivermos usando obteremos a vida atual do personagem como resposta.

Informação importante: 
  • O jogo pode alterar o endereço estático que informei após alguma atualização, até hoje não alteraram, esse endereço é do tipo 4 bytes e resulta um valor do tipo hexadecimal.
Para mais informações ou dúvidas contacte-me por e-mail.

Link para download do source: http://www.speedyshare.com/GD9tM/leraddress.rar
READ MORE