MafnGamer 13 Denunciar post Postado Outubro 5, 2012 É possível mudar o valor de um endereço da memória usado por um programa com C++? Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Outubro 7, 2012 Sim. Há diversos operadores destrutivos que podem ser usados para mudar o valor de uma região de memória associada a um nome. Exemplos: = ++ -- += -= Compartilhar este post Link para o post Compartilhar em outros sites
MafnGamer 13 Denunciar post Postado Outubro 8, 2012 Aí cara então eu posso editar o valor tranquilamente? Por exemplo eu tenho aqui no meu pc o Crossfire que usa um endereço da memória para guardar o id da minha arma eu posso mudar o valor para um que represente o id de outra arma? Obs: isso não é gaming hack é só um exemplo prático. :grin: Compartilhar este post Link para o post Compartilhar em outros sites
Mateus GP 13 Denunciar post Postado Novembro 19, 2012 Aí cara então eu posso editar o valor tranquilamente? Por exemplo eu tenho aqui no meu pc o Crossfire que usa um endereço da memória para guardar o id da minha arma eu posso mudar o valor para um que represente o id de outra arma? Obs: isso não é gaming hack é só um exemplo prático. :grin: Isso é possível, mas é um tanto complexo. Qualquer programa de computador é carregado na memoria, disso todos nós sabemos, as partes difíceis para se modificar uma variável de outro programa são: "Em qual endereço base esta o programa? Em qual endereço virtual está a variável? O sistema pode interpretar este acesso como uma falha de segmentação? Qual é o tamanho da variável? Um anti-vírus irá detectar meu programa como uma ameaça?" Já hackeei alguns programas e vou dizer não é nem um pouco fácil, levei meses, uma vez construí uma biblioteca dinâmica do zero, fiz o seguinte substitui a biblioteca original do programa, a menor que podia ser a solução para mim, usei um debug e um monitor de API's no Windows (Como o API Monitor) para construir uma substituta. Por exemplo: Saida do Monitor de API's: call Time Parameters Sys_open 00:01 void*:0x??????, char*:"D:\\Data\\logo.pcx\0" Solução: //... HMODULE hLib; hLib = LoadLibrary("c:\\Data\\old_lib.dll"); //... typedef void (*__Sys_open)(void*, char*); //... // O programa exigia que o seu CD estivesse presente no Drive de CD // para ser executado, uma solução foi copiar a pasta "Data" para o // disco local e fazer uma simples troca de letras na seguinte função: void* Sys_open (void* a /* tipo indefinido provavelmente uma estrutura */, char* B) { __Sys_open call; if((*b == 'd') || (*b == 'D')) *b = 'C'; call = (__Sys_open)GetProcAddress(hLib, "Sys_open"); return call(a, B); } //... Não é a melhor nem pior solução, mas é eficaz. Alguns programas tem suporte a plugins isso facilita e muito na hora de hackear. ***Atenção dependendo das circunstancias isto pode ser considerado crime. No meu caso possuía uma licença valida e a modificação foi para uma maior comodidade no uso do mesmo, apenas para mim. De forma alguma distribui o software hackeado. Seja Hacker! Não Cracker. Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Novembro 19, 2012 Do ponto de vista de C, o que este tipo de acesso gera é comportamento indefinido. Se isto "funciona" ou não depende de fatores completamente externos à linguagem. Compartilhar este post Link para o post Compartilhar em outros sites