Виртуальные порты, inP=>outV; outP=>inV

Тема в разделе "WASM.ASSEMBLER", создана пользователем Nimnul, 21 фев 2005.

Статус темы:
Закрыта.
  1. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Ничего не понял ;)



    Идея использовать SMM для мониторинга за командами in(s)/out(s) свежая (для меня по крайней мере), но я не понимаю, как ее реализовать. Допустим, есть минимальный код (безо всякой винды), который сам переводит процессор из real в protected, т.е. он сам может настроить любой свой код с любыми привилегиями и т.п. Теперь объясни мне, как он с помощью SMM будет мониторить команды in/out, которые выполняются в его же коде.



    А насчет аппаратных методов - все что угодно можно сделать, можно хоть gpf сделать при in/out командах.
     
  2. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
    Ниже цитата со статьи на codenet:

    http://www.codenet.ru/progr/other/hack_solon8.php





    В этой статье не однократно говариться про виртуальные порты, но как их создают здесь не говариться(( но в прочем статья конечно не про это, но как я понял виртуальных портов можно сделать сколько угодно т.к. эта инфа идет в контексте виртуальных PC. А вобще статья интересная и главное полезная, рекомендую целиком)) Правда я начало пропустил))



    Народ вы тока подумайте, что можна замутить с помощью виртуальных портов! всякие аладины и ЗвезныеФорсы, можна будет проэмулировать физические требования этих защит, вплоть до скорости считывания с устройства.
     
  3. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    deleted
     
  4. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Nimnul, ты сможешь реализовать полную эмуляцию проца?

    Можешь начинать :)



    А по поваду создания ВП вчужой ОС(например Windows) я то-то не слыхал...
     
  5. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    deleted
     
  6. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай






    ProgramMan мне не нужна полная реальзация проца, такая реализация уже есть)) http://www.vmware.com/ и на эту виртуальную машину лично ставил 4 разные ОС, мне всего лишь нужны виртуальные порты))
     
  7. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
    К стати если не вериш могу скрины скинуть))
     
  8. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759




    Потерпи, скоро будет реализация... (если не убью MB)
     
  9. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Ну что ж, Nimnul, если тебя ещё интересует, возможно ли реализовать "виртуальные" порты без виртуального компьютера - ответ "ДА". Большинство портов (устройств) могут быть перехвачены, проэмулированы и тд. Всё это достигается, не используя отладочные регистры и TSS I/O Permission map. Сейчас я пишу "плагин" к SoftICE'у, который позволит перехватывать обращения к заданным портам (не используя BPIO -h) и... вызывать SofICE кнопкой Power!

    А то есть некоторые защиты (не буду показывать пальцем), которые перехватывают на себя обработчики IRQ. Приспичит вызвать sice в момент, когда аппаратные прерывания недоступны - что делать ? ;)



    Все написанные тестовые програмки работают отлично (перехватывал обращения к CMOS, COM-порту, etc.) что позволяет с оптимизмом смотреть в будущее... Препятствия остались мелкие - вроде вызова айса кнопкой power из V86 и Ring3 ProtMode.



    P.S. Nimnul, спасибо за твой вопрос ;)
     
  10. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
    _BC_ я же говарил, что у метода широкие возможности:)) и еще: просто за спасибо не отделаешся) говари как!!! (Можна примерчик с COM портом)
     
  11. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Nimnul, да знаю я про vmw.

    _BC_, интересно, неплохо было бы посмотреть...
     
  12. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Вот несколько тестовых программок, использующих SMM. Сразу скажу, что я писал их под свою систему (чипсет Intel 845PE), так что если они у вас не запустятся или взорвут комп -- во всём виновата разница между чипсетами.

    Все программы расчитаны на запуск из RealMode. Если у вас есть Win9x, можно воткнуть в autoexec.bat строку вызова VC/NC/DN, тогда можно будет удобно тестировать программы до загрузки винды. Ничего страшного, если будут загружены драйвера XMS, русификатор, etc. (но не emm!).

    Начинать эксперименты надо с проги DUMP_SMM.COM. Она делает дамп SMRAM (верхней половины) в файл smram.dmp. Если эта прога не сработает -- даже не пытайтесь запускать другие, а сразу изучайте документацию на свой чипсет.

    Если дамп снялся, проверьте его содержимое на осмысленность (SMI handler начинается сразу с начала файла). Дамп моей SMRAM прилагается, так что можно посмотреть схожесть и различия. Допустим, что SMRAM дампится, тогда перезагружаем комп (а можно и не перезагружать, если убрать в dump_smm.asm установленный бит D_LCK при закрытии SMRAM).

    Далее идет PORTTRAP.ASM. Она ловит порт 70h (прописано в исходнике). Кнопка Power в ней не обрабатывается (в отличии от след. проги), зато она дает загрузится винде ;) Так что пока не загрузится винда и не переключит обработку кнопки power с SMI на SCI (ACPI-прерывание), power лучше не нажимать. При перехвате обращения к порту CMOS обработчик SMI бибикает спикером. Совместимость с виндой достигается неполной заменой обработчика SMI BIOS'а: свой код пишется в SMI_Handler_Base+6000h, а в начале оригинального обработчика делается врезка (смещение +14CBh в моем SMRAM). Следует посмотреть, что в вашем дампе по смещению 14CB (и что в моем) и определить, будет ли PORTTRAP работать. Если же всё ок, то выглядит всё так: запускается PORTTRAP, начинает пищать спикер при обращении к CMOS (real-mode), далее грузим винду (спикер переодически пищит), в винде (уже prot-mode) всё также ловится... ловится даже "прощальная" запись в CMOS[0Fh] значения 5 перед перезагрузкой...Совершеннно пох откуда производится обращение к порту... хоть BIOS из VM, хоть Ring0-код, SMM'у без разницы.

    Далее... IO_TRAP -- также ловит обращения к 70h и обрабатывает кнопку power (пищит при нажатии). Перезаписывает обработчик SMI, так что винда не сможет загрузится. ;) Тестируйте из real-mode. Надо поискать место, где винда глохнет или вообще отрубить в ней управление электропитанием, чтоб не пользовала, $%#@, ни APM, ни ACPI. Тем не менее, если SMRAM дампится, то и IO_TRAP должен работать (PORTTRAP всё-таки слишком привязан к содержимому моей SMRAM).

    Если вышенаписаный текст вас радует ("о! новое средство эмуляции портов I/O") -- не всё так весело... Если проги у вас пошли, это значит что ваш чипсет совместим с ICH4 и ловить доступ к портам USB, IDE, AC'97 нельзя. :dntknw: Объяснение этому --



    "As I/O speeds increase, the demand placed on the PCI bus by the I/O bridge has become

    significant. With AC ’97, USB 2.0, and Ultra ATA/100, coupled with the existing USB, I/O

    requirements could impact PCI bus performance. The chipset’s hub interface architecture ensures

    that the I/O subsystem; both PCI and the integrated I/O features (IDE, AC ‘97, USB, etc.), receive

    adequate bandwidth. By placing the I/O bridge on the hub interface (instead of PCI), the hub

    architecture ensures that both the I/O functions integrated into the ICH4 and the PCI peripherals

    obtain the bandwidth necessary for peak performance."



    :dntknw:

    На прошлых поколениях ICH, если верить интеловской документации, можно было ловить все порты.

    Что ещё... некоторые процедуры взяты из дизассемблированного дампа SMRAM. Изучение обработчика SMI -- увлекательное и полезное занятие. ;)

    [​IMG] _1376577132__IO_SMM.RAR
     
  13. Nimnul

    Nimnul New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    136
    Адрес:
    не Китай
    Крута, надо все это теперь переварить.
     
  14. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    _BC_, ты можешь написать немного теории о том, как с помощью SMM (System Management Mode) можно отлавливать обращения к портам ? Хотя бы немного прокомментировать ? :)) Please...
     
  15. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Присоединяюсь к предидущему посту ;)



    Таки я не понял, можешь ли ты хоть в real mode, хоть в собственном супервизоре мониторить тот же COM, LPT, HDD..
     
  16. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    _Chingachguk_





    _Chingachguk_, SMM стоит выше ProtMode и RealMode. SMI handler'у абсолютно пох с какого режима его вызвали, пох на CLI и запрещенные IRQ. Я отлавливал порты как в реалмоде, так и под виндой. HDD на моей матери ловить нельзя, т.к. у меня ICH4 (см. мой пред. пост).





    SMM -- замечательный режим. Поставив свой SMI handler, можно делать с системой что угодно... Перехват I/O -- это всего лишь одно из применений. Можно получить Ring0-привилегии, даже без привилегий администратора и драйверов. SMI может вызываться как аппаратно (кнопка Power, I/O monitors, периодическое SMI, etc.), так и программно.



    Недостатки:

    1. Зависимость от материнки (чипсет+BIOS)

    Привязанность к MB делает SMM индивидуальным оружием. Этот недостаток имеет хорошую сторону: никакой муд@к (защита) не сможет защитится от SMM, т.к. методы, работающие на одном чипсете, могут не работать на другом. Пример: на моей старой материнке (тоже Intel кстати) SMRAM открывается ч/з Dev0, Off 70h.

    Когда я это применял к моей нынешней системе, комп наглухо зависал. Очень может быть, что текущее смещение 9Dh для SMRAM Control Register на будущих чипсетах Intel изменится со всеми вытекающими последствиями.

    2. Сложность программирования.

    :) Например, невозможность отладки или ручное преобразование линейных адресов в физические. Это можно считать не недостатком, а требованиями к программисту. ;)





    Так кто-нить у себя дампил SMRAM ? Или у всех чипсеты неIntel'овские ? Зашлите кто-нить свою SMRAM аттачем, любопытно посмотреть, насколько отличается от моей.





    Hunter



    Почитать про SMM можно в:

    1. Intel Architecture Software Developer’s Manual Volume 3: System Programming Guide. CHAPTER 11. SYSTEM MANAGEMENT MODE (SMM).

    2. документация на чипсет



    Оба этих источника довольно независимы друг от друга и по отдельности не имеют практического применения (для программирования SMM).
     
  17. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    _BC_



    _Chingachguk_, SMM стоит выше ProtMode и RealMode. SMI handler'у абсолютно пох с какого режима его вызвали, пох на CLI и запрещенные IRQ. Я отлавливал порты как в реалмоде, так и под виндой.



    Не, да я понял все преимущества ! ;) Мне непонятно только одно: ПОЧЕМУ при выполнении in/out команд вызывается SMM-обработчик ? Ты что, программируя (материнку ? еще что-то?) первел процессор в такое состояние ? И что при этом - при любом порте в in/out вызывается SMM ? Или диапазон тоже можно запрограммировать ? И можно ли запрограммировать не CMOS-порты, а LPT, COM...?
     
  18. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    _Chingachguk_







    В SMM проц переходит по сигналу SMI#. А вот сигнал этот генерирует чипсет (после соответствующей настройки).







    Да, диапазон (а точнее несколько дипазонов) можно задавать.



    И можно ли запрограммировать не CMOS-порты, а LPT, COM...?



    LPT, COM - без проблем. Я перехватывал COM-порт (общался с модемом в HyperTerminal)
     
  19. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    В SMM проц переходит по сигналу SMI#. А вот сигнал этот генерирует чипсет (после соответствующей настройки).



    Хмм, это несомненно любопытно, даже несмотря на неуниверсальность относительно типа машины ("чипсета"). Я не раз встречал задачи, когда главное было выдрать из программы лог обмена через порты.



    Однако странно, зачем нужна такая возможность и возможно ли перепрограммировать обращение к i/o не с вызовом SMM, а чего-нибудь попроще типа irqN.
     
  20. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759




    А зачем ? IRQ может кто-нибудь на себя хапнуть (или просто запретить).

    Кстати, IRQ и NMI можно тоже на SMI# направить
     
Статус темы:
Закрыта.