eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Некорректная передача управления из Sysenter.
Посл.ответ Сообщение

Ранг: 0.1 (гость)
Статус: Участник

Создано: 24 июня 2013 23:48 · Поправил: constant New!
Цитата · Личное сообщение · #1

Хочу создать защиту для своей DLL. Для того, чтобы понять что делать взял пример защищенной DLL без исходного кода, только бинарник.
Первое, что я решил сделать – загрузить ее через LoadLibrary. Загрузки не происходит, выкидывается исключение. Загрузил в IDA, включил трассировку.

Трассировка доходит до следующего места:

Code:
  1.  
  2. 00002088 ntdll:ntdll_KiFastSystemCall        mov     edx, esp                  EDX=001FF728    
  3. 00002088 ntdll:ntdll_KiFastSystemCall+2      sysenter 


После этого происходит передача управления сюда:

Code:
  1.  
  2. .vmp1:5F30670E in      eax, dx
  3. .vmp1:5F30670F push    ecx
  4. .vmp1:5F306710 call    sub_5F306FFC
  5.  


При этом выводится сообщение:

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

Ранг: 26.5 (посетитель)
Статус: Участник

Создано: 2 июля 2013 07:59 New!
Цитата · Личное сообщение · #2

Да, MSR можно подменить, но длл это сделать не может, а только драйвер режима ядра. Тем более, что до sysenter исполняется только Ваш и системных длл код. Вы же не подменяли MSR, правда? Копаете не в ту сторону.

Управление передается не на 5F30670E, а на точку входа dll. Почему она далее решает "умереть" - надо изучать алгоритм от точки входа.


Ранг: 1008.9 (!!!!)
Статус: Участник

Создано: 2 июля 2013 08:38 · Поправил: reversecode New!
Цитата · Личное сообщение · #3

ему уже давно на rsdn ответили

--> Link <--

| Сообщение посчитали полезным: Abraham



Ранг: 296.9 (наставник)
Статус: Участник

Создано: 2 июля 2013 09:23 New!
Цитата · Личное сообщение · #4

constant
Реально, не создаётся процесс перед этим? Поставьте бряк на NtCreateProcess/NtCreateProcessEx. Не мешало бы проверить несколько API на хуки/бряки. Проверку на хуки, используются ли они, быстрее можно установить бряком на VirtualProtect/VirtualProtectEx, NtProtectVirtualMemory, хотя может реально и напрямую соответсвующий сервис использоваться (через sysenter/int 2e), для чего для полной совместимости по идее должна бы ранее выполняться инструкция cpuid, а также GetVersion, чтобы определить возможности проца и ос.

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 2 июля 2013 09:27 New!
Цитата · Личное сообщение · #5

.vmp1 это не вм_прот случаем? там же на TLS код еще. если я не ошибаюсь.. а вы поймали антидебаг.. управление по SEH передаваться должно

Ранг: 26.5 (посетитель)
Статус: Участник

Создано: 2 июля 2013 11:32 New!
Цитата · Личное сообщение · #6

VodoleY пишет:
там же на TLS код еще. если я не ошибаюсь..

а оно в DLL разве работает?


Ранг: 1983.4 (!!!!)
Статус: Модератор
retired

Создано: 2 июля 2013 11:51 New!
Цитата · Личное сообщение · #7

TLS Callback в DLL работает, если она грузится статически.
Раз ответили на рсдн, то закрыто.
И по созданию защит-это не сюда, форумом ошиблись.
 eXeL@B —› Вопросы новичков —› Некорректная передача управления из Sysenter.
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS