Переход в реальный режим в драйвере

Тема в разделе "WASM.WIN32", создана пользователем explosion, 3 ноя 2007.

  1. explosion

    explosion Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    34
    Подскажите...

    Делаю навесную защиту ПО от взлома и отладки. Защищаться от отладчика уровня ядра SoftICE решил следующим способом: драйвер защиты при загрузке в DriverEntry сохраняет все системные данные, прыгает назад в реальный режим, выдергивает софтайс из памяти, возвращается в защищенный. Упрощенно алгоритм такой: сохраняем регистры, включая сегментные и cr, TSS, GDT, LDT, IDT, XMM0-XMM7. Вычисляем место в физической памяти, где находится код драйвера и меняем таблицу станиц таким образом, чтоб можно было вернуться в реальный режим, модифицируем GDT, прыгаем в real-mode, открываем адресное пространство 4ГБ, выдергиваем softice, восстанавливаем таблицу GDT, модифицируем cr3, переходим в защищенный режим, прыгаем на код драйвера.
    Вопрос: правильная ли последовательность и можно ли так вообще поступать? Не рухнет ли система?
     
  2. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Unreal mode? Ну в-общем то там бывают свои непредсказуемости... Ах да, прерывания ещё не забудь отключить.
    Выражение "выдергиваем SoftIce" до меня так и не дошло - может быть, поясните?
     
  3. explosion

    explosion Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    34
    в общем драйвер при запуске должен найти в памяти softice, если он есть. Однако, если он будет делать это просто сканируя память, то айс может перехватить это дело и обмануть драйвер. Переход в реальный режим не позволит айсу отлаживать это дело. Допустим драйвер в real mode расшифровывает какую нибудь свою чать хитрым алгоритмом, которая ищет SoftICE в памяти и, скажем, очищает его таблицу экспортов функций, или патчит сами функции так, чтоб они не работали - т.е. грубо говоря отключает софтайс от системы. Затем драйвер возвращается в PM и продолжается загрузка ос как ни в чем не бывало.

    unreal mode нужен только для того, чтобы получить доступ к верхним адресам памяти тогда когда драйвер в real mode
     
  4. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    хочешь угадаю - результатом работы такой "навесной защиты ПО от взлома и отладки" будет полное зависание компа
    спорим?
     
  5. explosion

    explosion Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    34
    :) я тоже этого боюсь, поэтому и спрашиваю возможно ли такое реализовать
     
  6. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    explosion

    А сколько у тебя процессоров ?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    перейти в реальный режим из дрова будет непросто, ибо у тебя не будет пейджинга и тебе надо будет иметь код на адресах, для которых VA==физ.адресу.
    твои данные могут быть наполовину в файле подкачки и еще много всяких неприятностей, короче геморрой тебе обеспечен
     
  8. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Great

    твои данные могут быть наполовину в файле подкачки - это преодолимо.

    VA==физ.адресу - да, но если не делать переходов, то VA==физическому до первого jmp. Т.е. процессор не уйдет в аут до первого перехода если адрес не валидный.

    В многопроцессорных системах (XP) идет контроль одного процессора за работой других. Кстати и рассинхронизация в Syser и частый вылет на многопроцессорных машинах идет именно по халявной обработке данной ситуации. Т.е. все ОК еще на 2х но на 4 уже не совсем все ОК.
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    сайсер и на моем однопроцессорном компе лагает)) что уж говорить о MP
     
  10. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    explosion
    у себя дома конечно можно все реализовать
    ну пару месяцев придется доводить до состояния "хоть как-то запускается" - отладчик для "реал-унреал фром протектед" придется собирать самому хоть какой-то
    но вероятность запуска еще где-то кроме домашней машины ~0/0
    объясняю почему - обратный переход не суппортится и н серьезно не рассматривается ни одним производителем никакого железа, только ресет
    большинство девайсов не умеют сохранять свое состояние
    то есть назад вернуться ты точно не сможешь

    придумай другую защиту
     
  11. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    explosion

    выдергиваем softice - в реальном режиме SoftICE не работает, и его выдергивать нет надобности.
     
  12. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    Код (Text):
    1. придумай другую защиту
    Нифига.. раз занялся пусть делает - тем более там делов то - ерунда.

    explosion да, реально вернуццо в реальный(сорри за каламбур), ток прыгать надо будет в первый 640кб. в котором тока, сгоревшая ступень NTLDR-a..валяеццо. Поэтапнень-ко так... с 32-х на 16-бит, там еще раз понижаешь EIP, (лучше всего на retf -ах сигать) .. а, в расчищеные 640кб можна FreeDOS засунуть (Ну малоли - Volkov Сomander понадобиться).

    зы: это будет круто!)))
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    думаешь после всех экзекуций, что винда проделывает при старте, удастся загрузить дос? ну хз..
     
  14. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    explosion
    Есть кстати способ в миллион раз проще чем ты пытаешься изобрести защитицца от софтайса, буквально одной кнопкой при сборке проекта в студии.

    [х64] -"и нет негра!" ©
     
  15. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    Да все что она проделывает лежит в основном за пределами A20 линии (ну и что еще в файле подкачки останеться). Подобные фишки как переход в реальный режим проделывали DOS-extender's, еще во времена DOOM и Quake. 32-битные со страничной адресацией. чуть-ли не при каждом тике RTC.
    Это тоже тема! из 64-х вернуться в реальный...
    Ну и обратно... в ласковые обьятия виндового BSOD'а :)
     
  16. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    бедный процессор (
     
  17. explosion

    explosion Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    34
    z0mailbox
    допустим, пишем под 32 разряда. И почему ты думаешь что это будет работать только у меня? если отладить грамотно - то работать должно стабильно. Что значит обратный переход не поддерживается разработчиками железа? мы же кроме проца не тронем ничего, а проц уж точно поддерживает.

    PROFi
    в реальном режиме софтайс не работает - правильно! выдернем его чтоб не работал и в защищенном

    по поводу количества процессоров и оборудования - мы переходим в real mode на очень короткое время, кроме того драйвер будет загружаться самым первым в системе после ядра, на настройку устройств думаю не повлияет. Понятное дело, что перед переходом можно промаппировать кусок памяти на нижнее адресное пространство и скопировать туда кусок кода, хотя код будет продолжать исполняться до длинного джампа или retfа.

    Короче отпишусь как только будут результаты
     
  18. CnCVK

    CnCVK New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    108
    почему нельзя?
    я думаю можно.
    если сохранить все состояние системы "заморозить", а потом востановить, то должно работать.
    проблема что надо все сохранять одновременно, что бы ничего не нарушить.
    еще насколько я знаю в WinXP есть возможность перейти в реальный режим для вызова прерывания BIOS.

    Вот http://www.geocities.com/bearwindows/vbempru.htm ссылка на драйвер VBE для WinNT.
    Там можно прочитать:
    я думаю это должно подтверждать возможность вызова BIOS -> использования реального режима.
     
  19. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    Int10CallBios/Ke386CallBios - используют V86 вызовы (то бишь - аппаратную эмуляцию реального режима). ;(
     
  20. CnCVK

    CnCVK New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2006
    Сообщения:
    108
    да? а как это реализуется?
    после вызова создается отдельный TSS с V86 и запускается BIOS?