|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.06.2013, 08:34 | #1 |
Пользователь
Регистрация: 25.06.2013
Сообщений: 14
|
Некорректная передача управления из Sysenter.
Хочу создать защиту для своей DLL. Для того, чтобы понять что делать взял пример защищенной DLL без исходного кода, только бинарник.
Первое, что я решил сделать – загрузить ее через LoadLibrary. Загрузки не происходит, выкидывается исключение. Загрузил в IDA, включил трассировку. Трассировка доходит до следующего места: 00002088 ntdll:ntdll_KiFastSystemCall mov edx, esp EDX=001FF728 00002088 ntdll:ntdll_KiFastSystemCall+2 sysenter После этого происходит передача управления сюда: .vmp1:5F30670E in eax, dx .vmp1:5F30670F push ecx .vmp1:5F306710 call sub_5F306FFC При этом выводится сообщение: «5F30670E: Priveleged instruction (exc.code c0000096, tid 8328 )» Ну и исключение генерируется. После этого я попробовал написать простенькую DLL, загрузить ее и также оттрассировать. В результате: выполнение кода почти что «один в один», но с той разницей, что sysenter передает управление обратно в вызывающую exe-программу (из которой загрузка DLL происходит), т.е. сразу после LoadLibrary, т.е. здесь все нормально. Верны ли мои дальнейшие рассуждения ? Инструкция sysenter обеспечивает быстрый доступ с прикладного уровня на уровень ядра (ринг 0). Инструкция принимает три скрытых аргумента из MSR регистров: SYSENTER_CS_MSR (174h), SYSENTER_ESP_MSR (175h), SYSENTER_EIP_MSR, по которым и будет передаваться управление. Однако, их можно и подменить. В этом случае, можно перенаправить поток выполнения на «левый» код. Что, возможно и произошло в моем случае. Если это так, то существуют ли способы мониторить эти MSR регистры, отследить, где искажение ? Если мои рассуждения неверны, пожалуйста поправьте меня. Спасибо. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
VS 2008 C++ передача управления Windows из длинных циклов | Dikar | Помощь студентам | 3 | 20.05.2013 17:03 |
PHP Forward (передача управления) | S-HaCK XORitY | PHP | 3 | 08.02.2012 22:11 |
Передача управления между компонентами | DeKot | Общие вопросы Delphi | 2 | 06.09.2010 15:38 |
Передача управления по SetFocus | promer | Компоненты Delphi | 6 | 11.03.2010 13:47 |
Некорректная печать | Natalie | Microsoft Office Word | 5 | 29.08.2008 11:08 |