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

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


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

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

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

 eXeL@B —› Крэки, обсуждения —› Int 2e vs sysenter
Посл.ответ Сообщение

Ранг: 13.5 (новичок)
Статус: Участник
iOS expert

Создано: 7 января 2014 16:27 New!
Цитата · Личное сообщение · #1

Вопрос знатокам ядра и винды.
Code:
  1. .text:7C90D040                 mov     eax, 20h        ; NtContinue
  2. .text:7C90D045                 mov     edx, 7FFE0300h
  3. .text:7C90D04A                 call    dword ptr [edx]
  4. .text:7C90D04C                 retn    8
  5. .text:7C90D04C _ZwContinue@8   endp

1-ый вопрос который возник - в этом коде используется адрес 7FFE0300h, который лежит за пределами ntdll.dll. Но там находится ссылка на функцию из ntdll.dll - KiFastSystemCall, которая выглядит следующим образом:
Code:
  1. ntdll_KiFastSystemCall proc near
  2. mov     edx, esp
  3. sysenter
  4.  
  5. ntdll_KiFastSystemCallRet:
  6. retn
  7. ntdll_KiFastSystemCall endp

Зачем так сделано, если все равно не используется рандомизация базы, да и что мешало явно вызвать системный вызов, который находится в этом же образе? Т.е. зачем-то есть внешняя ссылка, которая ссылается все равно на внутреннюю функцию модуля. Это защита от чего-то, костыль или что-то иное вне зоны моего понимания?

Далее. Если попытаться расшифровать название, имеется в виду "быстрый системный вызов". Рядом есть еще вот такая функция:
Code:
  1. ntdll_KiIntSystemCall proc near
  2. lea     edx, [esp+8]
  3. int     2Eh
  4. retn
  5. ntdll_KiIntSystemCall endp

Это тогда что? "Медленный" системный вызов?

Если тут нужен RTFM и понимание этих механизмов достигается чтением матчасти, а не опытом, то ссылки на статьи, поясняющие эти моменты, приветствуются.

Ранг: 13.5 (новичок)
Статус: Участник
iOS expert

Создано: 7 января 2014 17:32 · Поправил: Katana New!
Цитата · Личное сообщение · #2

Если внимательно посмотреть на эту ссылку, то увидим там следующее:
Code:
  1. 7FFE0300 off_7FFE0300 dd offset ntdll_KiFastSystemCall
  2. 7FFE0304 dd offset ntdll_KiFastSystemCallRet

Я предположил, что FastSystemCall и IntSystemCall симметричные методы. Поиск по форуму дал несколько тем, в которых номера сервисов для Int 2E и Syscall/Sysenter совпадают. Значит, это типа альтернативные методы. Пробуем запатчить на метод IntSystemCall. Вот скрипт для IDA (ест-но под отладкой, "жертва" - блокнот)

Code:
  1. PatchDword(0x7FFE0300, 0x7C90E500); // ссылка на IntSystemCall
  2. PatchDword(0x7FFE0304, 0x7C90E506); // ссылка на его retn


И ничего! Ни ошибки, ни изменения этих ссылок. Вывода может быть два: IDA блокирует изменение этих ссылок (хотя зачем ей это было бы надо), или же, что вероятней, ядро контролирует эту память, и не позволяет ее менять. Механизм защиты?


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

Создано: 7 января 2014 17:35 · Поправил: reversecode New!
Цитата · Личное сообщение · #3

виндовс инсайд вас спасет
sysenter не всеми cpu поддерживается, поэтому это проверяется и патчится на ходу под int если не поддерживается

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


Ранг: 13.5 (новичок)
Статус: Участник
iOS expert

Создано: 7 января 2014 17:47 New!
Цитата · Личное сообщение · #4

reversecode
Примерно так и предполагал, спасибо за разяснения.

Windows Inside это типа Руссинович что ли? Всегда хотел прочитать, пожалуй этим и займусь.
 eXeL@B —› Крэки, обсуждения —› Int 2e vs sysenter
Эта тема закрыта. Ответы больше не принимаются.

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

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