Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
procedure TForm1.Button1Click(Sender: TObject);
var
hProc, PID, numberRead : DWORD;
hWnd : THandle; // Хэндл окна
IpBuf : PWideChar; // буфер куда поместиться наше значение
len : integer;
ipBase: ^dword; // точка входа в памяти
Buf : PChar;
Write:cardinal;
New:string; // новое значение
begin
hWnd:=Findwindow('TfChatClient',nil); // получаем хэндл окна программы
Edit1.Text:=inttostr(hWnd); // заносим в edit Handle
GetWindowThreadProcessId(hWnd, @PID); //получаем pid зная хэндл окошка интересующей нас программы
Edit2.Text:=inttostr(PID); // заносим в edit ID
hProc:=OpenProcess(PROCESS_ALL_ACCESS, False, PID); // подключаемся к процессу зная его ID
if hProc <> 0 then // условие проверки подключения к процессу
try
len := 200;
ipBuf :=AllocMem(len);
Edit3.Text:=inttostr(hProc); // заносим в edit Process
ipBase:=ptr($0152BD82); // адрес слова в памяти как его узнать ? 
ReadProcessMemory(hProc, ipBase, ipBuf, len, numberRead); // чтение из памяти строки
Edit4.Text:=WideCharToString(ipbuf); // заносим в edit Buffer
New:=Edit5.Text; // присваевываем наше слово переменной
StringToWideChar(New, ipBuf, len); // заносим в буфер
WriteProcessMemory(hProc, ipBase, ipBuf, 15, write); //меняем старое значения слова на новое
finally
CloseHandle(hProc); // отсоединяемся от процесса
FreeMem(ipBuf); // освобождаем память
end;
end;

Вот вроде работает нормально теперь вопрос встал о записи в память
значение в памяти меняет но в программе не отображается изменённое значение, а показывает старое...

и ещё как узнать адрес моего слова в памяти чтоб не вводить его постоянно ipBase:=ptr($0152BD82);
если открыть exe hiew то адрес моего слова 0036D0C8 (RVA) и .0076D0C8 (VA), а в памяти всегда разный.

Последний раз редактировалось Drongo, 25-07-2009 в 10:12. Причина: теги [code][/code]


Отправлено: 22:50, 24-07-2009 | #3