"С.П.Расторгуев, А.Е.Долгин "Как защитить информацию" (пособие по борьбе с хакерами)" - читать интересную книгу автора

Один из методов определения быстродействия компьютера представлен
в процедуре "Sample" (рис. 3.1), который фиксирует отсчет таймера за
время выполнения фрагмента 16 - 20. В регистр AX заносится для
дальнейшего использования результат. Напомним, непосредственное его
сравнение с некоторой эталонной величиной может привести к ошибке
из-за нестабильности задающего генератора ПЭВМ. Отметим также, что
реализация аналогичного алгоритма на языке BASIC даст еще больший
разброс значений - это общий недостаток почти всех языков высокого
уровня. Для исключения грубых ошибок и повышения точности необходимо
провести многократные измерения и воспользоваться алгоритмом на рис.
1.1 (глава "Идентификация пользователя: "свой"-"чужой?").
Время выполнения одного и того же участка программы на разных
компьютерах скорее всего будет отличаться, что и позволит выделить
определенную ПЭВМ из ряда аналогичных.
Тот же пример (рис. 3.1) годится и для измерения скорости работы
оперативного запоминающего устройства (ОЗУ). Его электрическая схема
набирается из микросхем (МС), объемом по 16, 32 или 64 Кб (килобит). В
зависимости от типа, 8 - 16 таких МС составляют 1 блок (электронщики
называют их "блоком", а программисты "страницей"), емкостью 64 КБ
(килобайт). Значит, в стандартном адресном пространстве IBM PC/XT в
640 КБ - 10 блоков МС, причем каждый имеет собственные характеристики,
чуть-чуть отличающиеся от других. То есть быстродействие страниц ОЗУ у
каждого компьютера различно. На участке 16 - 20 осуществляется простая
перезапись содержимого области памяти (ее регенерация). Время
регенерации всех страниц составит ряд из 10 чисел, значения и
последовательность которых характерны только для данной ПЭВМ.
Скорость вращения двигателей дисководов определяется аналогично
(например, замер по таймеру операции чтения/записи некоторого сектора
или дорожки дискеты, как это делает COPYLOCK).
Под скоростью реакции на внешние воздействия понимается время,
необходимое компьютеру на отклик после получения команды внешнего
устройства, или размер паузы между выдачей команды, например, в
контроллер накопителя гибких магнитных дисков (НГМД), и приходом
сигнала готовности (аппаратное прерывание IRQ7 для НГМД). Измерения
проводятся по отсчетам таймера, но можно использовать и свой
программный счетчик, как это делает BIOS при дисковых операциях.
Если речь идет о компьютерах одной партии, то информация о типе и
конфигурации не уникальна, хотя, как дополнительный элемент привязки к
характеристикам ПЭВМ, не повредит. Ее можно получить через прерывание
BIOS 11h (или по адресу 40h:0010h ОЗУ), а более исчерпывающую - из
CMOS-памяти. Гораздо сложнее определить программным путем тип МП.
Характеристики третьей группы, очевидно, не всегда индивидуальны у
конкретной машины. Общеизвестно, что в одной партии конрольная сумма
BIOS одинакова (если, конечно, это не так называемая "белая" сборка).
Энергонезависимая память CMOS, содержащая часы реального времени и
информацию о конфигурации, также зачастую одинакова. К сожалению,
формат CMOS различен на разных типах машин, а значит единого способа
привязки нет. Если же расчет строится на определенный тип компьютера,
то доступ к CMOS вполне возможен (с условием, что конфигурация не
будет меняться в процессе эксплуатации программы).