Получить время BIOS
Нужно получить время BIOS напрямую. Как это делается?
PS лучше прям пример проги, т.к. в асме я профан. Искал в инете и на вашем сайте, но чтото ничего внятного не нашёл.
самое простое решение для Windows
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'
Если не хотите делиться кодом, укажите хоть правильный путь (гугл не предлагать :) ).
Ещё одно осложнение задачи: прозвучал вопрос про операционку, но
я считал, что решение может зависить от платформы, но не от ОС. Я ошибаюсь? Если код будет на чистом асме, не всё ли равно, в какой ОС он будет выполняться. Если есть зависимость, то как его сделать универсальным?
ЗЫ ахиллес, твои дедуктивные способности мне напоминают бородатый анек "если коробка квадратная значит в ней чтото круглое".
Если не хотите делиться кодом, укажите хоть правильный путь (гугл не предлагать :) ).
Ещё одно осложнение задачи: прозвучал вопрос про операционку, но
я считал, что решение может зависить от платформы, но не от ОС. Я ошибаюсь? Если код будет на чистом асме, не всё ли равно, в какой ОС он будет выполняться. Если есть зависимость, то как его сделать универсальным?
ЗЫ ахиллес, твои дедуктивные способности мне напоминают бородатый анек "если коробка квадратная значит в ней чтото круглое".
"Чистый асм" - это второе название "философского камня" - по крайней мере в контексте решения твоей задачи. Это связано с тем, что ОС класса NT напрямую с устройствами пользовательскому коду работать не позволяют. То есть, уже возникают ограничения. В ОС *nix-подобных ты тоже можешь столкнуться с целым рядом проблем. Это первое.
Второе - я вижу еще хоть какой то смысл в получении уникальных идентификаторов (типа серийного номера устройства или МАК-адреса). Чтение же времени напрямую из BIOS - это решение из разряда - если мне это кажется сложным, то это эффективно :). На самом деле - нет никакой разницы, между использованием GetSystemTime и чтением значения из BIOS - сложность данной защиты и в том и в другом случае равна 0 или к нему стремится. А результат ты получишь один и тот же.
Ну это так - лирика.
На самом деле относительно универсальное решение существует - в частности запись (с последующей модификацией) загрузочного сектора - оттуда загрузка твоего модуля (выполнение контроля и фиксация результата), а потом уже передача управления ОС. Но первый же запуск практически любого антивиря твою защиту демаскирует напрочь. Кроме того, боюсь, что программа которая, изза ошибки разработчика может уронить нах любую систему - вобщем то никому не нужна.
Предупреждая вопрос - типа пример кода - ищешь любой исходник виря, работающего по данной технологии и разбираешься сам. Если что не понятно - значит не судьба. :)
И решение это универсальным не может быть по определению.