Всем привет Модифицирую память другого процесса функцией WriteProcessMemory. Перечисляю все аллокированные регионы, отбрасываю все что не MEM_COMMIT. Далее на накоторых регионах при попытке записи получаю Код (Text): ERROR_INVALID_PARAMETER (00000057) Выясняется, что они имеют атрибут PAGE_READONLY. Пытаюсь сменить атрибуты: Код (Text): VirtualProtectEx(hProcess, BaseAddress, RegionSize, PAGE_READWRITE, &OldProtect ); и получаю опять же ERROR_INVALID_PARAMETER (00000057) если менять не на PAGE_READWRITE а на PAGE_WRITECOPY, то атрибуты меняются успешно, но при попытке записи опять получим ERROR_INVALID_PARAMETER Скажите, это вообще возможно, чтобы писать в PAGE_READONLY, если да, то где я туплю? Спасибо
amitophia, спасибо за ответ, Base Addess: 0x001D0000 RegionSize : 0x0003D000 если перечислить у notepad'a XP'ного регионы, то такой будет там. с READ_ONLY атрибутом. а писать пытаюсь, например по адресу 0x209DDE , как видим адрес из этого региона. Я вообще склоняюсь к мысли, что изменить PAGE_READONLY и писать туды нельзя. (
Если я правильно понял, вот сдесь: В них нельзя писать по определению. Кстати просто так сбрасывать этот флаг тож нельзя. ЗЫ: PAGE_WRITECOPY его не сбрасывает.
_Serega_ мне кажется ты не совсем прав. смотри, если почитать описание структуры MEMORY_BASIC_INFORMATION, то MEM_COMMIT это одно из значений поля State, которое определяет состояние региона памяти, конкретно MEM_COMMIT означает, что память аллокирована и может использоваться для чтения/записи/выполнения. а уж Protect как раз определяет чего с регионом конкретно можно творить, так вот мне нужно из рид онли, сделать его еще и писабельным
К счастью, не совсем ))), а просто не так понял. 1. С какими параметрами вызываешь VirtualProtectEx() для того адреса? 2. Есть ли антивири фаеры и пр?
_Serega_ 1. см первый пост, hProcess - вылиден(открыт с PROCESS_ALL_ACCESS), Base Addess = 0x001D0000, RegionSize = 0x0003D000. 2. есть только фаер sygate, но он молчит.
JohnSmith Если посмотреть Memory map в OllyDbg, то увидим, что этот регион не просто READ_ONLY, а особый Mapped регион (у меня в XP-SP2 - это проекция windows\system32\locale.nls). Простое тыкание в OllyDbg, показывает что изменить атрибуты любого Map-региона не получается - ОС не разрешает, а вот любые приватные регионы или образы модулей - пожалуйста
leo спасибо! я действительно забыл про memory map в olly. у меня в xp sp2 этот регион тоже mapped и является проекцией locale.nls выходит что писать легальными способами туда нельзя. винхексовский редактор памяти тоже обламывается. ну и ладно, просто значит просто отброшу MEM_MAPPED регионы, благо MEMORY_BASIC_INFORMATION.type такую информацию предоставляет. Всем помогавшим спасибо!