· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› int 1 - перехваченное прерывание?

Посл.отвђт Сообщенiе


Дата: Мар 17, 2004 01:17:31

Я бы хотел обсудить одну проблему с людьми толковыми.
Итак, известно, что StarForce и XtremeProtector любят хватать int 1 под свои нужды, после чего айсу становится совсем скучно жить.
На woodman шли очень интересные дискуссии о DR-регистрах/физической памяти и перехвате int 1. Короче, что бы ни было поставлено на int 1 (допустим, DR0-регистр и в DR7 прописан GD-бит), все это можно отвертеть. Другое дело, что защита сие заметит и будет ку-ку. Играть в прятки с конкретной реализацией бессмысленно, думаю, понятно почему.
Поэтому предлагаю обсудить следующую идею:
известно (пардон за банальность), что винда - мультизадачная ось. Я подумываю над созданием драйвера, который бы брал под контроль планировщик процессов (с релизом исходников это стало еще проще %-)) и поступал бы по примерно следующему алгоритму:
if(я вижу, что планировщик собирается дать квант времени Soft-Ice)
{
  ok, планировщик подождет :)
  тем временем я восстановлю вектор int 1, каков бы он там ни был, на то,
  что я запомнил, когда был загружен айс
}


Мне непонятно пока, что делать, когда квант времени истечет - тут надо смотреть код виндузы. Скажем, в Линуксе планировщик прерывается не только по кванту, но и по IDT-векторам (колгейт и т.п.). В коде обработчиков прерываний виндузы я вызова скедьюлера не приметил. Означает ли это, что он прерывается только по таймеру? И как это учесть в коде драйвера-перехватчика?
Словом, ряд вопросов пока есть. Я бы очень хотел услышать размышления по поводу. :)


Дата: Мар 19, 2004 12:21:23

imho, внедрение такого драйвера - это игра в кошки-мышки, теи более что его можно и обойти. Похоже, что будущее за эмулирующими отладчиками, если его грамотно написать - защита не опознает что ее код эмулируют. А уж бряки можно будет ставить на такие хитрющие условия, которые в айсе невозможны и дампить все что угодно :). Уже который месяц (времени мало) пытаюсь окучить один такой эмулятор, idax86-emul это все-таки не то, в ide нужно лишь определить откуда и докуда эмулировать...

вот по ходу дела возник один глупый вопрос про перехват int 1 и 3. Положим имеется cpu с vme, и я приготовил tss, где определил карту перенаправления прерываний и поставил бит trap. хочу перелючить tss - будет исключение отладки (и чье мое или старое)? А если при тех же условиях я предварительно пропишу эту tss в idt[8] (double fault) и передам управление черт знает куда, чтобы вызвать исключение, будет вызван обработчик int 3 в момент переключения на эту tss (и опять чей: старый или мой)?


Дата: Мар 19, 2004 15:17:41

Зачем так извращаться, лучше обрабатывать исключения и эмулировать вызовы прерываний. Например в том же XtremeProtector'е программа Ring3(упакованная) с помощью драйвера получает доступ к IDT, заменяет там на свой обработчик. Выход - запретить доступ к IDT после DeviceIoControl и правильно обрабатывать исключения. Там не используются векторные исключения, так что всё просто, кроме перенаправления чтения/записи в память, придёться всё-таки хороший движок дизассемблера написать, на уровне IDA, а не то, что я в первый раз сделал.


Дата: Мар 19, 2004 18:22:33

Nothing

В винде только 3 tss. Причем 2 из них только для NMI и прочей гадости. Ты интересуешься конкретной реализацией под виндузу или просто ля-ля?

dragon

М-мм... А не реализация ли это для частного случая?


Дата: Мар 20, 2004 16:31:27

Почему "ля-ля"? Читал дискуссию на woodmann'е и просто хотел уточнить - trap bit в tss с перенаправлением прерываний это trap или fault? А то что в винде tss юзают для int 2, 8, 18 это я знаю и это выглядит логично, но что мешает мне создать свою tss?


Дата: Мар 20, 2004 22:32:55

но что мешает мне создать свою tss?

Звучит серьезно. А можно конкретнее? Любопытно. Плюс, если не затруднит, иллюстрацию идеи в виде грубого псевдокода.


Дата: Мар 20, 2004 22:49:55 · Поправил: Valery

Офтоп - только для Nothing - ляля
это trap или fault
А что с перенаправлением выяснилось?
В свое время выяснял без перенаправления - оказалось очень странно, нечто среднее: переключение проходит, останавливается перед первой командой, привилегии шлюза обработчика игнорируются (как у фолтов, но не у трэпов!), accessed сегментов = 1

Володя еще раз пардон за офтоп в твоем треде


Дата: Мар 20, 2004 23:28:52

Забей, все ОК. Мне и самому интересно. Если бы еще кто-то чем-то конкретным швыряться начал, типа ссылок на страницы в интеловских доках, псевдокодом или настоящим кодом, было бы вообще классно.


Дата: Мар 21, 2004 05:29:02 · Поправил: Black_mirror

Насколько я понял из интеловских талмудов, VME работает только для виртуального режима. Если флаг CR4.VME установлен в 1, а n-ый бит в таблице перенаправления прерываний установлен в 0, то программное прерывание INT n будут обрабатываться так же как и в реальном режиме. То есть, в стеке виртуальной задачи будет сохранено cs,ip,flags, а из таблицы прерываний(виртуальной) будут взяты значения для cs и ip. То есть обращения к IDT и перехода в защищенный режим не будет.

В томе 3 рекомендую посмотреть части 16.3 и 16.4.


Дата: Мар 22, 2004 12:01:37

[q]Звучит серьезно. А можно конкретнее?[/q]
Вроде создать tss не сложно, по аналогии с имеющимся в винде tss от double fault например. Поля заполнить по вкусу. Дальше его можно "повесить" на какое-нибудь прерывание, чтобы мгновенно переключать контекст при его возникновении, можно переключать tss "вручную" (ltr/iret), но тут надо быть осторожным. Зачем все это надо? Для защиты можно приспособить (контексты менять быстро), например.
[q]А что с перенаправлением выяснилось?[/q]
Так именно этот вопрос я и задавал :-) Будет свободное время, набросаю тест проверю - сообщу сюда о результатах.


Дата: Мар 22, 2004 18:25:08

VME работает только для виртуального режима

В таком случае применение этой штуки не имеет смысла для того, что мы сейчас обсуждаем.

Nothing
Для защиты можно приспособить (контексты менять быстро), например.

Т.е. ты предлагаешь вывесить какой-то таск типа Xprot в отдельный TSS?


Дата: Мар 24, 2004 12:01:59

Т.е. ты предлагаешь вывесить какой-то таск типа Xprot в отдельный TSS?
Нет, так не получится. imho tss слабо приспособлен для переключения задач в винде, тут уж действительно придется шедулер переписывать. А вот кусок защиты (драйвер) вполне может использовать одну или несколько tss для организации своей "мультипоточности" (как fibera'ми в user-mode). А если при этом перехватить еще несколько неиспользуемых прерываний, то можно затруднить анализ программы, т.к. скажем iret может означать попеременно и возврат из прерывания и переключение задач или оба действия сразу (tss можно вкладывать друг в друга)...

p.s. это вроде не имеет отношения к перехвату int 1, так что можно считать оффтопиком, сорри...


Дата: Май 13, 2004 16:18:07

Я извиняюсь за возможно чайниковский вопрос, но перехват int3 от перехвата int1 чем-то принципиально отличается?


Дата: Май 13, 2004 18:10:20

Если не собираешься эмулировать действие - нет.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.091