PDA

Просмотр полной версии : Прочитать значение из памяти


Shanluu
13.11.2010, 21:47
Всем привет.
У меня вопрос, ибо не могу понять и очень долго мучаюсь че-то.

вот код , который вынимает из памяти число и пихает его на едит4.
Но это число находится по динамическому адрессу и при след пеерзагрузке программы результат не такой (ну это и ясно)


var
hProc, PID, numberRead : DWORD;
hWnd : THandle; // Хэндл окна чата
IpBuf : DWORD; // буфер куда поместиться наше значение
ipBase: ^dword; // точка входа в памяти
begin
hWnd:=findwindow(nil,WindowTitle); /// получаем хэндл окна программы
GetWindowThreadProcessId(hWnd, @PID); //получаем pid зная хэндл окошка интересующей нас программы
hProc:=OpenProcess(PROCESS_VM_READ, False, PID); // подключаемся к процессу зная его ID
form1.Edit3.Text:=inttostr(hProc); // заносим в edit Process
ipBase:=ptr($01889328); // RVA слова в памяти
ReadProcessMemory(hProc, ipBase, Addr(ipbuf), sizeof(IpBuf), numberRead); // чтение из памяти строки
form1.Edit4.Text:=IntToStr(ipbuf); // заносим в edit Buffer
CloseHandle(hProc); // отсоединяемся от процесса
end;


Через Cheat Engine я узнал. что
поинтер : 1064B828
смещение : +00109308

Прошу знающих людей подправить кусок , ибо я уже не в силах мучиться с ним.
Заранее спасибо!

Рэйзор
14.11.2010, 16:00
Просто решения не существует:

Но это число находится по динамическому адрессу и при след пеерзагрузке программы результат не такой (ну это и ясно)

Приведенный выше код способен считать только из статичной области, для динамического определения нужно хорошо повозиться.
Если под

поинтер : 1064B828
смещение : +00109308

Ты имеешь ввиду увеличения адреса на константу, то это сомнительно, хотя все может быть...

Dinmaite
18.11.2010, 16:30
Почитай.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
[Ссылки могут видеть только зарегистрированные и активированные пользователи]