Сейчас на форуме: (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Помогите с памятью
Посл.ответ Сообщение

Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 августа 2010 17:57 · Поправил: Snef
· Личное сообщение · #1

Здравствуйте еще раз, объясните новичку если нетрудно

Вот хочу сделать что-то вроде этого:
Code:
  1. VirtualFreeEx(hProcess,(LPVOID)Address,5,MEM_DECOMMIT);
  2. Address  = VirtualAllocEx(hProcess,(LPVOID)Address,5,MEM_COMMIT|MEM_RESERVE,PAGE_ READWRIT  E);
  3. //естественно не работает


Память в Address занята, например там байты 68 98 18 00 01 как можно их удалить и выделить память под свой код по тому же адресу ?
Отправляйте хоть куда, только не в msdn.(там уже был)




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 10 августа 2010 18:14
· Личное сообщение · #2

Тебе как раз в мсдн, выучить разницу между DECOMMIT и RELEASE, если память по этому адресу выделял ты.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 10 августа 2010 18:14
· Личное сообщение · #3

попробуй сначала выполнить VirtualProtectEx с PAGE_EXECUTE_READWRITE



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 августа 2010 18:40
· Личное сообщение · #4

Нет память выделял не я.
Vovan666 Поставить VirtualProtectEx с PAGE_EXECUTE_READWRITE перед VirtualFreeEx ? пробовал не получается.

Хочу в эти байты jmp вписать, но нужно чтобы перед записью у памяти был атрибут READWRITE. VirtualProtectEx(READWRITE) не помогает, а VirtualAllocEx работает если в него не указывать адресс.
Это хорошо для codecave. Но jmp на codecave тоже вписать надо.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 10 августа 2010 20:46
· Личное сообщение · #5

Что за бред? Для того, чтобы записать в уже выделенную память, ты лепишь ещё раз выделение памяти. А чего не чтение файла для разнообразия? Проблему надо нормально озвучивать, типа хочу вписать байты, но прав не хватает на запись. А не хочу сделать непойми чего с памятью. Для смены атрибутов есть VirtualProtect(Ex).



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 августа 2010 20:58
· Личное сообщение · #6

Сейчас все подробно распишу:

Code:
  1. DWORD oldprotect;
  2.  
  3. VirtualProtectEx(hProc,(LPVOID)Address, size,PAGE_READWRITE,&oldprotect);
  4. WriteProcessMemory(hProc,(LPVOID)Address,(LPVOID)0x100000, size,0);
  5. VirtualProtectEx(hProc,(LPVOID)Address, size,oldprotect,0);


Касперский ругается

Code:
  1. Address1 = (char*)VirtualAllocEx(hProc,(LPVOID)Address,size,MEM_COMMIT|MEM_RESERV E,PAGE_READWRITE);
  2. WriteProcessMemory(hProc,(LPVOID)Address1,(LPVOID)0x100000, size,0);
  3. VirtualProtectEx(hProc,(LPVOID)Address1, size,PAGE_EXECUTE_READWRITE,0);


Касперский не ругается.

Можно ли так же записать jmp? да\нет\можно но сложно\никто не скажет ? Не для вируса и т.п.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 10 августа 2010 21:50
· Личное сообщение · #7

В уже существующую память писать таким образом-бред, из-за какого-то касперского, выкинь его. Есть нормальный ВиртуалПротект, его и юзай, и не надо извращаться.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 10 августа 2010 22:25
· Личное сообщение · #8

Snef
Создаёте секцию(section object) размером с буфер. Мапите её и копируете в эту проекцию данные из изменяемого региона, после чего освобождаете проекцию. Затем освобождаете целевой регион и проецируете на его место секцию.



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 августа 2010 07:56 · Поправил: Snef
· Личное сообщение · #9

Clerk Спасибо, это пока еще слишко сложно для меня(разбирал ваше предложение на слова и гуглил :s5 Ладно забью на это

Cкажите почему не работает вот это ?

Code:
  1. (DWORD)Code = (DWORD)VirtualAllocEx(hProcess, 0, 5,MEM_COMMIT, PAGE_READWRITE);
  2. VirtualProtectEx(hProcess,(LPVOID)Code,5,PAGE_EXECUTE_READWRITE,&old);


Потом записываю туда свой код, потом jmp на него в нормальную память, код по адресу Code не выполняется. А если выделить сразу с PAGE_EXECUTE_READWRITE то выполняется. VirtualProtectEx не работает ?

Все заработало...Теперь оказалось что антивирус SetThreadContext палит...выкину его


 eXeL@B —› Вопросы новичков —› Помогите с памятью
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати