![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Редактор памяти
D ick © (2003-07-31 14:09:00)При изменении какого то адресса при запуске игрушки таким способом:
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 показывает что он изменился. Может есть другой способ изменить адресс, что неправильно в этом?
З.Ы.: Этот код писал не я, вытащил из какойто статьи
VMcL (2003-07-31 14:53:00) [1]
>D ick © (31.07.03 14:09)
Далее: результатывсехфункций следует проверять на успешность выполнения.
VMcL (2003-07-31 14:51:00) [2]
>D ick © (31.07.03 14:09)
Вот что смущает:
buf^ := Chr(PokeValue);
то есть buf[0] = PokeValue, размер buf => 2, вопрос: а как же buf[1] ?
AlexRush (2003-07-31 14:29:00) [3]
WriteProcessMemory...
The handle must have PROCESS_VM_WRITE and PROCESS_VM_OPERATION access to the process.
А еще было бы неплохо проверять результат WriteProcessMemoryIf the function fails, the return value is zero. To get extended error information, call GetLastError.
И уж совсем хорошо было бы давать соответствующие смысловые имена своим переменым.
см. еще DebugActiveProcess