|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 19, 2004 06:37:34 Hi! Ответьве plz, кто знает, на два вопроса: Возможно ли из драйвера (*.sys) получить возможность записи в память, выше 07FFFFFFFh ? например в kernel32.dll или ntdll.dll. Возможно ли из драйвера выделение памяти выше 080000000h и ее последующее использование из пользовательского приложения (exe/dll) - т.е. возможно ли осуществление взаимодействия между драйвером и ring3 приложением ? как? ps. Если есть статьи или примеры, укажите plz. Спасибо! br, Serg |
|
|
Дата: Июл 19, 2004 08:10:56 Всё чё касактся статей - то статьи Four-F на сайте. Что касается записи в помять, то - куда угодно, если данный вирт. адрес существует. В kernel32 писать можно только когда Ты в контексте user-процесса, где она спроецирована. В контексте процесса System её нет. Зато ntdll - есть. |
|
|
Дата: Июл 19, 2004 08:40:46 Hi! Всё чё касактся статей - то статьи Four-F на сайте. Спасиб! Статьи действительно зашибенные, только что нашел - с разделяемой памятью все стало ясно. Что касается записи в помять, то - куда угодно, если данный вирт. адрес существует. В kernel32 писать можно только когда Ты в контексте user-процесса, где она спроецирована. В контексте процесса System её нет. Зато ntdll - есть. Т.е. если я запускаю приложение, которое стартует драйвер, то этот драйвер все равно не сможет производить запись в kernel32.dll, правильно? а ntdll.dll разве не проицируется также, как и kernel32.dll для каждого приложения? br, Serg |
|
|
Дата: Июл 19, 2004 09:33:26 ntdll конечно же тоже проецируется. При вызове DeviceIoControl Твоя dispatch_proc будет вызвана в контексте Твоего процесса. Пиши в kernel на здоровье. А вообще в в одной из статей Four-F есть табличка - что в контексте какого процесса. Посмотри. |
|
|
Дата: Июл 19, 2004 10:23:36 Возможно ли из драйвера (*.sys) получить возможность записи в память, выше 07FFFFFFFh ? например в kernel32.dll или ntdll.dll. Вообще-то эти библиотеки находятся ниже 7FFFFFFFh, в них можно писать из user-mode, правда изменение затронет только текущий контекст. А вот если на уровне страниц разрешить запись, то драйвер может писать в секцию кода системных библиотек и изменения затронут все процессы. Так softice делает, когда ставишь допустим bpx messageboxa, то бряк срабатывает в любом процессе. Возможно ли из драйвера выделение памяти выше 080000000h и ее последующее использование из пользовательского приложения (exe/dll) - т.е. возможно ли осуществление взаимодействия между драйвером и ring3 приложением ? как? См. DDK - ExAllocatePool для выделения памяти, затем ставишь бит доступа из user-mode в таблице страниц для каждой из выделенных страниц и всё. Но это будет также действовать только на текущий процесс, т.к. каталоги и таблицы страниц для каждого процесса свои. Если надо, могу сюда кинуть процедуру для открытия доступа. |
|
|
Дата: Июл 19, 2004 18:28:37 · Поправил: PavPS Кстати да, придетсЯ заменить бит "читаемости/записи" в страниуах kernek32 на writeble. По умолчанию они readeble. Sorry! Про это в статьях про защищенные режим и каталог табиц страниц 2 dragon А можно и при помощи MmMapLockedPagesSpecifyCache |
|
|
Дата: Июл 20, 2004 10:24:00 · Поправил: Безпощадный даос тут я один прикол вычитал в мануале по айсу. Так вот там писано, шо реальные физические PTE защищаются от искривления виртуальными PTE, это такие же пте, только их биты трактуются осью быть только ей понятными, короче, там бит валид скинут, и при наскоке на такую пте соответственно получаем исключение, которое диспетчер памяти трактует по своему, вся эта тема была замучена для того, что бы обеспечить процессорную независимость, так как 2к может работать не только на интел платформе. аппаратные пте рулятся виртуальными, этотак, для тех кто не в курсе. Так вот дальше, ежели кто из дров пытается кривить физ пте напрямую, то вот весь ентот миханизм данному злодейству всячески препятствует. Так вот я не понял, хлупость они там что ли спароли в мануале или чего то другое имели ввиду, но я этот так понял. Сам я прямо и без проблем курочил аппаратные пте и всё работало как мне надо, никто из высших не вмешивался . SergeyM так шо не басиь, пиши читай, единственный блок пост, эт бит WP регистра CR0/ См. DDK - ExAllocatePool для выделения памяти, затем ставишь бит доступа из user-mode в таблице страниц для каждой из выделенных страниц и всё. Но это будет также действовать только на текущий процесс, т.к. каталоги и таблицы страниц для каждого процесса свои. Если надо, могу сюда кинуть процедуру для открытия доступа. не правда, для всех процессов, так как память режима ядра одна на всех, это как книга, с одно обложкой, если эта обложка и есть память ядра, то остальное поймёшь. Опять же, читать Руссиновича. а память резервировать лучше из неподкачиваемого пула, что бы добиться максимального эффекта. а , вот ещё кору вычитал ф мануале по айсу, пишут, шо типа память оттуда лучше не выделять больше страницы, а то БСОД вам товарищ, во блин чушь, !!!!!! |
|
|
Дата: Июл 20, 2004 13:36:24 CARDINAL Как я понял ты реально поработал с PDE/РТЕ поэтому у меня к тебе вопрос:насколько я понял если страница сброшена в файл подкачки то 0-вой бит Р (валид) равен 0 и старшие 20 бит (все в РТЕ) указывают оффсет этой страницы в файле подкачки.Вопрос:как можно в реальном режиме 1)отследить изменение этого бита (Р) или 2)узнать что наша страница собирается туда попасть ну или опять таки уже там. |
|
|
Дата: Июл 22, 2004 05:14:18 я НЕ СОВСЕМ ПОНИМАЮ, что значит отследить изменение этого бита ? потом я не понимаю , как это из реального режима, скорее всего из задачи v86 процесса NTVDM? Итак, есть два метода, которые менеджер памяти юзает при урезании рабочих наборов и перераспределении памяти, первый, это когда удаляются страницы, обращения к которым не происходило определённый промежуток времени (6 мин по умолчанию), второй метод типа конвеера, FIFO. Винда юзает чаще первый метод. Как отследить, только винда ведает , когда страница попадёт в своп, пиши дравер, создай в нем поток, тока не намути сильно с приоритетами, и проверяй себе этот бит выбранной страницы, .... ну , а больше как, можно конечно просмотреть базу PFN, но, это надо копаца, я туда ещё неходил, некада, у меня фря рулит, как я сказал, читать Руссиновича |
|
|
Дата: Июл 22, 2004 09:55:45 Вот это да, люди, как стать таким же умным, а ? :)) Если кто-нибудь может привести пример кода, для изменения флага WP для записи в ntdll, запостите сюда plz.? |
|
|
Дата: Июл 22, 2004 15:17:44 · Поправил: Four-Fmov eax, cr0 push eax and eax, not 010000000000000000y mov cr0, eax ; ... pop eax mov cr0, eax |
|
|
Дата: Июл 22, 2004 16:36:25 Four-F ты кажется copy & past неверно сделал :) может так: mov eax, cr0 push eax and eax, not 010000000000000000y mov cr0, eax ; ... pop eax mov cr0, eax |
|
|
Дата: Июл 22, 2004 17:05:18 Да. Естественно. |
|
|
Дата: Июл 23, 2004 09:21:47 Не получается :( Вот код, который устанавливает 16 бит (WP) в 1, проверяет, что там 1, затем читает и пишет в ntdll.dll (RtlAllocateHeap) ; Set 16 Bit MOV EAX, CR0 MOV EDX, 16 BTS EAX, EDX ; Get 16 bit MOV EAX, CR0 BT EAX, EDX SBB EAX, EAX AND EAX, 1 ; Read&Write MOV EAX, ntdll!RtlAllocateHeap MOV EDX, [EAX] MOV [EAX], EDX На последней строчке ошибка: 0C0000005h Что не так? br, Serg |
|
|
Дата: Июл 23, 2004 09:57:39 ; Get 16 bit MOV EAX, CR0 BT EAX, EDX SBB EAX, EAX AND EAX, 1 а что с результатом ? cmp/jcc напрашивается... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.097 |