Re: ZwCreateSection, SEC_IMAGE и все-все-все
От: ononim  
Дата: 27.05.13 14:27
Оценка: 1 (1)
A>Проблема следующая.
A>Хочу создать в ядре свою проекцию ранее загруженной DLL. И не могу.
A>ZwOpenFile->ZwCreateSection(PAGE_WRITECOPY+SEC_IMAGE)->дальше маппинг.
A>Но вот в чем проблема. Страницы отмапленные не новые, а соответствуют страницам ранее загруженной DLL. То есть в хедерах уже поправлен imagebase на релоцированный и т.п.
Релоцирование происходит загрузчиком. Но есть одно НО. Называется оно ASLR. Оно делается в ядре при первой загрузке длл в память, и таки по сути пре-релокация длл на случайную базу. Работает эта штука только если в хедере образа проставлена поддержка ASLR.

A>Окей, создаю секцию с SEC_COMMIT, но тут уже другая проблема, когда я произвожу изменения, они записываются на диск (в общем, между повторными вызовами они постоянны), а я этого не хочу.

Указывайте writecopy в ZwMapViewOfSection. Кстати SEC_IMAGE и SEC_COMMIT — вещи разные, SEC_IMAGE — это не прямое отображение файла на АП как SEC_COMMIT.

A>Белый пушной зверек, как же мне создать свое отображение, в котором я мог хозяйничать, которое бы соответствовало содержимому на диске?

A>То есть мне нужна _новая_ моя приватная секция, а не существующая, которая берется из файлового объекта.
A>Заранее спасибо.
Вам таки нужно промапить имаж как имаж или просто сделать writecopy мэпинг данных файла? Если второе — ZwOpenFile->ZwCreateSection(..PAGE_WRITECOPY, SEC_COMMIT..)->ZwMapViewOfSection(..PAGE_WRITECOPY..)
Как много веселых ребят, и все делают велосипед...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.