Нужно отключить и включать устройство, но не из итерфейса биос, а из загруженой ОС по средствам портам 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, но он у меня не работает, считываются одни нули, а хотелось бы считать флеш память биос
А мне нужно из загруженной ОС win7, по средствам самой ОС.
0x80 это число не с потолка , я считывал и 0x200, но после 0x80 значения начинают повторяться. А диф(в шапке) для 2ух разных дампов, с включенным и выключенным CDROM не дают выявить нужный бит Вот я и решил, что конфигурация устройств может хранится где-то ещё.
Через CMOS - тупиковый вариант. Гарантий никаких.
Костыльный вариант - писать драйвер типа фильтра на нужные девайсы (ну, или на шину USB/PCI/etc) и иметь гарантии, что его не снесут регедитом.
Совсем правильный в наших реалиях - писать свой гипервизор...
А кому счас легко...
> писать свой гипервизор...
И заинтегрировать его в BIOS.
В общем - четко сформулированная автором задача, возможно, даст шанс дать ему совет, более-менее прикрывающий частный вариант (каковым задача и окажется, IMHO).
А кому счас легко...
Попробую. Задача отключить cdrom из загруженной ОС, таким образом, чтобы после перезагрузки системы нельзя было грузиться с загрузочного диска, если тот вставлен в cdrom. Если использовать драйвер фильтр, то устройство будет невидимым для ОС, но при загрузке биоса устройство будет видно. Нужный эффект достигается, если отключить cdrom из setup bios. Мне не нужно, чтобы это работало на всех биосах, а только конкретно на моем.
Еще по теме: wiki.osdev.org/CMOS
Не первый раз вижу "сравнивателей CMOS", успеха вроде ни у кого нет. Самому "посравнивать" - не очень интересно.
В данном конкретном случае - я бы делал через интеграцию Addon BIOS c перехватом INT13 и блокировкой или "извращением" CD-функций (в районе AH=4x) . Признак срабатывания перехвата - самому выбрать ячейку CMOS (неиспользуемую/reserved типа).
Хотя я не уверен, что глобальная задача имеет настолько узкий путь решения ("отключить cdrom из загруженной ОС, таким образом, чтобы после перезагрузки системы нельзя было грузиться с загрузочного диска, если тот вставлен в cdrom").
А кому счас легко...
Отправить комментарий