ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Dúvida em writeprocessmemory

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Skoll
Novato
Novato


Registrado: Sábado, 19 de Novembro de 2005
Mensagens: 11

MensagemEnviada: Seg Dez 22, 2008 7:56 pm    Assunto: Dúvida em writeprocessmemory Responder com Citação

Fala pessoal, tenho Delphi como um hobby, no qual to sempre utilizando apesar de não entender tanto, tudo que eu aprendi sobre Delphi foi nesse site e nesse forum, nunca fiz nenhum tipo de curso ou nada parecido.

Esses dias, meu amigo estava me falando sobre dificuldades que ele tinha com o jogo Brasfoot quando pensei em fazer um hack(nada ilegal, apenas uma brincadeirinha) para o jogo, depois de pesquiser um pouco sobre WriteProcessMemory, achei um bom código e decidi introduzí-lo no meu hack.

O objetivo básico era conseguir aumentar consideravelmente o dinheiro do técnico, você começa com 2 milhões, testei o código que achei e mudei o dinheiro para 10 reais apenas para testar.

Perfeito, ja vi que funcionava então decidi fazer um design bonito para divulgar na internet, fiz uma bela banner, infos, mas quando fui colocar um valor maior para editar (ex: 10000000) não funcionava, parece que ele só lê 1 byte do que precisa ser patchado no processo.

Não consigo adicionar valores maiores do que de 1byte no address.

Alguem pode me ajudar e dizer porque?


Aqui estão as sources:
Código:
var
  WindowName: Integer;
  ProcessId: Integer;
  ThreadId: Integer;
  buf: PChar;
  HandleWindow: Integer;
  Write: Cardinal;
 
{....}

const
  WindowTitle = 'Brasfoot 2008';
  Address = $480506C;
  PokeValue = $186A0;
  NumberOfBytes = 2;   // isso parece não influenciar, ja tentei mudar
 
{....}


procedure TForm1.Button1Click(Sender: TObject);
begin
  WindowName := FindWindow(nil, WindowTitle);

  if WindowName = 0 then
  begin
    MessageDlg('Program not running.', mtWarning, [mbOK], 0);
  end;

  ThreadId := GetWindowThreadProcessId(WindowName, @ProcessId);
  HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);

  GetMem(buf, 1);
  buf^ := Chr(PokeValue);
  WriteProcessMemory(HandleWindow, ptr(Address), buf, NumberOfBytes, Write);
  FreeMem(buf);
  CloseHandle(HandleWindow);
end;



Já tentei mudar cada número e variável ai, não funciona, alguem me ajuda pois ja estou me estressando hehehe...


Forte abraço e já um obrigado!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Ter Dez 23, 2008 9:27 am    Assunto: Responder com Citação

GetMem(buf, 1);
buf^ := Chr(PokeValue);

vc ta setando só um byte.


tente assim:


Código:
GetMem(buf, 4); //aloca 4 bytes
Move(PokeValue, buf^, 4); //move 4 bytes

WriteProcessMemory(HandleWindow, ptr(Address), buf, 4{escreve 4 bytes}, Write);


mas poderia ser assim:


Código:
WriteProcessMemory(HandleWindow, ptr(Address), PokeValue, SizeOf(PokeValue), Write);
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB