Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IBIZI.doc
Скачиваний:
38
Добавлен:
21.04.2019
Размер:
2.31 Mб
Скачать

Лабораторная работа №4. «Защита от копирования. Привязка к аппаратному обеспечению. Использование реестра»

Цель работы: ознакомиться с возможностями “привязки” к характеристикам компьютера.

Теоретические сведения

В качестве анализируемых характеристик компьютера используются:

  • информация об используемой операционной системе

  • имени пользователя;

  • имени компьютера;

  • наличии звуковой карты;

  • наличии подключенных принтера, сканера и т.д;

  • дата создания bios;

  • серийный номер диска;

  • характеристик процессора и т.д.;

  • данные реестра.

Для получения подобных характеристик в операционной системе Windows используются API-функции и информация из реестра.

1.API-функции

API сокращенно Application Programming Interface(интерфейс прикладного программирования). API - набор функций, которые операционная система предоставляет программисту. API обеспечивает относительно простой путь для программистов для использования полных функциональных возможностей аппаратных средств или операционной системы.

32-разрядные версии Windows, или 95/98 или NT, обычно используют один и тот же набор функций API, хотя имеются некоторые различия между платформами. 32-разрядный API содержит многочисленные расширения и поддержки к устаревшему 16-разрядному API, используемому в Windows 3.x. Старые функции поддерживаются по причинам совместимости. Однако, 32-разрядные приложения должны использовать исключительно 32-разрядные функции. Это не проблема, так как 16-разрядные функции обычно заменялись подобными функциями.

Почти все функции, которые составляют Windows API - внутри DLL (Dynamic Link Library) . Эти dll-файлы находятся в системной папке Windows.Существует свыше 1000 функций API,которые условно делятся на на четыре основные категории.

  • Работа с приложениями-запуск и закрытие приложений,обработка команд меню,перемещения и изменения размера окон.

  • Графика-создание изображений.

  • Системная информация-определение текущего диска,объем памяти,имя текущего пользователя и т.д.

  • Работа с реестром-манипуляции с реестром Windows.

2. Реестр Windows

Реестр - база данных операционной системы, содержащая конфигурационные сведения. Физически вся информация реестра разбита на несколько файлов. Реестры Windows 9х и NT частично различаются. В Windows 95/98 реестр содержится в двух файлах SYSTEM.DAT и USER.DAT, находящиеся в каталоге Windows. В Windows Me был добавлен еще один файл CLASSES.DAT.

По замыслу Microsoft он должен был полностью заменить файлы ini, которые были оставлены только для совместимости со старыми программами, ориентированными на более ранние версии операционной системы.

Почему произошел переход от ini файлов к реестру? Дело в том, что на эти файлы накладывается ряд серьезных ограничений, и главное из них состоит в том, что предельный размер такого файла составляет 64Кб.

ПРЕДУПРЕЖДЕНИЕ: НИКОГДА не удаляйте или не меняйте информацию в реестре, если Вы не уверены что это именно то, что нужно. В противном случае некорректное изменение данных может привести к сбоям в работе Windows и, в лучшем случае, информацию придется восстанавливать из резервной копии.

Реестр имеет следующую структуру:

HKEY_CLASSES_ROOT. В этом разделе содержится информация о зарегистрированных в Windows типах файлов, что позволяет открывать их по двойному щелчку мыши, а также информация для OLE и операций drag-and-drop;

HKEY_CURRENT_USER. Здесь содержатся настройки оболочки пользователя (например, Рабочего стола, меню "Пуск", ...), вошедшего в Windows. Они дублируют содержимое подраздела HKEY_USER\name, где name - имя пользователя, вошедшего в Windows. Если на компьютере работает один пользователь и используется обычный вход в Windows, то значения раздела берутся из подраздела HKEY_USERS\.DEFAULT;

HKEY_LOCAL_MACHINE. Этот раздел содержит информацию, относящуюся к компьютеру: драйверы, установленное программное обеспечение и его настройки;

HKEY_USERS. Содержит настройки оболочки Windows для всех пользователей. Как было сказано выше, именно из этого раздела информация копируется в раздел HKEY_CURRENT_USER. Все изменения в HKCU (сокращенное название раздела HKEY_CURRENT_USER) автоматически переносятся в HKU;

HKEY_CURRENT_CONFIG. В этом разделе содержится информация о конфигурации устройств Plug&Play и сведения о конфигурации компьютера с переменным составом аппаратных средств;

HKEY_DYN_DATA. Здесь хранятся динамические данные о состоянии различных устройств, установленных на компьютере пользователя. Именно сведения этой ветви отображаются в окне "Свойства: Система" на вкладке "Устройства", вызываемого из Панели управления. Данные этого раздела изменяются самой операционной системой, так что редактировать что-либо вручную не рекомендуется.

Примеры процедур и функций, определяющих параметры компьютера

Определение серийного номера HDD

procedure TForm1.Button1Click(Sender: TObject);

var

SerialNum:Pdword;

a,b:Dword;

buffer:array [0..255] of char;

begin

new(SerialNum);

if getVolumeInformation('c:\',buffer,sizeof(buffer),SerialNum,a,b,nil,0) then

Label1.Caption:=IntToStr(SerialNum^);

Dispose(SerialNum);

end;

Определение буквы CD-ROM

procedure TForm1.Button1Click(Sender: TObject);

var

w:dword;

Root:string;

i:integer;

begin

w:=GetLogicalDrives;

Root := '#:\';

for i := 0 to 25 do

begin

Root[1] := Char(Ord('A')+i);

if (W and (1 shl i))>0 then

if GetDriveType(Pchar(Root)) = DRIVE_CDROM then

Form1.Label1.Caption:=Root;

end;

end;

Определение системной информации

Procedure GetInfo;

Var

WinVer, WinFlags : LongInt; { Версия Windows и флаги }

hInstUser, Fmt : Word; { Дескриптор }

Buffer : ARRAY[0..30] OF Char; { Буфер под ASCIIZ строку }

begin

hInstUser := LoadLibrary('USER'); { Открыли библиотеку User }

LoadString(hInstUser, 514, Buffer, 30);

LabelUserName.Caption := StrPas(Buffer); { Имя пользователя }

LoadString(hInstUser, 515, Buffer, 30);

FreeLibrary(hInstUser);

LabelCompName.Caption := StrPas(Buffer); { Компания }

WinVer := GetVersion;

LabelWinVer.Caption := Format('Windows %u.%.2u', { Версия Windows }

[LoByte(LoWord(WinVer)), HiByte(LoWord(WinVer))]);

LabelDosVer.Caption := Format('DOS %u.%.2u', { Версия DOS }

[HiByte(HiWord(WinVer)), LoByte(HiWord(WinVer))]);

WinFlags := GetWinFlags;

IF WinFlags AND WF_ENHANCED > 0 THEN

LabelWinMode.Caption := '386 Enhanced Mode' { Режим }

ELSE IF WinFlags AND WF_PMODE > 0 THEN

LabelWinMode.Caption := 'Standard Mode'

ELSE LabelWinMode.Caption := 'Real Mode';

IF WinFlags AND WF_80x87 > 0 THEN { Сопроцессор }

ValueMathCo.Caption := 'Present'

ELSE ValueMathCo.Caption := 'Absent';

Fmt := GetFreeSystemResources(GFSR_SYSTEMRESOURCES);

ValueFSRs.Caption := Format('%d%% Free', [Fmt1]); { Свободно ресурсов }

{ Свободно памяти}

ValueMemory.Caption := FormatFloat(',#######', MemAvail DIV 1024) + ' KB Free';

end;

Определение готовности дисковода к работе

function DiskInDrive(const Drive: char): Boolean;

var

DrvNum: byte;

EMode: Word;

begin

result := false;

DrvNum := ord(Drive);

if DrvNum >= ord('a') then dec(DrvNum,$20);

EMode := SetErrorMode(SEM_FAILCRITICALERRORS);

try

if DiskSize(DrvNum-$40) <> -1 then result := true

else messagebeep(0);

finally

SetErrorMode(EMode);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var s:string;

begin

If DiskInDrive('A') then s:='Drive is Ready'

else s:='Drive is not Ready';

Form1.Label1.Caption:=s;

end;

Определение тактовой частоты процессора.

function GetCPUSpeed: Double;

const DelayTime = 500; // measure time in ms

var

TimerHi, TimerLo: DWORD;

PriorityClass, Priority: Integer;

begin

PriorityClass := GetPriorityClass(GetCurrentProcess);

Priority := GetThreadPriority(GetCurrentThread);

SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);

SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);

Sleep(10);

asm

dw 310Fh // rdtsc

mov TimerLo, eax

mov TimerHi, edx

end;

Sleep(DelayTime);

asm

dw 310Fh // rdtsc

sub eax, TimerLo

sbb edx, TimerHi

mov TimerLo, eax

mov TimerHi, edx

end;

SetThreadPriority(GetCurrentThread, Priority);

SetPriorityClass(GetCurrentProcess, PriorityClass);

Result := TimerLo / (1000.0 * DelayTime);

end;

begin

LabelCPUSpeed.Caption := Format('CPU speed: %f MHz', [GetCPUSpeed]);

end;

Проверка наличия звуковой карты

uses mmsystem;

begin

if WaveOutGetNumDevs>0 then result:= 'Yes'

else result:='No';

edit1.text:=result;

end;

Занесение новых данных в реестр

procedure TForm1.Button1Click(Sender: TObject);

var

reg: TRegistry;

begin

reg:=Tregistry.Create;

Reg.RootKey:=HKEY_CURRENT_USER; // открыть ветвь

Reg.OpenKey('ant47\\Test',true); //создать ключ

Reg.WriteString('DATA','ПИ-102-злодеи'); //записать данные

end;

Удаление данных из реестра

procedure TForm1.Button2Click(Sender: TObject);

Var

reg2: TRegistry;

begin

reg2:=Tregistry.Create;

Reg2.RootKey:=HKEY_CURRENT_USER; // открыть ветвь

Reg2.DeleteKey('ant47\\Test'); //удалить ключ

end;

Чтение данных из реестра

procedure TForm1.Button2Click(Sender: TObject);

Var

reg2: TRegistry;

begin

reg2:=Tregistry.Create;

Reg2.RootKey:=HKEY_CURRENT_USER; // открыть ветвь

Reg2.OpenKey('ant47\\Test',true);

edit1.text:=Reg2.readstring('DATA'); //прочитать данные

end;

Задание на лабораторную работу

Создать в программе привязку к компьютеру, используя совокупность характеристик согласно варианту задания. Добиться того, чтобы программа не запускалась на другом компьютере.

Таблица 1. Характеристики CD-ROM

№ Варианта

Характеристики

1

Серийный номер жесткого диска, наличие звуковой карты

2

Информация из реестра, тактовая частота процессора

3

Версия операционной системы, наименование CD-ROM в сиcтеме

4

Имя пользователя, наличие звуковой карты

5

Название компьютера, информация из реестра

Контрольные вопросы

  1. Что понимается под “привязкой” к компьютеру?

  2. Какие характеристики обычно используются для идентификации компьютера?

  3. Перечислите основные API-функции для определения индивидуальных характеристик компьютера.

  4. Что представляет собой реестр Windows?

  5. Какую структуру имеет реестр?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]