Сейчас на форуме: zds (+6 невидимых) |
eXeL@B —› Программирование —› Вопрос по Натив АПИ |
Посл.ответ | Сообщение |
|
Создано: 11 сентября 2012 14:43 · Личное сообщение · #1 Написал драйвер который аттачится к чужому процессу который работает в RING3 после аттача читать память этого процесса могу без проблем .. но при попытке записать все валится в BSOD .. подозреваю что пытаюсь писать в область READ_EXECUTE вопрос как из драйвера разрешить запись в эту область памяти ? |
|
Создано: 11 сентября 2012 14:49 · Личное сообщение · #2 |
|
Создано: 11 сентября 2012 14:55 · Личное сообщение · #3 |
|
Создано: 11 сентября 2012 15:05 · Личное сообщение · #4 |
|
Создано: 11 сентября 2012 15:10 · Личное сообщение · #5 |
|
Создано: 11 сентября 2012 16:06 · Личное сообщение · #6 |
|
Создано: 11 сентября 2012 16:17 · Личное сообщение · #7 |
|
Создано: 11 сентября 2012 16:19 · Личное сообщение · #8 |
|
Создано: 11 сентября 2012 16:20 · Личное сообщение · #9 |
|
Создано: 11 сентября 2012 16:24 · Личное сообщение · #10 Ну вообще DesiredAccess есть параметр в ZwOpenProcess, где можно задать желаемый уровень доступа. При чём тут права уже непонятно кем открытого хендла, вообще непонятно. А за сброс WP бита для записи в ринг3 бить надо и, возможно, даже ногами (С). Если область памяти связана напрямую с файлом, может случиться неприятность. |
|
Создано: 11 сентября 2012 16:32 · Личное сообщение · #11 CKA3KA пишет: дайте ссылку на мануал . .чета гугл по этим словам кудато посылает в даль Archer пишет: А за сброс WP бита для записи в ринг3 бить надо и, возможно, даже ногами (С) По что меня ногами, робит же, а на сколько стабильно нужно тс не говорил. |
|
Создано: 11 сентября 2012 16:37 · Личное сообщение · #12 Если хочется кошерно сделать, можно страницу памяти перемапить ещё с другими правами и писать в неё, вариантов в ядре овер 9000. А что касается сброса WP, если в 2 словах, то во-первых, костыль на многоядерных машинах, потому что свой cr0 везде, а IRQL задирать нельзя, потому что юзермод может быть выгружен в своп. А во-вторых, если пойдёт запись в проекцию секции файла, можно испоганить кеш винды. |
|
Создано: 11 сентября 2012 18:50 · Личное сообщение · #13 Ну, как по мне, так всё можно решить вообще малой кровью. Нужно, если я правильно понял задачу, записать что-то из дровины в память (юзермодную) какого-то левого процесса. Т.е. формально у нас есть процесс, который загружает драйвер - это процесс А. И есть просто ещё какой-то процесс, память которого мы будем патчить - процесс Б. Известно, что патчить мы будем память процесса Б в пользовательском адресном пространстве. Если в ядре нет никаких хитрых хуков, то дело выглядит примерно так. 1. Получаем в юзермоде Process Id процесса Б. 2. Передаём его в драйвер. 3. В драйвере вызывается PsLookupProcessByProcessId. Так мы находим EPROCESS процесса Б. 4. Выполняем KeStackAttachProcess с целью приаттачиться в процессу Б. Теперь драйверный код будет выполняться в контексте процесса Б. 5. Далее делаем вызов IoAllocateMdl, MmBuildMdlForNonPagedPool, MmMapLockedPagesSpecifyCache. 6. Пишем по нужному нам адресу нужную инфу - пишем напрямую, т.к. мы в другом процессе. 7. MmUnmapLockedPages, IoFreeMdl. 8. KeUnstackDetachProcess. 9. Радуемся. ----- Stuck to the plan, always think that we would stand up, never ran. | Сообщение посчитали полезным: plutos |
|
Создано: 12 сентября 2012 23:03 · Личное сообщение · #14 |
|
Создано: 12 сентября 2012 23:16 · Личное сообщение · #15 Вообще это хреновая практика, мягко говоря. Во-первых, надо быть в контексте приложения, куда собрался хендл отдавать. Во-вторых, некоторые функции возвращают kernel-only хендл. По-моему, к ZwOpenProcess это не относится, но менее хреновой эта практика от этого не становится. З.Ы. Вопросы все эти как-то мало отношения имеет к форуму. И в основном решаются гуглом и чтением документации. |
|
Создано: 12 сентября 2012 23:19 · Поправил: ARCHANGEL · Личное сообщение · #16 CKA3KA Да, но если я вас правильно понял, в вашем случае это не подойдёт, потому что открыть так процесс с нужными правами вам мешает драйвер защиты, который хучит SSDT в ядре, тем самым вызовы ZwOpenProcess, идущие через хук, не будут работать, как должны. В любом случае проверка этой гипотезы займёт несколько минут. Пробуйте. Как сказал Archer, методов там действительно очень много. Ещё один метод навскидку. Передаёте в ядро идентификатор, далее находите EPROCESS, потом ObOpenObjectByPointer, а потом вновь полученный дескриптор используете для ZwProtectVirtualMemory, ZwWriteVirtualMemory. Правда, последние сервисы не экспортируются ядром, поэтому их номера определяете по ntdll.dll. Просто интересно - чем не подходит первый метод? ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 13 сентября 2012 14:26 · Личное сообщение · #17 |
eXeL@B —› Программирование —› Вопрос по Натив АПИ |