Ler algo de um programa Em Execução [MemoryHack]

1. Ler algo de um programa Em Execução [MemoryHack]

lucas
1lucas1

(usa Linux Mint)

Enviado em 22/02/2018 - 00:30h

Preciso criar um gerador de log de um jogo

Por exemplo toda vez que o personagem chegar a "x" de hp salvar no log uma msg

porem o meu problema é que para fazer este gerador de log preciso acessar a memoria de um programa ja em execução, tentei pegar o addres da memoria com o "scanmem"(alternativa para cheatengine) mas nao cosigo acessar esse addres , todos os tutoriais que eu vi usam a biblioteca windowns.h porem queria desenvolver para linux,


[Não preciso alterar o valor mas apenas Ler, Alguém tem alguma ideia de como acessar uma variavel de um programa em execução NO LINUX?


  


2. Re: Ler algo de um programa Em Execução [MemoryHack]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/02/2018 - 01:49h

Você poderia fazer de um modo parecido como o scanmem faz.

Como o Linux usa mapeamento de memória aleatório por segurança, o scanmem trabalha procurando um valor específico, e depois refina a busca após tal valor ter sido alterado uma ou duas vezes. Se o jogo em questão não tiver também sua própria proteção contra cheats (alguns ficam trocando dados de lugar na memória para dificultar para os cheaters), enquanto o jogo se mantiver carregado, o dado deve ficar sempre no mesmo endereço, e você poderia ficar consultando esse dado de tempos em tempos.


3. Re: Ler algo de um programa Em Execução [MemoryHack]

lucas
1lucas1

(usa Linux Mint)

Enviado em 22/02/2018 - 01:53h

paulo1205 escreveu:

Você poderia fazer de um modo parecido como o scanmem faz.

Como o Linux usa mapeamento de memória aleatório por segurança, o scanmem trabalha procurando um valor específico, e depois refinar a busca depois de tal valor ter sido alterado uma ou duas vezes. Se o jogo em questão não tiver também sua própria proteção contra cheats (alguns ficam trocando dados de lugar na memória para dificultar para os cheaters), enquanto o jogo se mantiver carregado, o dado deve ficar sempre no mesmo endereço, e você poderia ficar consultando esse dado de tempos em tempos.


Os tutoriais que eu vi usam a windows.h e informam primeiro o pid do programa para uma função depois o addres.... como eu faria essa parte do pid no linux sendo que não tenho a biblioteca windows.h


quando eu tento apenas acessar o addres, da falha de segmentação


4. Re: Ler algo de um programa Em Execução [MemoryHack]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/02/2018 - 03:25h

No Linux, se você tiver permissões suficientes (talvez tenha de ser como root), você pode abrir /proc/pid/maps para ver as regiões de memória, e depois /proc/pid/mem para ter acesso ao conteúdo dessas regiões (não é um arquivo linear, você terá de usar lseek() para se deslocar para um endereço nas faixas obtidas do arquivo de mapeamento de memória).

Talvez funcione também chamar mmap() no arquivo com o conteúdo de memória, e usar os endereços das faixas mapeadas como offset do ponteiro que for alvo do mmap().






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts