Здравствуйте!
Нет ли у кого-нибудь информации о методах перехвата из драйвера не Native API функций.
Например, перехват MessageBox и запись всего выдаваемого в файл.
User mode не подходит, т.к. данные необходимо обрабатывать в драйвере и библиотеку-перехватчик (которая будет следить и передавать данные в драйвер) можно выгрузить (процессом-злоумышленником) гораздо проще, чем драйвер, также можно вмешаться в процесс обмена данными между библиотекой и драйвером. Хотя этому и можно противодейсьвовать (шифрование, контроль целостности пакетов), но все-же желательно обеспечить перехват некоторых библиотечных функций, не имеющих аналогов среди Native API.
Заранее благодарен за любую помощь.
Здравствуйте, ns2005, Вы писали:
N>Здравствуйте! N>Нет ли у кого-нибудь информации о методах перехвата из драйвера не Native API функций. N>Например, перехват MessageBox и запись всего выдаваемого в файл. N>User mode не подходит, т.к. данные необходимо обрабатывать в драйвере и библиотеку-перехватчик (которая будет следить и передавать данные в драйвер) можно выгрузить (процессом-злоумышленником) гораздо проще, чем драйвер, также можно вмешаться в процесс обмена данными между библиотекой и драйвером. Хотя этому и можно противодейсьвовать (шифрование, контроль целостности пакетов), но все-же желательно обеспечить перехват некоторых библиотечных функций, не имеющих аналогов среди Native API. N>Заранее благодарен за любую помощь.
1) в ядре нет MessageBox.
2) что подразумевается под обеспечить перехват некоторых библиотечных функций, не имеющих аналогов среди Native API.
kalsarikännit
Re[2]: Kernel mode перехват библиотечных API функций
Здравствуйте, IID, Вы писали:
IID>1) в ядре нет MessageBox. IID>2) что подразумевается под обеспечить перехват некоторых библиотечных функций, не имеющих аналогов среди Native API.
Я знаю, что в ядре нет MessageBox. Поэтому и возник данный вопрос. Перехват Native функций довольно хорошо описан.
А обеспечить перехват некоторых библиотечных функций, не имеющих аналогов среди Native API означает, что есть библиотека (user32.dll), есть функция (MessageBox) этой библиотеки.
Необходимо в kernel mode перехватить API функцию по известным: имени библиотеки, имени функции, списку и типам параметров данной функции, выделить, в данном примере, текст сообщения (выдаваемого в системе функцией MessageBox) и, скажем, сохранить его в файл, либо, как вариант, сделать так, чтобы, к примеру, сообщение с текстом "Sample Text", не было показано пользователю, т.е. запретить появление MessageBox с таким (или произвольным) текстом.
Ух....
Аналоги среди Native API, это, например:
CreateFile,- достаточно перехватить Native API ZwCreateFile;
WriteFile,- достаточно перехватить Native API ZwWriteFile и т.д.
А у различных библиотечных функций таких аналогов нет.
Re[3]: Kernel mode перехват библиотечных API функций
Здравствуйте, ns2005, Вы писали:
N>Здравствуйте, IID, Вы писали:
IID>>1) в ядре нет MessageBox. IID>>2) что подразумевается под обеспечить перехват некоторых библиотечных функций, не имеющих аналогов среди Native API. N>Я знаю, что в ядре нет MessageBox. Поэтому и возник данный вопрос. Перехват Native функций довольно хорошо описан. N>А обеспечить перехват некоторых библиотечных функций, не имеющих аналогов среди Native API означает, что есть библиотека (user32.dll), есть функция (MessageBox) этой библиотеки. N>Необходимо в kernel mode перехватить API функцию по известным: имени библиотеки, имени функции, списку и типам параметров данной функции, выделить, в данном примере, текст сообщения (выдаваемого в системе функцией MessageBox) и, скажем, сохранить его в файл, либо, как вариант, сделать так, чтобы, к примеру, сообщение с текстом "Sample Text", не было показано пользователю, т.е. запретить появление MessageBox с таким (или произвольным) текстом. N>Ух.... N>Аналоги среди Native API, это, например: N>CreateFile,- достаточно перехватить Native API ZwCreateFile; N>WriteFile,- достаточно перехватить Native API ZwWriteFile и т.д. N>А у различных библиотечных функций таких аналогов нет.
У CreateWindow есть тоже аналог, но он не экспортируется явно. Указатели на все подобные функции лежат во второй SDT (Service Descriptor Table), а сами функции — в win32k.sys. Для перехвата нужно знать индексы функций или вытвскивать их автоматически, анализируя соотв. функции из user32.dll.
Re[3]: Kernel mode перехват библиотечных API функций
Здравствуйте, ns2005, Вы писали:
N>Я знаю, что в ядре нет MessageBox. Поэтому и возник данный вопрос. Перехват Native функций довольно хорошо описан.
ну а раз в ядре его нет — что будем перехватывать ? обращения к GDI (win32k.sys) ? смысла нет никакого.
N>Ух.... N>Аналоги среди Native API, это, например: N>CreateFile,- достаточно перехватить Native API ZwCreateFile; N>WriteFile,- достаточно перехватить Native API ZwWriteFile и т.д.
я знаком с NativeAPI
N>А у различных библиотечных функций таких аналогов нет.
более того, вызов библиотечной ф-ии запросто может вообще не обратиться к ядру. И что в итоге будем в ядре перехватывать ?
Без патчинга юзермодного кода всё равно не обойтись. А раз так — не лучше ли в ядре установить защиту от изменения юзермодного патча ? (например ограничить вызов NtProtectVirtualMemory/NtWriteVirtualMemory и тому подобных)
kalsarikännit
Re[4]: Kernel mode перехват библиотечных API функций
Здравствуйте, IID, Вы писали:
IID>я знаком с NativeAPI
Извините, если мой пример обидел Вас.
Я его привел для наглядности, а не для того, чтобы кого-то оскорбить.
Учитывая все сказанное, я могу предположить, что мне все посоветовали воспользоваться user-mode перехват.
Если это так, не могли бы Вы посоветовать, где мне найти примеры подобной реализации (как я понял, это будет dll).
Здравствуйте, ns2005, Вы писали:
N>Здравствуйте! N>Нет ли у кого-нибудь информации о методах перехвата из драйвера не Native API функций. N>Например, перехват MessageBox и запись всего выдаваемого в файл.
Перехват ring-3 кода драйвером подразумевает организацию и использование шлюзов.
Самый простой пример — int3. При выполнении инструкции генерируется исключение и переход по IntGate#3 на обработчик ядра.
Можно даже прицепиться к стандартному обработчику ОС, но это наверное не интересно .
Подробнее о шлюзах — IA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming Guide.
Можно так же использовать Debug Registers или привелегированные инструкции, суть таже.
В качестве примера можно посмотреть сорцы отладчика режима ядра BlindStudio Mamaich'а здесь.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: Kernel mode перехват библиотечных API функций
Здравствуйте, IID,
N>>Я знаю, что в ядре нет MessageBox. Поэтому и возник данный вопрос. Перехват Native функций довольно хорошо описан.
IID>ну а раз в ядре его нет — что будем перехватывать ? обращения к GDI (win32k.sys) ? смысла нет никакого.
Ну SoftICE перехватывает же как-то MessageBoxA .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[5]: Kernel mode перехват библиотечных API функций
Здравствуйте, gear nuke, Вы писали:
GN>Здравствуйте, IID,
N>>>Я знаю, что в ядре нет MessageBox. Поэтому и возник данный вопрос. Перехват Native функций довольно хорошо описан.
IID>>ну а раз в ядре его нет — что будем перехватывать ? обращения к GDI (win32k.sys) ? смысла нет никакого.
GN>Ну SoftICE перехватывает же как-то MessageBoxA .
не в счёт Ты скипнул мои слова: Без патчинга юзермодного кода всё равно не обойтись.
kalsarikännit
Re[5]: Kernel mode перехват библиотечных API функций
Здравствуйте, ns2005, Вы писали:
N>Здравствуйте, IID, Вы писали:
IID>>я знаком с NativeAPI N>Извините, если мой пример обидел Вас. N>Я его привел для наглядности, а не для того, чтобы кого-то оскорбить.
N>Учитывая все сказанное, я могу предположить, что мне все посоветовали воспользоваться user-mode перехват. N>Если это так, не могли бы Вы посоветовать, где мне найти примеры подобной реализации (как я понял, это будет dll).
совсем необязательно DLL — можно выделить память в чужом процесса (NtOpenProcess + NtAllocateVirtualMemory), записать туда свой код и пропатчить usermode вызовы на себя. Тогда не так заметнее будет. Примеры можно попробовать поискать по "Dll injection" + "Code injection"
kalsarikännit
Re[6]: Kernel mode перехват библиотечных API функций
Здравствуйте, IID, Вы писали:
IID>>>ну а раз в ядре его нет — что будем перехватывать ? обращения к GDI (win32k.sys) ? смысла нет никакого.
GN>>Ну SoftICE перехватывает же как-то MessageBoxA .
IID>не в счёт Ты скипнул мои слова: Без патчинга юзермодного кода всё равно не обойтись.
По поводу скипнутых слов — он может ещё и Debug Registers использовать .
Хотя они вроде не имеют отношения к выделенному.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth