 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
Skoll Novato

Registrado: Sábado, 19 de Novembro de 2005 Mensagens: 11
|
Enviada: Seg Dez 22, 2008 7:56 pm Assunto: Dúvida em writeprocessmemory |
|
|
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 |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Dez 23, 2008 9:27 am Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|