Devil9313 Опубликовано 22 ноября, 2015 Поделиться Опубликовано 22 ноября, 2015 (изменено) Здравствуйте у меня такой вопрос кто объяснить как работать с VIrtualProtectEx функция чтения function Read(Pattern: Cardinal): Cardinal;var pHandle: LongInt; P: Cardinal; NumRead: DWORD_PTR;begin pHandle := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,False,GameID); if ReadProcessMemory(pHandle, Ptr(Pattern),@P,SizeOf(P),NumRead) then Result := P; CloseHandle(pHandle);end; Процедуры записи значения procedure WriteValue(Address: integer; Value: Cardinal);var pHandle: LongInt; NumWritten: DWORD_PTR;begin pHandle := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,False,GameID); WriteProcessMemory(pHandle,Ptr(Address),@Value,SizeOf(Value),NumWritten); CloseHandle(pHandle);end;procedure WriteBytes(Adress: Integer; Value: array of Byte);var pHandle: LongInt; NumWritten: DWORD_PTR;begin pHandle := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,False,GameID); WriteProcessMemory(pHandle,Ptr(Adress),@Value,SizeOf(Value),NumWritten); CloseHandle(pHandle);end; Если возможно то с примером буду очень благодарен Изменено 22 ноября, 2015 пользователем Devil9313 Ссылка на комментарий Поделиться на другие сайты Поделиться
Cemi4ka Опубликовано 22 ноября, 2015 Поделиться Опубликовано 22 ноября, 2015 Функция VirtualProtect позволяет изменить атрибуты защиты указанного региона виртуального адресного програнства указанного процесса.{ Вариант 1 }function VirtualProtectEx( hProcess: THandle; //дескриптор процесса lpAddress: Pointer; // начальный адрес фрагмента памяти dwSize: DWORD; // размер фрагмента памяти flNewProtect: DWORD; // новые атрибуты защиты lpflOldProtect: Pointer // старые атрибуты защиты): BOOL; stdcall; overload;{ Вариант 2 }function VirtualProtectEx( hProcess: THandle; //дескриптор процесса lpAddress: Pointer; // начальный адрес фрагмента памяти dwSize: DWORD; // размер фрагмента памяти flNewProtect: DWORD; // новые атрибуты защиты var OldProtect: DWORD // старые атрибуты защиты): BOOL; stdcall; overload;Описание Вы можете установить атрибуты доступа только для страниц, под которыми присутствует физическая память. Если хотя-бы под одной из страниц указанного диапазона нет физической памяти, то функция вернет ошибку и никакого изменения атрибутов защиты не произойдет.Функция VirtualProtectEx в целом идентичнафункции VirtualProtect, за исключением того, что позволяет изменять атрибуты защиты страниц памяти любого указанного процесса.Windows NT/2000: Указание атрибута PAGE_GUARD доступа к странице позволяет создавать в памяти защищаемые страницы. Создание таких страниц позволяет нам отловить попытки доступа к странице. Для большей информации смотрите раздел "Создание защищаемых страниц".Windows 95/98: Вы не можете использвоать функцию VirtualProtect к любому региону адресного пространства, расположенного внутри разделяемого адресного пространства (от $80000000 до $BFFFFFFF).Требования Windows NT/2000: Требуется Windows NT 3.1 или более поздняя версияWindows 95/98: Требуется Windows 95 или более поздняя версияБибиотека: Kernel32.dllПодключаемый модуль: Windows Источник : http://www.hot.ee/memman/virtual/VirtualProtectEx.html Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 22 ноября, 2015 Поделиться Опубликовано 22 ноября, 2015 Добрый день!https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa366899.aspx1й параметр - хэндл открытого процесса2й - (указатель) адрес памяти, для которой необходимо изменить модификатор доступа3й - размер блока памяти, для которого необходимо изменить модификатор доступа4й - новый модификатор доступа5й - (указатель) переменная размером 4 байта, в которую запишется старый модификатор доступа Ссылка на комментарий Поделиться на другие сайты Поделиться
Cemi4ka Опубликовано 22 ноября, 2015 Поделиться Опубликовано 22 ноября, 2015 Пример записи с изминением атрибута защиты блока памяти :procedure Write(ProcessID: Cardinal; WriteAdress: Integer; WriteValue: array of Byte);varpHandle:LongInt;Bytes : Cardinal;Aob_old_Protect_OFF: dword;Aob_old_Protect_ON:dword;beginpHandle:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,false,ProcessID);VirtualProtectEx(pHandle,ptr(WriteAdress),SizeOf(WriteValue),PAGE_EXECUTE_READWRITE,Aob_old_Protect_OFF);//Устанавливает атрибут Чтение\Запись (PAGE_EXECUTE_READWRITE)Application.ProcessMessages;WriteProcessMemory(pHandle,ptr(WriteAdress),(@WriteValue),SizeOf(WriteValue),Bytes);VirtualProtectEx(pHandle,ptr(WriteAdress),SizeOf(WriteValue),Aob_old_Protect_OFF,Aob_old_Protect_ON);//ВвостанавливаемCloseHandle(pHandle);End; 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Devil9313 Опубликовано 22 ноября, 2015 Автор Поделиться Опубликовано 22 ноября, 2015 (изменено) Спасибо ребят за помощь!!! Изменено 22 ноября, 2015 пользователем Devil9313 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения