Отключить устройство редактированием CMOS

Нужно отключить и включать устройство, но не из итерфейса биос, а из загруженой ОС по средствам портам I/O. Для экспериментов написал CMOS дампер и пытался отключить CDROM. Размер CMOS получился 0x80 байт, если считывать больше, то данные начинают повторяться. Сам биос от asus, документацию конкретно к моей модели не смотрел, ориентировался по общей. В итоге сделал 2 дампа, с включенным cdrom и выключенным через bios. И сделал для этих дампов диф:

Цитата:

dif offset:
0x0 0x2 0x3f

0x0 и 0x2 это часики, 0x3f это чексумма, значение по оффсету 0x3f отличаются одним битом. А где же сам флаг для cdrom? и от чего же в таком случае считается чексумма?? Проделал этот эксперимент несколько раз, отключал другие устройства, всё одно. Чексумма меняется, а значения отвечающие за устройства в даме остаются неизменны.
Далее написал драйвер который восстанавливает данные из дампа в память CMOS, выключил cdrom и перезаписал память CMOS дампом с включенным cdrom. Перезагружаю систему и биос сбрасывается по дефолту. Когда биос сбросился, я содрал дамп с CMOS и диф уже был на много интереснее, помимо часиков и чексуммы, проявилось ещё куча оффсетов.
Нашел тут на форуме в теме про CMOS такое сообщение:
Цитата:

Да, та же микросхема памяти-флеш используется для хранения настроек БИОСа. А раньше, когда это сохранялось в CMOS, можно было вытащить батарейку, и тем самым сбросить настройки. Обычно для этого используют первый блок флеш.

Это похоже на мой случай. Нашел в сети пример вируса, который стирал флеш память биос и попробовал реализовать на основе этого кода дампер флеш памяти биос, но что-то не вышло, считываются одни нули. Может есть у кого проверенный способ считать флеш?

Какая ОС? Если скажем Windows Vista, 7, 8, то придется писать драйвер, хоть и не сложный. Из под XP и 16 битная COM программа подойдет, или вообще через debug можно дампить, изменять, etc.

Поизучайте исходники LinuxBIOS/CoreBoot, если вам это интересно и если вы не просто ищете решение :)

ОС win7. Вариант с драйвером меня вполне устраивает. Чтобы патчить CMOS тоже надо было драйвер писать. Исходники посмотрю, будет хорошо если там найдется полезный код. Меня интересует возможно ли сделать мной задуманное и в каком направлении копать.
Вот более конкретный пример kiev-security.org.ua/box/12/116/flash_it.shtml, но он у меня не работает, считываются одни нули, а хотелось бы считать флеш память биос:)

proj писал(-а):
Нашел тут на форуме в теме про CMOS такое сообщение:
Цитата:
Да, та же микросхема памяти-флеш используется для хранения настроек БИОСа. А раньше, когда это сохранялось в CMOS, можно было вытащить батарейку, и тем самым сбросить настройки. Обычно для этого используют первый блок флеш.
Это похоже на мой случай.
Вряд ли это ваш случай:). В той теме затронули вопрос сохранения конфигурации и не совсем удачно назвали это настройками BIOS.

proj писал(-а):
Может есть у кого проверенный способ считать флеш?
Программатор, например:D.

proj писал(-а):
Размер CMOS получился 0x80 байт
Вообще-то желательно считывать побольше - 0x100 хотя бы:). 0x72+0x73 и т.д. IMHO спасет отца русской демократии.

Цитата:
Программатор, например:D.

А мне нужно из загруженной ОС win7, по средствам самой ОС.

Цитата:

Вообще-то желательно считывать побольше - 0x100 хотя бы:). 0x72+0x73 и т.д. IMHO спасет отца русской демократии.

0x80 это число не с потолка :), я считывал и 0x200, но после 0x80 значения начинают повторяться. А диф(в шапке) для 2ух разных дампов, с включенным и выключенным CDROM не дают выявить нужный бит:( Вот я и решил, что конфигурация устройств может хранится где-то ещё.

Аватар пользователя savely

Через CMOS - тупиковый вариант. Гарантий никаких.
Костыльный вариант - писать драйвер типа фильтра на нужные девайсы (ну, или на шину USB/PCI/etc) и иметь гарантии, что его не снесут регедитом.
Совсем правильный в наших реалиях - писать свой гипервизор...

А кому счас легко...

Аватар пользователя savely

> писать свой гипервизор...
И заинтегрировать его в BIOS.

В общем - четко сформулированная автором задача, возможно, даст шанс дать ему совет, более-менее прикрывающий частный вариант (каковым задача и окажется, IMHO).

А кому счас легко...

Цитата:

> писать свой гипервизор...
И заинтегрировать его в BIOS.

shock

Цитата:

четко сформулированная автором задача, возможно, даст шанс дать ему совет

Попробую. Задача отключить cdrom из загруженной ОС, таким образом, чтобы после перезагрузки системы нельзя было грузиться с загрузочного диска, если тот вставлен в cdrom. Если использовать драйвер фильтр, то устройство будет невидимым для ОС, но при загрузке биоса устройство будет видно. Нужный эффект достигается, если отключить cdrom из setup bios. Мне не нужно, чтобы это работало на всех биосах, а только конкретно на моем.

Еще по теме: wiki.osdev.org/CMOS

Аватар пользователя savely

Не первый раз вижу "сравнивателей CMOS", успеха вроде ни у кого нет. Самому "посравнивать" - не очень интересно.
В данном конкретном случае - я бы делал через интеграцию Addon BIOS c перехватом INT13 и блокировкой или "извращением" CD-функций (в районе AH=4x) . Признак срабатывания перехвата - самому выбрать ячейку CMOS (неиспользуемую/reserved типа).

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

А кому счас легко...

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей