Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

Редактор памяти   Найти похожие ветки 

 
D ick ©   (2003-07-31 14:09) [0]

При изменении какого то адресса при запуске игрушки таким способом:
Var WindowName : integer;
ProcessId : integer;
ThreadId : integer;
buf : PChar;
HandleWindow : Integer;
write : cardinal;
Const WindowTitle = "Quake 2";
Address = $00AF06D6;
PokeValue = $С8;
NumberOfBytes = 2;

procedure TForm1.Button1Click(Sender: TObject);
begin
WindowName := FindWindow(nil,WindowTitle);
If WindowName = 0 then
begin
MessageDlg("......!!!!!!!.......", mtwarning,[mbOK],0);
( WindowName,@ProcessId) При изменении какого то адресса при запуске игрушки таким способом:
Var WindowName : integer;
ProcessId : integer;
ThreadId : integer;
buf : PChar;
HandleWindow : Integer;
write : cardinal;
Const WindowTitle = "Quake 2";
Address = $00AF06D6;
PokeValue = $С8;
NumberOfBytes = 2;

procedure TForm1.Button1Click(Sender: TObject);
begin
WindowName := FindWindow(nil,WindowTitle);
If WindowName = 0 then
begin
MessageDlg("......!!!!!!!.......", mtwarning,[mbOK],0);
end;
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
GetMem(buf,2);
buf^ := Chr(PokeValue);
WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write);
FreeMem(buf);
CloseHandle(HandleWindow);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
end;
изменить адресс не получается, хотя в например ArtMoney показывает что он изменился. Может есть другой способ изменить адресс, что неправильно в этом?
З.Ы.: Этот код писал не я, вытащил из какойто статьи


 
AlexRush ©   (2003-07-31 14:29) [1]

WriteProcessMemory... The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process.
А еще было бы неплохо проверять результат WriteProcessMemory If the function fails, the return value is zero. To get extended error information, call GetLastError.
И уж совсем хорошо было бы давать соответствующие смысловые имена своим переменым.
см. еще DebugActiveProcess


 
VMcL ©   (2003-07-31 14:51) [2]

>D ick © (31.07.03 14:09)

Вот что смущает:

buf^ := Chr(PokeValue);

то есть buf[0] = PokeValue, размер buf => 2, вопрос: а как же buf[1] ?


 
VMcL ©   (2003-07-31 14:53) [3]

>D ick © (31.07.03 14:09)

Далее: результаты всех функций следует проверять на успешность выполнения.



Страницы: 1 вся ветка

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.041 c
1-18340
karu
2003-09-19 14:42
2003.10.06
Memo и Undo


7-18662
Opryshok
2003-07-21 17:48
2003.10.06
как остановить поток?


1-18386
Radeon
2003-09-22 17:40
2003.10.06
Чтение определённых символов из строки


1-18376
Zew
2003-09-22 19:42
2003.10.06
Поставить драйвера


14-18627
Romka
2003-09-17 17:17
2003.10.06
Systray