Мне нужно запустить некий код из БИОСа. Код (которого еще и нет ) являет собой маленькую утилиту для защиты информации на ЖД. Возникли следующие вопросы: 1) Код хочу поместить в ПЗУ сетевой карты. Если сетевая карточка не поддерживает перепрошивку EEPROM, то можно ли во время работающей машины вытащить БИОС, вставить ПЗУ и прошить ее. Какие ПЗУ использовать. Если я ошибаюсь в чем-то, объясните, пожалуйста. 2) Как мне скомпилировать мою программу для создания файла прошивки, или это может быть обычная COM программа, использующая только БИОС прерывания. 3) Если сетевая карта поддерживает перепрошивку, то можно ли записывать/удалять небольшой участок ПЗУ во время работы программы(например пароль). Какую карту следует выбрать для этих целей? Подойдет ли на чипе RTL8139C? 4) Есть возможность купить недорогую машину для моих экспериментов , подскажите какая конфигурация сможет всё это терпеть (нужно EEPROM Flash БИОС, содержимое которого можно будет изменять программно, чипсет, про который есть много инфы в и-нете). Пока думаю насчет P1-133MHz/Intel 430HX(TX,VX). Учусь, поэтому во многом могу ошибаться. Спасибо всем кто откликнется.
lukash А как хочешь использовать код(вызывать как его будешь и когда)? И еще все зависет, от того как будешь внедрять свой код. И еще можно по подробней, что ты там хочешь сделать? Я думаю подойдет. А во вторых не знаю, где ты сможешь найти другой чипсет. На RTL8139C есть документация, советую скачать.
как я понял, нужно воткнуть свой код в PCI expansion ROM сетевой карты. Тут 2 основных варианта: 1. сетевуха внешняя, в виде PCI-карточки. Если повезет, может попасться сетевуха с BootROM'ом на борту -- тогда искать пзу нужного типа не надо. Но на многих сетевухах пзу отсутствует -- например, у меня была карта без BootROM'a, только DIP-32 площадка под нее. Есть сетевухи, на которых даже и разъема нету, т.е. бут ром не поддерживается в принципе. 2. сетевуха, встроенная в MB. Тут интереснее -- вместо отдельной пзу, BootROM сетевой карты находится в прошивке BIOS, в виде PCI expansion-модуля. Соответственно, для внедрения своего кода необходимо патчить и перепрошивать BIOS. Тогда логичнее не перезаписывать своим кодом ROM-модуль сетевухи, а добавить отдельный extension ROM к BIOS'у (это в статьях описывалось кстати). В обоих случаях надо писать extension ROM, который будет получать управление при загрузке, перехватывать прерывания типа int 19h или int 13h и делать всю черную работу (на довольно низком уровне). Настройки встроенной сетевой карты (включая ейный MAC-адрес) хранятся, как и у внешней сетевухи, в отдельном EEPROM'е (программно доступном). Этот еепром для встроенной сетевухи еще примечателен тем, что, согласно даташитам, на весьма большой части систем из него берутся идентификационные параметры для PCI conf сетевой карты -- теоретически, вместо сетевой карты в PCI conf space можно сделать произвольное фантомное устройство. Ессно, пожертвовав самой сетевухой -- винда ее не найдет.
Pavia Код должен вызываться из BIOSа до начала роботы MAIN BOOT. Затем он сменит вектор прерывания (int13,int19) на вектор моей процедуры. Должно получиться что-то наподобие Virus Varning в БИОСе Из статей раздела BIOS/CMOS есть листинг "Пример "скелета" программы для записи в ПЗУ", и листинг для вычисления контрольной суммы. Но ведь код, который нужно прошить, должен быть в HEX виде, и начинаться с 55h,0AAh. Можно ли MASMом? Или я ошибаюсь? _BC_ Для PCI карты. Всё правильно, но меня интересует как программно можно перепрошить ПЗУ. Можно ли использовать дизассемблерный код из программ - перепрошивальщиков, как Pg8139. Можно ли перепрошить ПЗУ вытащив БИОС рабочей машины прошивальщиками типа uniflash, etherboot, ... А в какой статье описывается сетевая карта, встроенная в MB? Насчет пароля. Можно ли сделать пароль на вход в мою утилиту? В CMOS записывать пароль не хочу- нужно чтобы он функционировал и послу сброса CMOS. Можно ли его записывать в Boot Rom PCI сетевой карты, или в EEPROM БИОСа?
lukash Это возможно только если ты BIOS материнки перепрошьешь. Или если поставишь загрузку с сетевой карты, при наличии Boot ROM в оной. Да можно масм, тасм. Я бы взял fasm. org 0 db 55h,0AAh ;BIOS sign db .... ;Заголовок db .... ;код
lukash ну это как повезет с картой -- есть сетевухи, позволяющие перепрошивку бут рома прямо на карте, утилитами от производителя. Подавляющее большинство можно зашить на материнке, заменой "на горячую". Ну и обязательно по закону подлости должно существовать какое-нибудь экзотическое г..но, допускающее перепрошивку только на специальном программаторе. Вот линк кстати интересный, может уже был там, но тем не менее: http://www.etherboot.org особенно http://sourceforge.net/projects/etherboot/ Статьи -- подразумевались наcчет добавления своего expansion ROM в BIOS -- на эту тему наверное только ленивый не писал, есть статья на васме в статьях, есть от К.Касперски, есть от Pinczaco (afair). они не рассчитаны на изменение "на лету" вообще-то. Можно сделать как на wifi-картах -- дефолтовый пароль, зашитый в железо, и как бы пользовательский, который можно менять. EEPROM чипсетной сетевухи не самое лучшее место, т.к. теоретически (по прихоти производителя MB) может и отсутствовать, или оказаться read-only, плюс программируется весьма неудобно. Pavia ROM POST init с нее выполнится, даже если "Boot from network" (или что там) запрещен в биосе.
Огромное вам спасибо за ответы! Правда есть еще несколько вопросов, если не надоел. Как мне определить, сколько свободного места в Flash ПЗУ. Пусто – это значит 0FFh? Если программа предназначена для чипсетов Intel серии 430, то имеет ли смысл хранить изменяемый пользователем пароль в EEPROM (установлен БИОС EEPROM) методом программирования чипсета. Кажется именно это и описано в статье раздела BIOS/CMOS. Если я ошибаюсь, то где и как мне сохранить пароль?
Документацию на RTL8139х почитай - там в PCI конфигурационном пространстве есть адреса PCI ROM - к которым можно обращаться и во время работы сетевухи. По их наличию кстати можно судить о наличии таковой на борту карты.
Советую порыться на ROM.BY... иногда и код обсуждают... Сайт посвящен перепрошивке, там и сетевухи рассматриваются.. У RTL8139 предел размера ПЗУ 128кб, сам на такой с помощью UniFlash писал... к последней кстати вроде есть исходники на Оф. сайте.. Что касается загрузки только с сетевухи и защиты пароля от сбрасывания CMOS... А фиг вам батенька, без родной ПЗУ материнка не стартанет и ваша ПЗУ уже не понадобится... Что касается защиты винтов... что, SMART не катит? И инфу защитиш и загрузиться без пароля нельзя... и винт не сопрут... от него без пароля - смысла нет
Спасибо за интересную ссылку!!! Исходники UniFlash тоже нашел. Несколько слов о моей программе. Я работаю над проектом, который потом буду защищать (нужно придумать интересную тему и сделать программу ). Поскольку зачастую Boot Rom для удалённой загрузки не используется, решил впихнуть программу туда. Тема должна быть перспективной, поэтому делаю что-то по защите информации, но по-моему этого мало. Если у кого-то есть интересные идеи насчет чего можно добавить к основной программе, просьба поделится. А где про SMART можно почитать, чтоб понятно было?
Кстати, а код, если он небольшой, можно к BIOS от материнки присобачить... как модуль расширения... но с этим честно говоря толком не возился... Про S.M.A.R.T. я в свое время искал через гугль. Так что ничего конкретного посоветовать сейчас немогу... насчет защиты инфы.. оно конечно красиво, но... кто помешает мне например тем же UniFlash распотрашить все ПЗУхи в компе с целью поиска нужного кода (т.е. того что у тебя будет зашито) Если делать с умом, то надо делать чтобы с ПЗУхи нельзя было считать в итоге... т.е. тебе PCI-плату надо будет паять... ну а на PCI-плате тогда уж можно будет и непосредственно кодировать инфу и раскодировать. Только так весь рабочий код будет скрыт от посторонних... В общем... как курсовик пойдет на ура, как что-то реально рабочее - слабовато... хотя честно скажу что мне до реализации чегото такого далеко, так что дерзай. если сделаешь - круто будет. А доделать всегда можно.
Про SMART точно есть на t13.org. И описание этой плюшки и АТА команды. Да, и команды установки пароля тоже видел в спецификации.