SysEntry

Тема в разделе "WASM.OS.DEVEL", создана пользователем AntiB, 6 янв 2008.

  1. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Доброе время суток!
    У меня не большой и "простой" вопрос:
    как использовать SysEnter? где о нем можно почитать? и как он работает?
    Заранее благодарен
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Команда процессора sysenter вместе с sysexit позволяет быстро переходить между кольцами защиты,
    используя минимум проверок процессором. Использует модельно-специфические регистры MSR
    Для команды SYSENTER параметры указываются следующим образом:
    Целевой сегмент кода - в SYSENTER_CS_MSR.
    Целевой указатель команд - в SYSENTER_EIP_MSR.
    Сегмент стека - вычисляет команда, добавляя 8 к значению в SYSENTER_CS_MSR.
    Указатель стека - в SYSENTER_ESP_MSR.
    Для SYSEXIT параметры задаются так:
    Целевой сегмент кода - значение из SYSENTER_CS_MSR + 16.
    Целевой указатель кода - в EDX.
    Сегмент стека - значение из SYSENTER_CS_MSR + 24.
    Указатель стека - в ECX.
    Значения, находящиеся в регистрах MSR, процессором проверяются при их загрузке, при выполнении команд SYSENTER и SYSEXIT проверки сведены к минимуму.
    Вызвать сервис экпортируемый ядром можно двумя командами: sysenter и int
    В регистр Eax помещается номер сервиса. В регистр Edx указатель на параметры в стеке.
    Вызов сервиса посредством команды Int экспортируются из ntdll как функция KiIntSystemCall:
    KiIntSystemCall:
    lea edx,dword ptr [esp+8]
    int 2Eh
    ret
    Управление из прерывания возвращается на следующую за int 2Eh команду.

    Вызов посредством sysenter экспортируются из ntdll как функция KiFastSystemCall:
    KiFastSystemCall:
    mov edx,esp
    sysenter
    После вызова управление передаётся НЕ НА СЛЕДУЮЩУЮ за sysenter команду, а на команду по адресу KiFastSystemCallRet в ntdll.

    Адреса двух последних функций определены в KUSER_SHARED_DATA.
    Существуют программы, которые для скрытости вызывают системные функции посредством прямого вызова sysenter.
    Перехватив функцию KiFastSystemCallRet будет возможность контрольровать все вызовы.

    ИНТЕРЕСНО что:
    В ntdll определены восемь точек входа зарегистрированных в ядре - это функции с префиксом Ki('Kernel Internal').
    KiUserApcDispatcher ;Обработчик очереди потока. В частности отсюда начинает исполнение любой поток.
    KiUserExceptionDispatcher ;Обработчик исключений. Отсюда продолжает исполнение поток в котором произошло исключение.
    KiRaiseUserExceptionDispatcher
    KiUserCallbackDispatcher
    KiFastSystemCall ;Быстрый вызов системного сервиса через sysenter
    KiFastSystemCallRet ;Адрес команды возврата(ret) из KiFastSystemCall
    KiIntSystemCall ;Вызов системного сервиса посретством Int 2Eh
    [LdrInitializeThunk]

    Адреса этих функций определены в ядре в модуле ntoskrnl(ntkrnlpa).
    Первые четыре в секции .data, LdrInitializeThunk - в секции .PAGEDATA, адреса определяются процедурами в этом
    модуле в секции .INIT. LdrInitializeThunk используется PsCreateSystemThread=>KeInitializeApc()/KeInsertQueueApc в качестве параметра).
    В XP и Vista перед функцией LdrInitializeThunk находятся пять команд Nop. Если уменьшить на пять значение переменной в ntoskrnl, которая содержит адрес
    этой функции, вновь создаваемые потоки начнут своё исполнение с команды, расположенной ниже функции во всех процессах(глобально).
    Т.е. можно перехватить функцию не используя сплайсинг.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Сейчас ещё посмотрел:
    1. копируеш ntoskrnl.exe в каталог.
    2. открываеш в PETools и устанавливаешь OptionalHeader.Subsystem->Windows GUI(чтобы запустился)
    3. открываеш в OllyDbg.
    RVA обработчика sysenter=688Fh(у меня версия файла 5.1.2600.2774)
     
  4. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Пиридумал.
    Сминусовано.
    Мысль не только не выражена, но и не.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Всмысле? Вроде понятно оветил.
     
  6. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    я уже понял, что к чему - всём спасибо, но мне нужен список MSR-регистров - где его взять?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Скачай, там ссылка на архив.
    http://www.wasm.ru/forum/viewtopic.php?id=24642
     
  8. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Clerk
    Большое спасибо!
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Вот кусок по MSR из манускриптов:
    http://dump.ru/files/n/n763281951/