Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Некорректная передача управления из Sysenter. 
:(
    Опции темы
constant
Дата 24.6.2013, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 22.7.2011

Репутация: нет
Всего: нет



Хочу создать защиту для своей 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 регистры, отследить, где искажение ? 
Если мои рассуждения неверны, пожалуйста поправьте меня. Спасибо.




PM MAIL   Вверх
DarthTon
Дата 1.7.2013, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 7.2.2009

Репутация: нет
Всего: 6



Цитата

Однако, их можно и подменить. В этом случае, можно перенаправить поток выполнения на «левый» код. Что, возможно и произошло в моем случае

Из юзермода это невозможно, запись осуществляется привилегированной инструкцией wrmsr. Значения соответствующих MSR регистров заполняются ядром при старте системы. 

В вашем случае, вероятно, сказалась разница в способе трассировки в первом случае и во втором. Разница в том, что если sysenter исполняется с возведённым флагом трассировки (EFLAGS_TF), что произошло в первый раз, то sysexit при переходе в ring3 не обязан восстанавливать значения регистров которые были на момент перехода в ring0, что и стало причиной неверного поведения в дальнейшем. Однако, ещё раз, это лишь моя догадка, т.к. я не знаю подробностей ваших тестов.
PM MAIL   Вверх
Google
  Дата 24.5.2019, 22:20 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.1402 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.