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

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

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

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    _BC_, действительно интерснаю фишка получается.

    Только появились кои какие вопросы:

    можно ли узнать smm хендл из win r-0?

    В интел мануале сказанно, что базовый(после reset) адрес smm 30000h но у меня что-то не сходится, а с каково адреса ты грузил дамп для иследования?



    [​IMG] 180992003__SMRAM.DMP
     
  2. ZENiTH

    ZENiTH New Member

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

    Какие ещё чипсеты лучше всего подходят для SMM?

    То есть ICH4 умеренно подходит, ICH1,2,3 идеально подходят etc, может быть не интел чипсеты тоже подойдут?



    Хотелось бы попробовать использовать SMM для борьбы с параноидальными защитами HASP, StarForce etc
     
  3. _BC_

    _BC_ БЦ

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



    можно ли узнать smm хендл из win r-0?



    Как я понял, тебя интересует, можно ли ставить свой SMI handler из ProtMode Ring0. Ответ -- можно. Я не стал посылать ring-0 SMRAM dumper потому как он работает только под 9x. Его несложно переделать под NT/XP, т.к. из функций ядра он пользует только одну -- _MapPhysToLinear, но я не вижу в этом нужды. SMI handler лучше ставить как можно раньше, лучше всего сразу же после BIOS (например, прописываться в autoexec.bat).



    базовый(после reset) адрес smm 30000h но у меня что-то не сходится, а с каково адреса ты грузил дамп для иследования?



    Базовый адрес SMRAM после сброса процессора -- 30000h, но MCH поддерживает SMRAM по адресам A0000-BFFFFh (хотя его можно переносить, притом даже выше 1Мб). BIOS переносит базу SMRAM на A0000h. Т.е. SMRAM скрывается под видеопамятью.



    Наконец-то появился дамп SMRAM, отличный от моего ;)

    ProgramMan, твой дамп вполне совместим с моим (хоть и отличается). ;) То, что у меня на 14CBh, у тебя на 15A4h. Вот поправленный porttrap, работающий (должен по крайней мере) на твоей системе. Запускай его в реалмоде, поэкспериментируй с чтением CMOS, затем загрузи win (win.com под 9x (при условии, что himem загружен), не знаю что там у NT/XP), поэкспериментируй под виндой. Потом поменяй в исходнике порт с 70h на что-нить другое...

    Хех, вовремя вспомнил про аттач ;)
     
  4. _BC_

    _BC_ БЦ

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

    похоже в правке нельзя аттач добавлять.



    ProgramMan

    Вот:

    [​IMG] 34897332__SMM2.RAR
     
  5. _BC_

    _BC_ БЦ

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

    может быть не интел чипсеты тоже подойдут?



    Х/з. У меня нет доступа к неинтелловским чипсетам. Надо смотреть документацию на какой-нить VIA, etc.



    SMM -- это личное оружие.

    Неспособность ловить IDE на некотором количестве (притом немалом) чипсетов не позволит sforce эмулировать "публично". Ну а если же твой комп позволяет ловить IDE, тогда можно написать эмулятор sforc'a (для себя). Сначала погонять цд на предмет получения времени чтения, собрать статистику. Затем отлавливать I/O, проходящий ч/з порты IDE и при определенных обстоятельствах вставлять соотв. задержки (прямо в SMM).



    С портами LPT и COM всё пока хорошо ;)



    На некоторых системах SMM очень хорошо поддерживается, например SGS-Thomson SMM. Там при перехвате I/O доступна туева хуча средств и информации, напр. пара сохр. EIP для рестарта инструкции I/O, port shadowing, какая инструкция производила I/O, был ли REP... etc.



    Привязанность SMM к "железу", вобщем-то не такая уж и страшная (спасибо ACPI). Особенно если сравнить запись в SMRAM с записью во flash-память. Флэш-память гораздо сложнее использовать для своих нужд + большое количество разных микросхем тоже не дают скучать ;) Как эту проблему решают проги для чтения/записи флэш ? Включают в себя поддержку кучи чипсетов и микросхем флэш.
     
  6. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Похоже, многие не понимают мою любовь к RealMode. ;)

    Вот тестовая прога для Win9x. Перехватывает порт 70h (можно поменять в исходнике). Обрабатывает кнопку Power на системнике. На всё бибикает. Перезаписывает целиком SMI handler (в п#$ду совместимость с APM). Так что для экспериментов надо только W9x и чипсет, совместимый с моим ;)

    Естественно, что ловится I/O с портом 70h отовсюду, даже если в SoftICE выполнить "i 70". Для любопытных: если поставить в сайсе BPIO -h 70, то обработчик SMI получит управление перед сайсом ;)

    [​IMG] _1761849083__SMM3.RAR
     
  7. Chingachguk

    Chingachguk New Member

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



    Если все это работает успешно, и если ты хочешь публичности - полагаю, тебе стоит написать статью (или набор исходников с комментариями).
     
  8. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    _BC_, статья это было бы хорошо. (Могу поработать тестером :) )



    Кстати несмотря на различия наших чипов, у меня работали ВСЕ примеры из первого билда.



    Новые примеры посмотрю, помучаю. может напишу драйвер под win2k-xp

    ****************************************************

    так, по ходу в 2k-xp финда ставит свой обработчик...

    по физ адресу всякая фигня...

    буду ещё искать
     
  9. _BC_

    _BC_ БЦ

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




    Статья... Судя по статистике просмотра этого топика, статья про SMM нужна массам как зайцу триппер. Всем интереснее всякую х#$ню обсуждать, упражняясь в красноречии. Если статью никто не будет читать, значит её не надо писать, nein?







    Надо глянуть, ставит ли 2K/XP бит блокировки в SMRAM Control Register. Если не ставит, а просто "угоняет" SMRAM => можно открыть SMRAM и сделать скан по всей физ. памяти (благо память SMM находится по адресам, кратным 32K). Если ставит блокировку, значит надо действовать по старой схеме, загружая обработчик SMI из autoexec'a (и самим ставить блокировку).
     
  10. _BC_

    _BC_ БЦ

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



    Медленно ищешь ;)

    Посмотрел у себя под XP SP1 -- всё ок. SMRAM там же.

    Смотрел той прогой, что под 9х ;) Запускал её "принудиловкой", ручками подправив GDT. Сдампил SMRAM...

    Че я подумал... а ты куда смотрел, на A0000h ? Не забывай, что обработчик начинается c +8000h, т.е. на A8000h.



    Ось не должна трогать SMRAM (по идее). Это не её ума дело. SMM должен быть личной собственностью BIOS'а. А винда пусть с ACPI развлекается.
     
  11. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Не понял, у меня под win2k sp2по физ адресу A8000 всякая фигня...

    Вот например:



    000A8000: F0 EC E8 00 F0 EC E8 00-F0 EC E8 00 F0 EC E8 00 рми.рми.рми.рми.

    000A8010: F0 EC E8 00 F0 EC E8 00-F0 EC E8 00 F0 EC E8 00 рми.рми.рми.рми.

    000A8020: F0 EC E8 00 F0 EC E8 00-F0 EC E8 00 F0 EC E8 00 рми.рми.рми.рми.

    000A8030: F0 EC E8 00 F0 EC E8 00-F0 EC E8 00 F0 EC E8 00 рми.рми.рми.рми.
     
  12. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Или мы по разному доступ получаем...

    Я использовал MmMapIoSpace.
     
  13. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Статья... Судя по статистике просмотра этого топика, статья про SMM нужна массам как зайцу триппер. Всем интереснее всякую х#$ню обсуждать, упражняясь в красноречии. Если статью никто не будет читать, значит её не надо писать, nein?



    Ну, данный топик как бы не совсем о <font color="2]новом методе перехвата</font><!--color--> in/out команд. Это раз. Потом, малый класс защит использует сокрытие своей работы с устройствами (я работал только с hasp ключами* и hdd-утилитами, тут говорили про starforce) и, соответственно, требует такого мощного средства мониторинга - соответственно не так много людей, которым это было бы интересно. Но те защиты, которые я видел, были бы абсолютно беспомощны против такого способа. Это два. Потом, ты уже проделал достаточно серьезную работу и вряд ли хочешь "оставить это на полке". Это три.



    ps Впрочем, решать тебе ;)



    *для hasp usb это не так актуально, но тоже имеет смысл.
     
  14. _BC_

    _BC_ БЦ

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





    У тебя там слева физ.адрес или linaddr ?

    Ты для начала бы без вызова функций ядра сделал. Просто из ring0 по фиксированному адресу (на ХР у меня что-то вроде 800A0000h было). Выполни в сайсе "phys A8000", выбери адресок по-оригинальней ;) и впиши его в drv. Как увидишь SMI handler -- можно добавлять в драйвер отображение phys to linear.





    _Chingachguk_





    Вообще-то я сильно не напрягался ;) Но определенные результаты есть... Я согласен с тем, что какое-нибудь логическое завершение необходимо. Надо написать простой I/O logger под 9х/2К/ХР и поддержкой хотя бы пары чипсетов. Интересно, какие фирмы-производители чипсетов самые популярные...



    *для hasp usb это не так актуально, но тоже имеет смысл.



    Я не программировал USB устройства (не было оных), но мне кажется что на USB можно понавешать целую кучу SMI (притом не связанных с I/O monitor'ами). :)



    "USB 2.0 Legacy Keyboard Operation

    The ICH4 must support the possibility of a keyboard downstream from either a USB UHCI or a USB EHCI port. The description of the legacy keyboard support is unchanged from USB UHCI (See Section 5.16.8).

    The EHC provides the basic ability to generate SMIs on an interrupt event, along with more sophisticated control of the generation of SMIs."




    Надо достать где-нить USB девайс и проверить всё это.

    Надо полагать, что никому не захочется хучить AC'97 или LAN с помощью SMM. ;) Так что главная jопа заключается в IDE на ICH4-5 (а может ещё и 3?). Жалею, что сдал свою старую MB -- чипсет 440BX, ;) ICH/ICH0 (не помню точно) -- рай для перехвата I/O. Неплохо бы узнать, как дела обстоят на чипсетах других фирм.
     
  15. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    _BC_, физитческий адрес на шкалн слево.

    Речь ведь в мануале интел идёт именно о физ адресе.



    phys A8000, то же фигня, но уже другая...
     
  16. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Я не программировал USB устройства (не было оных), но мне кажется что на USB можно понавешать целую кучу SMI (притом не связанных с I/O monitor'ами). :)



    Там было немного не так... Сами in/out команды hasp4 usb ключа нормально ловились - а чего им не ловиться, если их делал обычный (не защиты) драйвер usb-устройства, да еще через ReadPortUshort. Однако данные передавались и через DMA. Т.е. обмен нижнего драйвера-usb ключ никто не защищал. Однако существует также модель hasp4 lpt (это совсем не старый hasp3 lpt, для которого Соболь написал кучу бесплатных эмуляторов). По функциональности он такой же, как и usb, но вот тут-то весь обмен был тщательно защищен: каждая команда in/out предварялась обязательным сбросом DRx и время от времени сбрасывался бит в CR4. Вот это-то и требовалось вытянуть.



    Однако все это выяснилось не сразу, а мне, к примеру, пришлось долго трассировать и т.п. все драйвера. Имея практически однозначно неубиваемый логгер можно было бы сэкономить кучу времени на определение общей стратегии защиты.
     
  17. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    _BC_, по вирт адресам в si, куда оттображалась физическая память та-же фигня

    10:800A8000|F0|EC|E8|00|F0|EC|E8|00|F0|EC|E8|00|F0|EC|E8|00|

    10:800A8010|F0|EC|E8|00|F0|EC|E8|00|F0|EC|E8|00|F0|EC|E8|00|

    10:800A8020|F0|EC|E8|00|F0|EC|E8|00|F0|EC|E8|00|F0|EC|E8|00|

    10:800A8030|F0|EC|E8|00|F0|EC|E8|00|F0|EC|E8|00|F0|EC|E8|00|



    Народ, кому не сложно, проверьте у себя и напишите результат
     
  18. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    Короче, написал под WinALL тестер. Пока работает по фиксированному адресу. Как добавлю phys-mapping, зашлю.
     
  19. _BC_

    _BC_ БЦ

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





    С USB никаких проблем не будет. На USB можно ставить SMI отдельно от I/O monitor'ов. А DMA и PIC под SMM без проблем ловится.





    ProgramMan



    Вот тестовая прога для 9x/2K/XP. Нужна только совместимость с моим чипсетом. ;) На кнопку Power пищит. Перехватывает порт 3F2h. Мигает светодиодами на клаве при обращении к флопику.

    [​IMG] _316390737__SMM4.RAR
     
  20. ProgramMan

    ProgramMan New Member

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

    Всё работает.



    P.S. только непонятно почему :dntknw:, буду копать дряйвер...

    P.P.S так теперь всё боле-мени понятно
     
Статус темы:
Закрыта.