· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Защита от записи в SDT в винде

Посл.отвђт Сообщенiе


Дата: Май 16, 2004 15:46:53

обнаружил, что на НЕКОТОРЫХ компах (вин 2000/ХР/2003) есть защита от записи в SDT. SEH фаулт уловить не может.
Есть выход - подправить реестр и перезагрузить машину, но это не выход. Можно ли как нето обойти защиту?


Дата: Май 17, 2004 05:01:29

Можно. Искать по форуму помогает!


Дата: Май 17, 2004 14:47:50

Corpse
А В ЧЁМ ТРАБЛЫ ТО ?? ПОСМОТРИ, НЕ УСТАНОВЛЕН ЛИ БИТ WP (16) РЕГИСТРА CR0 ? Насколько мне известно, в хапэ он был выставлен .


Дата: Май 17, 2004 16:25:55

Corpse, если в системе с w2k < 128 метров, то ntoskrnl отображается на маленькие (4кб) страницы и защиту памяти можно выставить для каждой страницы отдельно. Если памяти => 128, то отображение идет в большую (4мб) страницу. И защита, естественно, выставляется в read/write для всей страницы. Иначе ntoskrnl не сможет писать в свою секцию данных. Для ХР граница в 128 метров, вроде, сдвинута на 256.

Сброс бита WP в CR0, использующийся повсеместно, есть некультурный метод, т.к. защита снимается глобально. Кстати в интеловских доках написано, что этот флаг действует только если ядро пишет в юзерные (но не в ядерные) read-only страницы. Хотя, вроде, и для ядра это тоже работает. Я как-то эксперементировал с этим. Результатов, конечно не помню :), но помню, что там не всё так гладко было.

Вобщем, есть почти документированный способ через переотображения памяти. Для начала см. код "Figure 13 Writing Read-only Memory" к статье "The VTrace Tool: Building a System Tracer for Windows NT and Windows 2000" в MSDN.

Если есть исходники regmon, то см. \lib\reglib.c.

Или вот процедура, кот. переотображает read-only память для записи.
RemapToWrite proc pAddress:PVOID, dwSize:DWORD

local p:PVOID
local pMdl:PMDL

    invoke MmCreateMdl, NULL, pAddress, dwSize
    .if eax != NULL

        mov pMdl, eax

        invoke MmBuildMdlForNonPagedPool, pMdl

        mov eax, pMdl
        or (MDL PTR [eax]).MdlFlags, MDL_MAPPED_TO_SYSTEM_VA
        
        invoke MmProbeAndLockPages, pMdl, KernelMode, IoWriteAccess

        invoke MmMapLockedPages, pMdl, KernelMode
        .if eax != NULL

            mov ecx, pMdl
            mov ecx, (MDL PTR [eax]).ByteOffset
            add eax, ecx        ; + MmGetMdlByteOffset(pMdl)

            mov p, eax

            ; Write to it                 
            mov ecx, p
            mov dword ptr [ecx], 12345678h
            ;                             

            invoke MmUnmapLockedPages, p, pMdl
        .endif

        invoke ExFreePool, pMdl
    .endif

    ret

RemapToWrite endp


Если будешь использовать её для патча таблицы сервисов, то убери MmProbeAndLockPages, т.к. эта память и так заблокирована и 100% присутствует. Код для NT и выше. Если для 2000+, то лучше заменить MmCreateMdl -> IoAllocateMdl, MmMapLockedPages -> MmMapLockedPagesSpecifyCache, ExFreePool -> IoAllocateMdl.

См. также "MmMapLockedPages Returns Actual Virtual Address In SP4" в MSDN.

Также см. "Драйверы режима ядра. Часть 9 : Базовая техника: Работа с памятью. Разделяемая память"
Там не совсем то что те нужно, но тоже манипуляции с переотображением физической памяти.

Уфф... :)


Дата: Май 17, 2004 17:51:30

интеловцы п..дят в мануалах;
т3 гл. 4.11 описывыет "сказочные" возможности WP,
о которых беcпордонно умолчали в гл 2.5;

свлчи свлчи свлчи


Дата: Май 17, 2004 18:01:22

спасиб. буду пробывать.
у меня никогда меньше 256 памяти небыло, поэтому у себя такое я никогда не наблюда... теперь всё стало на свои места.


Дата: Май 17, 2004 18:01:40

Four-F
но ведь это же расточительно с точки зрения процессороного времени с точки зрения буферов трансляции адресов... Или хранить бальшую страинцу (TLB), которая не выгрузится, или кучу маленьких, который постоянно надо будет туда сюда перекладывать. Я не могу понять M$ ни в одном случае.....


Дата: Май 17, 2004 18:07:55

проблема была в том, что не мог понять почему на одних тачках всё нормально, а на других труба полная.


Дата: Май 17, 2004 19:29:32

Corpse
[offtop]Слушай, а ты случаем не тот corpse который A-311 Death напрогал???[/offtop]


Дата: Май 18, 2004 00:43:19

[ Corpse: у меня никогда меньше 256 памяти небыло, поэтому у себя такое я никогда не наблюда... ]

Ну это не беда. Уменьшить всегда можно.

multi(0)disk(0)rdisk(0)partition(1)\WINNT="2000 Pro" /fastdetect /noguiboot /maxmem=96


[ CARDINAL: но ведь это же расточительно с точки зрения буферов трансляции адресов... ]

Вынужден тебя огорчить. Всё именно так как ты сказал, но только наоборот. См. 3-ий том мануалов.

"3.6.2.3. MIXING 4-KBYTE AND 4-MBYTE PAGES
...
A typical example of mixing 4-KByte and 4-MByte pages is to place the operating system or executive’s kernel in a large page to reduce TLB misses and thus improve overall system performance."




ЗЫ: volodya, я там мыльнул тебе. Сам решай что с этим делать.


Дата: Май 18, 2004 15:17:11

Four-F
ну про количество памяти я говорил только к тому, что в голову просто не могло прийти, что это может влиять на наличие постраничной защиты.
но опять же - наличие в системе 512 мег памяти совсем не значит, что в SDT можно спокойно писать.
ровно как установленный 16 бит в CR0 это не указатель на то, что писать нельзя.

кстати вышеуказанный кусок кода верен только для NT 4.0 . Для 2К шаманство с возвращённым MmMapLockedPages значением не нужно.


Дата: Май 18, 2004 21:07:15

[ Corpse: но опять же - наличие в системе 512 мег памяти совсем не значит, что в SDT можно спокойно писать. ]

Очень может быть.


[ Corpse: ровно как установленный 16 бит в CR0 это не указатель на то, что писать нельзя. ]

Хрен его знает.


[ Corpse: кстати вышеуказанный кусок кода верен только для NT 4.0 . Для 2К шаманство с возвращённым MmMapLockedPages значением не нужно. ]

Он верен (точнее будет работать) для nt4 и далее. Про шаманство в KB199311 написано. Для nt4+sp4 и выше оно не нужно, но и не мешает.


Дата: Май 20, 2004 03:48:29

Four-F

Спасиба !!! Хм, теперь я ещё громче убедился, что не стоит везде и во всём слепо верить книгам отечественных авторов :))


Дата: Май 21, 2004 16:49:33

... и не отечественных тоже....


Дата: Май 27, 2004 11:41:14

Corpse

Вопрос тебя не Владимиром зовут


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066