|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 28, 2004 05:28:42 Подскажите plz ответ вот на какой вопрос: здесь говорили, что если ничего не менять, то по умолчанию запись в NTDLL.DLL будет произведена только в контексте вызвавшего драйвер приложения, так? у меня же происходит все наоборот - изменения происходят во ВСЕХ процессах :( Почему ?? Влияет ли sice на это ? Как избежать? br, Serg |
|
|
Дата: Июл 28, 2004 17:56:48 Можно подробнее. Айс сбрасывает флаг HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Memory Management\EnforceWriteProtection В памяти он в MmEnforceWriteProtection (не экспортируется). Деталей не знаю, но возможно в этом дело. |
|
|
Дата: Июл 29, 2004 05:27:17 Если ты для записи используешь драйвер(например sys для win2000/XP),то можешь писать в любые облости памяти. Что кстати и использует SIce. |
|
|
Дата: Июл 29, 2004 05:56:34 Я из приложения (test.exe), используя SC Manager ( 2`й урок Four-F :) ), запускаю драйвер, в DriverEntry делаю вот что: убираю WP флаг, пишу свой код в NTDll.Dll (в любую экспортируемую функцию). По идее, этот код должен отработать только для этого приложения (test.exe), однако он остается в NTDll.Dll и для новых запускаемых приложений :(. Так и должно быть ?? |
|
|
Дата: Июл 29, 2004 07:54:06 Да, так и должно быть. Чтобы код изменялся только для текущего процесса, пиши из user mode или не попробуй не убирать WP, хотя насчёт этого точно не знаю. |
|
|
Дата: Июл 29, 2004 19:41:34 [ ProgramMan: Если ты для записи используешь драйвер(например sys для win2000/XP),то можешь писать в любые облости памяти. Что кстати и использует SIce. ] Не возьмусь сказать, что использует айс, но в read-only память нельзя писАть, даже из драйвера. Если она в юзер моде, то спасает wp, а если в ядре, то ремапинг надо делать. А флг EnforceWriteProtection как раз, вроде, и отрубает защиту на read-only память, но не уверен, что он именно для этого. [ SergeyM: Я из приложения (test.exe), ... запускаю драйвер, в DriverEntry ] Если ты в DriverEntry, то ты не в контексте своего test, а в контексте процесса "system". |
|
|
Дата: Июл 30, 2004 06:50:43 SergeyM чё то я паники не понял, из дравера писать можно куда угодно, если wp не запрещает, и никто не будет являться посредником подобной операции в данном случае. В другом случае, если запись производится из пользователя(при наличии определённого разрешения системы и привелегий), ты имеешь посредника в лице менеджера памяти, миханизмы которого и осуществляют данную операцию copyonwrite, игра с данным битом в физическом пте. в результате чего происходит.... да сам знаешь чего, так вот после этого ты и получишь изменение кода в собственном контексте и только в нём, поскольку как всё это было выполнено с ведома оси, а в превом случаеось ни сном ни духом. |
|
|
Дата: Июл 30, 2004 06:57:59 хм а вот ещё прикол, писал яна днях монитор по типу Русиновического, толко перехват не irp пакетов а параметров некоторых функций NativeAPI, и мне нужно было взяить коммандную строку процесса из PEB, на интересную фишку наткнулся, оказывается, процесс System существует только в KernelMode, а ползовательского кода нема, .... може я чего затупил...но всё же по крайней мере никакого Peb а я там не нашёл, Функция MmGetPhysicalAddress возвращала 0 для адреса Peb. |
|
|
Дата: Июл 30, 2004 07:03:28 Four-F Не возьмусь сказать, что использует айс, но в read-only память нельзя писАть, даже из драйвера. Если она в юзер моде, то спасает wp, а если в ядре, то ремапинг надо делать. А флг EnforceWriteProtection как раз, вроде, и отрубает защиту на read-only память, но не уверен, что он именно для этого. Сэр, а вы ни разу не обращали внимание на маты айса по поводу того самого ключа в реестре, айс от студии 2.7 уже не ругался, а тихо сам ключик куда надо ставил, а вот версии подревнее прямо таки изводились. Айс использует тоже самое, что и все остальные... |
|
|
Дата: Июл 31, 2004 01:48:26 · Поправил: Four-F [ CARDINAL: Сэр, а вы ни разу не обращали внимание на маты айса по поводу того самого ключа в реестре... ] Нет, не доводилось. Я бы был очень признателет, если бы ты объяснил мне для чего нужен этот флаг, кто и когда его проверяет и т.п. А то как-то времени на всё не хватает. [ CARDINAL: ...из дравера писать можно куда угодно, если wp не запрещает,... ] Я провёл один эксперимент и должен сказать, что заблуждался (точнее меня обманули :) ) по поводу флага WP в CR0. Заблуждался я по той простой причине, что в "Intel Architecture Software Developer’s Manual Volume 3: System Programming" черным по белому написано: "Inhibits supervisor-level procedures from writing into user-level read-only pages when set; allows supervisor-level procedures to write into user-level read-only pages when clear." Т.е. из этого можно заключить что писать в kernel-level read-only pages нельзя, даже сбросив WP. Я даже припоминаю, что делал какие-то эксперименты, которые это подтверждали. Возможно я делал что-то неправильно. Вот код. После MmProtectMdlSystemAddress/PAGE_READONLY получим read only страницу. Если убрать манипуляции с CR0, то mov dword ptr [eax], 87654321h вызовет BSOD с кодом ATTEMPTED_WRITE_TO_READONLY_MEMORY. Если сбросить WP, то спокойно пишем в kernel-level read-only page. Я уже давно не верю DDK. Теперь придется ещё и Intel недоверять. .const
CCOUNTED_UNICODE_STRING "MmProtectMdlSystemAddress", g_usMmProtectMdlSystemAddress, 4
.code
TryToWriteToReadOnlyMemory proc
local pMemory:PVOID
local pMdl:PVOID
local pReadOnlyMemory:PVOID
invoke ExAllocatePool, PagedPool, PAGE_SIZE
.if eax != NULL
mov pMemory, eax
mov dword ptr [eax], 12345678h
invoke IoAllocateMdl, pMemory, PAGE_SIZE, FALSE, FALSE, NULL
.if eax != NULL
mov pMdl, eax
invoke MmProbeAndLockPages, pMdl, KernelMode, IoReadAccess
invoke MmMapLockedPagesSpecifyCache, pMdl, KernelMode, MmNonCached, \
NULL, FALSE, NormalPagePriority
.if eax != NULL
mov pReadOnlyMemory, eax
invoke MmGetSystemRoutineAddress, addr g_usMmProtectMdlSystemAddress
.if eax != NULL
push PAGE_READONLY
push pMdl
call eax ; MmProtectMdlSystemAddress, pMdl, PAGE_READONLY
.if eax == STATUS_SUCCESS
mov eax, cr0
push eax
and eax, not 010000000000000000y
mov cr0, eax
mov eax, pReadOnlyMemory
mov dword ptr [eax], 87654321h
pop eax
mov cr0, eax
.endif
.endif
invoke MmUnmapLockedPages, pReadOnlyMemory, pMdl
.endif
invoke MmUnlockPages, pMdl
invoke IoFreeMdl, pMdl
.endif
invoke ExFreePool, pMemory
.endif
ret
TryToWriteToReadOnlyMemory endp
В любом случае, я лично не связывался бы с WP, по крайней мере для записи в kernel-level read-only page. Лучше юзать ремапинг, как умные дядьки советуют (например Руссинович). http://www.wasm.ru/forum/index.php?action=vthread&forum=4&topic=5842 |
|
|
Дата: Июл 31, 2004 01:54:51 Да забыл сказать. Код для XP+ из-за MmProtectMdlSystemAddress. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.144 |