Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получить время BIOS

9.0K
14 декабря 2007 года
RedNN
33 / / 15.08.2006
Доброго времени суток.
Нужно получить время BIOS напрямую. Как это делается?
PS лучше прям пример проги, т.к. в асме я профан. Искал в инете и на вашем сайте, но чтото ничего внятного не нашёл.
1.6K
14 декабря 2007 года
Vov4ick
476 / / 01.02.2007
Какая ОС?
261
14 декабря 2007 года
ahilles
1.5K / / 03.11.2005
если ты профан в ассемблере, то зачем тебе нужно время BIOS, значит это какая-то лабораторка, а значит и раздел соответсвующий.
самое простое решение для Windows
Код:
format PE GUI 4.0
entry start

include 'win32a.inc'

section '.code' code readable writeable executable

date SYSTEMTIME

start:

      invoke GetSystemTime, date
      mov ax, [date.wYear]  ; в ax год
      mov bx, [date.wMonth] ; в bx месяц
      mov dx, [date.wDay]   ; в dx день


      push 0
      call      [ExitProcess]

section '.idata' import data readable writeable

  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL'

  import kernel,\
         ExitProcess,'ExitProcess',\
         GetSystemTime,'GetSystemTime'
9.0K
14 декабря 2007 года
RedNN
33 / / 15.08.2006
А нельзя получить без использования функций, подобных GetSystemTime, собственно под этим я и понимал "напрямую", т.е. на самом низком уровне. И штука эта нужна для организации защиты проги, написанной на С++. Идея проста, как три копейки - триал версия программы будет ограничена по времени. В контексте моей задачи считаю эту защиту надёжной, но разговор не об этом.

Если не хотите делиться кодом, укажите хоть правильный путь (гугл не предлагать :) ).

Ещё одно осложнение задачи: прозвучал вопрос про операционку, но
я считал, что решение может зависить от платформы, но не от ОС. Я ошибаюсь? Если код будет на чистом асме, не всё ли равно, в какой ОС он будет выполняться. Если есть зависимость, то как его сделать универсальным?

ЗЫ ахиллес, твои дедуктивные способности мне напоминают бородатый анек "если коробка квадратная значит в ней чтото круглое".
1
15 декабря 2007 года
kot_
7.3K / / 20.01.2000
Цитата: RedNN
А нельзя получить без использования функций, подобных GetSystemTime, собственно под этим я и понимал "напрямую", т.е. на самом низком уровне. И штука эта нужна для организации защиты проги, написанной на С++. Идея проста, как три копейки - триал версия программы будет ограничена по времени. В контексте моей задачи считаю эту защиту надёжной, но разговор не об этом.

Если не хотите делиться кодом, укажите хоть правильный путь (гугл не предлагать :) ).

Ещё одно осложнение задачи: прозвучал вопрос про операционку, но
я считал, что решение может зависить от платформы, но не от ОС. Я ошибаюсь? Если код будет на чистом асме, не всё ли равно, в какой ОС он будет выполняться. Если есть зависимость, то как его сделать универсальным?

ЗЫ ахиллес, твои дедуктивные способности мне напоминают бородатый анек "если коробка квадратная значит в ней чтото круглое".



"Чистый асм" - это второе название "философского камня" - по крайней мере в контексте решения твоей задачи. Это связано с тем, что ОС класса NT напрямую с устройствами пользовательскому коду работать не позволяют. То есть, уже возникают ограничения. В ОС *nix-подобных ты тоже можешь столкнуться с целым рядом проблем. Это первое.
Второе - я вижу еще хоть какой то смысл в получении уникальных идентификаторов (типа серийного номера устройства или МАК-адреса). Чтение же времени напрямую из BIOS - это решение из разряда - если мне это кажется сложным, то это эффективно :). На самом деле - нет никакой разницы, между использованием GetSystemTime и чтением значения из BIOS - сложность данной защиты и в том и в другом случае равна 0 или к нему стремится. А результат ты получишь один и тот же.
Ну это так - лирика.
На самом деле относительно универсальное решение существует - в частности запись (с последующей модификацией) загрузочного сектора - оттуда загрузка твоего модуля (выполнение контроля и фиксация результата), а потом уже передача управления ОС. Но первый же запуск практически любого антивиря твою защиту демаскирует напрочь. Кроме того, боюсь, что программа которая, изза ошибки разработчика может уронить нах любую систему - вобщем то никому не нужна.
Предупреждая вопрос - типа пример кода - ищешь любой исходник виря, работающего по данной технологии и разбираешься сам. Если что не понятно - значит не судьба. :)

1
15 декабря 2007 года
kot_
7.3K / / 20.01.2000
Есть еще вариант с выделением места в неразмеченной области диска (так как объем данных который тебе надо сохранить невелик, то проблем с этим не возникнет), запись туда контрольного значения и затем при каждой загрузке считывание и сравнение. Но тогда необходимости читать время из BIOS тем более нет никакой.
И решение это универсальным не может быть по определению.
9.0K
15 декабря 2007 года
RedNN
33 / / 15.08.2006
kot_, пасиб, объяснил доступно :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог