русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Защита от копирования: способы, базирующиеся на временных параметрах

Более интересный способ защиты опирается на измерение внутренних временных характеристик системной платы. Три основные подсистемы доступны для таких измерений: CPU, память, подсистема ввода/вывода (См. приложение E). Фактические различия могут оказаться неожиданно большими.


Система

 CPU

Память

I/O

25 MHz 80386 (A)

35972

24576

47292

25 MHz 80386 (B)

35972

24576

49154

20 MHz 80386

44958

30112

59990

12 MHz 80286

3544

41018

46646

                   Табл. Параметры системных плат четырех разных машин.

Значения, показанные в таблице,  являются усредненными,  и получены после многократного запуска программы .  Действительные значения могут отличаться от означенных выше приблизительно на ё4. Системы (A) и (B) имеют два последовательных серийных номера, но могут быть легко отличимы друг от друга по временной характеристике ввода/вывода (Порт 0Ch,  использовался первый контроллер DMA).  Следует также заметить,  что  интервал времени  ввода/вывода  очень чувствителен к режиму процессора (реальный или защищенный), а временные параметры CPU и памяти почти одинаковы в обоих режимах.

#pragma inline
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <alloc.h>

#define INSTRUCTIONS    (16*1024u)

void init_timer_channel( unsigned char channel )
{
asm     pushf
asm     cli
asm     mov     al, channel
asm     ror     al, 1
asm     ror     al, 1
asm     or      al, 36h
asm     out     43h, al
asm     mov     dx, 40h
asm     add     dl, channel
asm     jmp     $+2
asm     jmp     $+2
asm     xor     al, al
asm     out     dx, al
asm     jmp     $+2
asm     jmp     $+2
asm     out     dx, al
asm     popf
}

unsigned
read_sound_timer( void )
{
/*
*      ! This function should not change any register except AX !
*/
asm     mov     al, 80h
asm     out     43h, al
asm     jmp     $+2
asm     jmp     $+2
asm     in      al, 42h
asm     jmp     $+2
asm     mov     ah, al
asm     in      al, 42h
asm     xchg    ah, al
asm     neg     ax
return _AX ;
}

#define disable_count() (outportb(0x61,inportb(0x61)&(unsigned char)~1))
#define enable_count()  (outportb(0x61,inportb(0x61)|(unsigned char)1))

void instruction_fill( char far *buf, unsigned cnt, char instr[ 2 ] )
{
while( cnt-- > 0 ){
*buf++ = instr[ 0 ] ;
*buf++ = instr[ 1 ] ;
}
*buf++ = 0xCB ; /* retf */
}

unsigned
measure( char far *routine )
{
unsigned        time ;

init_timer_channel( 2 ) ;
disable_count() ;
asm     push    cs
asm     lea     ax, ret_point
asm     push    ax
asm     les     bx, routine
asm     push    es
asm     push    bx
asm     xor     dx, dx
asm     mov     bx, 1
asm     cli
enable_count() ;
asm     mov     ax, bx
asm     retf
asm     ret_point       label   near
disable_count() ;
time = read_sound_timer() ;
asm     sti
return time ;
}

int
main( int argc, char *argv[] )
{
char    far     *buf ;
unsigned        idle_time ;
unsigned        CPU_mark, mem_mark, DMA_mark ;

if( ( buf = farmalloc( INSTRUCTIONS * 2 + 1 ) ) == NULL ){
perror( "No memory" ) ;
return -1 ;
}
instruction_fill( buf, 0, NULL ) ;
idle_time = measure( buf ) ;
instruction_fill( buf, INSTRUCTIONS, "\xF7\xF3" ) ;
CPU_mark  = measure( buf ) - idle_time ;                /* div bx       */
instruction_fill( buf, INSTRUCTIONS, "\xC4\x07" ) ;
mem_mark  = measure( buf ) - idle_time ;                /* les ax, [bx] */
instruction_fill( buf, INSTRUCTIONS, "\xE6\x0C" ) ;
DMA_mark  = measure( buf ) - idle_time ;                /* out 0Ch, al  */
printf( "Idle time   = %u\n", idle_time ) ;
printf( "CPU mark    = %u\n", CPU_mark ) ;
printf( "Memory mark = %u\n", mem_mark ) ;
printf( "DMA mark    = %u\n", DMA_mark ) ;
return 0 ;
}

 

К вопросу об индивидуальных параметрах ПЭВМ

Кроме копирования ГМД «диск в диск», возможно копирование только информационных или исполняемых файлов на Другую ПЭВМ. При этом для определения факта переноса на другую ПЭВМ, помимо проверки некопируемых меток на винчестере, можно учитывать и стабильные индивидуальные или редко встречающиеся параметры аппаратной части ПЭВМ.
К ним можно отнести:

  • серийные номера процессора, микросхемы BIOS;
  • стандартную аппаратную конфигурацию данной ПЭВМ;
  • содержание ПЗУ;
  • частотные и временные характеристики узлов ПЭВМ.

Недостатком данного метода является то, что процессоры Intel 8086, Intel 80286 не имеют серийного номера, который можно было бы считать программными средствами; содержание ПЗУ для некоторых экземпляров ПЭВМ бывает одинаково; дата создания микросхемы BIOS отсутствует или одинакова у ПЭВМ типа IBM PC/XT. Поэтому, учитывать только эти параметры недостаточно для надежной идентификации ПЭВМ.

Кроме выделенных параметров для ПЭВМ, имеющих энергонезависимую память (для работы часов и хранения конфигурации), возможно записывать свою информацию в эти области памяти и далее проверять ее наличие и содержание. Такая метка очень легко ставится и так же легко находится, поскольку свободной памяти в CMOS мало.

Кроме того, в последнее время широкое распространение получили продукты, которые используют плату расширения BIOS'a (аппаратно-программная антивирусная защита VIRUS ELENINATOR, плата шифрования Krypton-3 и т. д.). В том случае, если Ваше программное обеспечение достоверно используется на ПЭВМ, оснащенных расширением BIOS'a, возможно проверять его наличие или анализировать фрагменты кода или данных в этих расширениях BIOS'a. Это не составляет труда, поскольку расширение имеет легко определяемый адрес сегмента.

; считывание даты создания BIOS
; дата создания BIOS находится в ПЗУ по адерсу F000:FFF5 и занимает 8 байт в
; формате мм / дд / гг, где: мм – месяц, дд – число, гг – две последние цифры года             .   .   .
; в этой переменной разместится считанная дата создания BIOS
d –date db 8 dup (0)
.   .   .
mov     ax , 0F00h
mov     es , ax
mov     bx , 0FFF5h
xor       di , di
m:        mov     ax , es : [ bx ]
mov     b_date [ di ] , ax
add      di , 2
add      bx , 8
cmp     di , 8
jne       m
; вывод строки на экран
mov     dx , offset b_date
mov     ah , 09h
int        21h

; Считывание слова аппаратной конфигурации ПЭВМ.
mov     ax , 0410h
mov       es , ax
mov     bx , 0
mov     ax , es : [ bx ]
; в регистре АХ получено слово аппаратной конфигурации

; биты                         содержание

; 0                               наличие дисковых устройств
; 1                               наличие сопроцессора
; 2-3                            размер RAM
; 4-5                            текущий видеорежим
; 6-7                            число дисководов
; 8                               наличие DMA контроллера
; 9-11                          число RS232 портов                       
; 12                             наличие игрового адаптера
; 14-15                        число установленных принтеров

 

Что касается частотных параметров, то их проверка сопряжена с риском изменения из-за температурной или иной нестабильности. Особенно это касается частот" строчной и кадровой развертки видеотерминала. Достаточно стабильным являются временные параметры механической части (время передвижения головок) винчестера (ЖМД).

Просмотров: 15296


Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.