Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2013, 08:34   #1
constant_ural
Пользователь
 
Регистрация: 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 регистры, отследить, где искажение ?
Если мои рассуждения неверны, пожалуйста поправьте меня. Спасибо.
constant_ural вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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