Запуск кода из ПЗУ сетевой карты

Тема в разделе "WASM.ELECTRONICS", создана пользователем lukash, 1 сен 2006.

  1. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Мне нужно запустить некий код из БИОСа. Код (которого еще и нет ) являет собой маленькую утилиту для защиты информации на ЖД. Возникли следующие вопросы:

    1) Код хочу поместить в ПЗУ сетевой карты. Если сетевая карточка не поддерживает перепрошивку EEPROM, то можно ли во время работающей машины вытащить БИОС, вставить ПЗУ и прошить ее. Какие ПЗУ использовать. Если я ошибаюсь в чем-то, объясните, пожалуйста.

    2) Как мне скомпилировать мою программу для создания файла прошивки, или это может быть обычная COM программа, использующая только БИОС прерывания.

    3) Если сетевая карта поддерживает перепрошивку, то можно ли записывать/удалять небольшой участок ПЗУ во время работы программы(например пароль). Какую карту следует выбрать для этих целей? Подойдет ли на чипе RTL8139C?

    4) Есть возможность купить недорогую машину для моих экспериментов , подскажите какая конфигурация сможет всё это терпеть (нужно EEPROM Flash БИОС, содержимое которого можно будет изменять программно, чипсет, про который есть много инфы в и-нете). Пока думаю насчет P1-133MHz/Intel 430HX(TX,VX).

    Учусь, поэтому во многом могу ошибаться.
    Спасибо всем кто откликнется.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    lukash
    А как хочешь использовать код(вызывать как его будешь и когда)? И еще все зависет, от того как будешь внедрять свой код.
    И еще можно по подробней, что ты там хочешь сделать?

    Я думаю подойдет. А во вторых не знаю, где ты сможешь найти другой чипсет.
    На RTL8139C есть документация, советую скачать.
     
  3. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    как я понял, нужно воткнуть свой код в 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 можно сделать произвольное фантомное устройство. Ессно, пожертвовав самой сетевухой -- винда ее не найдет. ;)
     
  4. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    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 БИОСа?
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    lukash
    Это возможно только если ты BIOS материнки перепрошьешь. Или если поставишь загрузку с сетевой карты, при наличии Boot ROM в оной.

    Да можно масм, тасм. Я бы взял fasm.
    org 0
    db 55h,0AAh ;BIOS sign
    db .... ;Заголовок
    db ....
    ;код
     
  6. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    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" (или что там) запрещен в биосе.
     
  7. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Огромное вам спасибо за ответы!

    Правда есть еще несколько вопросов, если не надоел:).
    Как мне определить, сколько свободного места в Flash ПЗУ.
    Пусто – это значит 0FFh?
    Если программа предназначена для чипсетов Intel серии 430, то имеет ли смысл хранить изменяемый пользователем пароль в EEPROM (установлен БИОС EEPROM) методом программирования чипсета. Кажется именно это и описано в статье раздела BIOS/CMOS. Если я ошибаюсь, то где и как мне сохранить пароль?
     
  8. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Документацию на RTL8139х почитай - там в PCI конфигурационном пространстве есть адреса PCI ROM - к которым можно обращаться и во время работы сетевухи. По их наличию кстати можно судить о наличии таковой на борту карты.
     
  9. QuAzI

    QuAzI New Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    26
    Адрес:
    Belarus
    Советую порыться на ROM.BY... иногда и код обсуждают...
    Сайт посвящен перепрошивке, там и сетевухи рассматриваются..
    У RTL8139 предел размера ПЗУ 128кб, сам на такой с помощью UniFlash писал... к последней кстати вроде есть исходники на Оф. сайте..
    Что касается загрузки только с сетевухи и защиты пароля от сбрасывания CMOS... А фиг вам батенька, без родной ПЗУ материнка не стартанет и ваша ПЗУ уже не понадобится...
    Что касается защиты винтов... что, SMART не катит? И инфу защитиш и загрузиться без пароля нельзя... и винт не сопрут... от него без пароля - смысла нет :)
     
  10. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Спасибо за интересную ссылку!!!
    Исходники UniFlash тоже нашел.
    Несколько слов о моей программе. Я работаю над проектом, который потом буду защищать (нужно придумать интересную тему и сделать программу ). Поскольку зачастую Boot Rom для удалённой загрузки не используется, решил впихнуть программу туда. Тема должна быть перспективной, поэтому делаю что-то по защите информации, но по-моему этого мало. Если у кого-то есть интересные идеи насчет чего можно добавить к основной программе, просьба поделится:).

    А где про SMART можно почитать, чтоб понятно было?
     
  11. QuAzI

    QuAzI New Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    26
    Адрес:
    Belarus
    Кстати, а код, если он небольшой, можно к BIOS от материнки присобачить... как модуль расширения... но с этим честно говоря толком не возился...
    Про S.M.A.R.T. я в свое время искал через гугль. Так что ничего конкретного посоветовать сейчас немогу...
    насчет защиты инфы.. оно конечно красиво, но... кто помешает мне например тем же UniFlash распотрашить все ПЗУхи в компе с целью поиска нужного кода (т.е. того что у тебя будет зашито)
    Если делать с умом, то надо делать чтобы с ПЗУхи нельзя было считать в итоге... т.е. тебе PCI-плату надо будет паять... ну а на PCI-плате тогда уж можно будет и непосредственно кодировать инфу и раскодировать. Только так весь рабочий код будет скрыт от посторонних...
    В общем... как курсовик пойдет на ура, как что-то реально рабочее - слабовато...
    хотя честно скажу что мне до реализации чегото такого далеко, так что дерзай. если сделаешь - круто будет. А доделать всегда можно.
     
  12. Ole

    Ole Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    69
    Про SMART точно есть на t13.org. И описание этой плюшки и АТА команды. Да, и команды установки пароля тоже видел в спецификации.