Главная страница
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.016 c
1-18294
Vt
2003-09-24 07:16
2003.10.06
Мастера почему не работает процедура Close. На onShow


1-18416
ARTEMKA
2003-09-25 00:07
2003.10.06
Скриншот в MediaPlayer e


1-18316
sashcan
2003-09-23 20:55
2003.10.06
Получение установленных программ в винде


14-18543
andre
2003-09-16 22:38
2003.10.06
Ламерский вопрос


1-18366
ARTEMKA
2003-09-26 01:20
2003.10.06
Подсветка в TreeView