Текущий архив: 2003.07.14;
Скачать: CL | DM;
Вниз
Доступ к памяти процесса Найти похожие ветки
← →
DeadMeat (2003-05-11 21:55) [0]Может быть я всех достану этим вопросом (в смысле может его ещё кто задавал...), но мне надо узнать (а точнее узнать у вас), как получить доступ типа Read/Write к области памяти, занимаемой моим процессом... Заранее спасибо...
← →
NightAngel (2003-05-12 00:45) [1]Если я правильно понял вопрос - VirtualProtect().
← →
Morfein (2003-05-12 01:57) [2]Существует такой команда процессора MOV...:
MOV регистр, память
MOV память, регистр
MOV регистр, регистр
Пример:
var
x : dword;
begin
asm
mov eax, dword ptr [$00400000]
mov x, eax
end;
А есть ещё оператор ":=" (присваивание)
Пример:
var
x : dword;
p : pointer;
begin
p:=$00400000;
x:=dword(p^);
end;
← →
NightAngel (2003-05-12 02:30) [3]> Morfein © (12.05.03 01:57)
Всё верно, вот только когда Вы выполните MOV память,регистр, и эта память будет в странице с атрибутом запрещающим Write, вот тут-то Вы и получите по рукам.
← →
Morfein (2003-05-12 02:40) [4]Надо ещё постараться, чтобы найти в памяти своей же программы область с аттрибутом PAGE_READONLY (про область выше 0x7fffffff я не говорю - если человек хочет переписать память сист. билиотек, то в Win32 ему VirtualProtectEx не поможет)
← →
NightAngel (2003-05-12 03:10) [5]>Надо ещё постараться, чтобы найти в памяти своей же программы область с аттрибутом PAGE_READONLY
И стараться не надо. Страницы с исполняемым кодом Вашего процесса. Насчёт системных библиотек, то это только в Win9x, т.к. только в этих системах память, начиная с 2Gb, спроецирована на все контексты, присутствующие в системе и недоступна для модификации.
← →
DeadMeat (2003-05-12 14:11) [6]Вообще, мне надо изменить данные в области именно исполняемого кода, а не системных библиотек. Причём не вовремя работы этой области, а до этого момента... Про VirtualProtect я почитал, и честно говоря, меня в тупик поставило лишь одно: как узнать адрес, с которого начинается исполняемый код, и размер этой области...
← →
VMcL (2003-05-12 14:43) [7]IMHO, image base, указанный на закладке Linker в свойствах проекта (хранится в PE заголовке), но по-моему он может изменяться системой (с соответствующим изменением всех JMP, CALL и т. п.).
← →
NightAngel (2003-05-13 02:38) [8]> DeadMeat © (12.05.03 14:11)
VirtualProtect(GetModuleHandle(0),Размер файла,...)
← →
AlexRush (2003-05-13 11:05) [9]В заголовке PE модуля находится таблица секций - массив структур
IMAGE_SECTION_HEADER. В поле Characteristics нужной структуры устанавливаем бит 31:
var ish:IMAGE_SECTION_HEADER;
ish.Characteristics
:= ish.Characteristics OR IMAGE_SCN_MEM_WRITE;
Любая секция становится доступной для записи. Сам делал - работает.
← →
DeadMeat (2003-05-13 17:58) [10]Большое спасибо всем кто откликнулся...
> AlexRush
Не знаю почему, но этот метод у меня срабатывает только тогда, когда я прогу запускаю из Delphi, а в отдельном *.EXE-шнике срабатывает только метод NightAngel, но с небольшими переработками...
Ещё раз спасибо...
Страницы: 1 вся ветка
Текущий архив: 2003.07.14;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.008 c