Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Программирование изменений характеристик файла

Лабораторная работа

 

Цель работы: получить навыки по маскировке защитных действий в разрабатываемом приложении.

 

1. Основные положения.

Разработчик программы заинтересован в наиболее полном представлении возможностей своих разработок для привлечения внимания потенциального покупателя, в результате он вынужден рисковать, предлагая на рынок Trial и Demo-версии приложений, являющиеся полнофункциональными.

В качестве средств защиты от несанкционированной эксплуатации программного обеспечения широко используются способы распространения продукта с ограниченными возможностями, такими как

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

- ограниченное количество запусков программы.

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

Пример организации типовой защиты, основанной на ограничении количества запусков программы:

 

program Trial;

 

uses Forms,

Unit1 in 'Unit1.pas' {Form1},

Registry, SysUtils, Dialogs; // Для TRegistry, IntToStr и ShowMessage

{$R *.RES}

var N: Integer;

Reg: TRegistry;

begin

Reg: = TRegistry.Create;

with Reg do

begin

OpenKey('software', True);

OpenKey('TrialProg', True);

if ValueExists('MaxRun') then // Первый запуск?

begin // - Нет

N: = ReadInteger('MaxRun')-1;

if N> =0 then

WriteInteger('MaxRun', N)

end

else

begin // -Да, первый запуск

N: = 5;

WriteInteger('MaxRun', N)

end;

Free

end;

if N> 0 then

begin

Application.CreateForm(TForm1, Form1);

Form1.Label2.Caption: = IntToStr(N-1); Application.Run;

end else

ShowMessage('Исчерпано максимальное количество запусков пробной версии программы')

end.

 

При использовании защит, основанных на контроле даты выполнения или контроле количества запусков программы, более перспективным является хранение контрольных параметров в замаскированной форме в файлах, выбранных самим разработчиком и хранимых в произвольном месте (например, среди вспомогательных файлов самого приложения). При подобном подходе актуальной становится маскировка обращений к файлам, в которых хранятся текущие значения контрольных параметров. Общеизвестно, что при любом изменении содержимого файла операционная система автоматически корректирует внешние характеристики файла, такие, как длина, время и дата создания, которые хранятся в файловой системе.

Изменение даты и времени файла

Использование процедуры FileSetDate(Handle: Integer; newDate: TDateTime);

Handle - указатель (дескриптор) обрабатываемого файла, может быть определен с помощью

- функции API-Windows FileOpen, например

var Handle: Integer;

..............................

Handle: = FileOpen(filename, fmOpenReadWrite);

FileSetDate(Handle, Datetimetofiledate(newtime));

FileClose(Handle);

- свойства Handle класса TFileRec, например

var TheFile: file;

..............................

AssignFile(TheFile, FileName); Reset(TheFile);

FileSetDate(TFileRec(TheFile).Handle, DateTimeToFileDate(newDate)); Close(TheFile);

 

Использование процедуры SetFileTime

procedure ChangeDate(FileName: string);

var i: TDate;

Handle: Integer;

f: TFileTime;

s: TSystemTime;

begin

Handle: = CreateFile(PChar(FileName), $0100, 0, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);

i: = Date;

DateTimeToSystemTime(i, S);

SystemTimeToFileTime(S, F);

LocalFileTimeToFileTime(F, F);

SetFileTime(Handle, @f, @f, @f);

CloseHandle(Handle);

end;

 

Использование процедуры SetFTime

var f: file;

begin

Assign(f, DirInfo.Name);

Reset(f);

SetFTime(f, Time);

Close(f);

end;

 

2. Выполнение работы

Лабораторное задание

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

 

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

2.2. Для выбора файла используйте стандартные диалоговые компоненты TEdit, TButton, TOpenDialog.

2.3. Рекомендуемый интерфейс тестовой программы:


2.4. Возможный вариант организации процедуры для изменения даты и времени файла:

function SetFileDateTime(FileName: string; NewDateTime: TDateTime): Boolean;

var

Handle: Integer;

FileTime: TFileTime;

LFT: TFileTime;

LST: TSystemTime;

begin

Result: = False;

try

DecodeDate(NewDateTime, LST.wYear, LST.wMonth, LST.wDay);

DecodeTime(NewDateTime, LST.wHour, LST.wMinute, LST.wSecond, LST.wMilliSeconds);

if SystemTimeToFileTime(LST, LFT) then

begin

if LocalFileTimeToFileTime(LFT, FileTime) then

begin

Handle: = FileOpen(FileName, fmOpenReadWrite);

if SetFileTime(Handle, nil, nil, @FileTime) then

Result: = True;

end;

end;

finally

FileClose(Handle);

end;

end;

 

2.5. Для маскировки действий используйте отвлекающие функции (мусорный код, например: организация «пустого» цикла с невыполняемыми переходами на лишние метки).

 

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

1. Какие способы распространения программных продуктов Вы знаете?

2. В файле какого формата предпочтительнее хранить значение счетчика запусков программы?.

3. В каком виде предпочтительнее хранить значения даты и времени?

4. Как организовать в теле программы дополнительные проверки?

5. Что понимается под недокументированными точками входа в программу?

6. Сформулируйте рекомендации для обеспечения тестовых проверок работы приложения в случае использования защиты, основанной на использовании счетчика запусков программы.

7. Как рационально организовать ведение протокола при защите, основанной на учете количества запусков программы?

8. Как противостоять применению отладчиков при попытке взлома программы?

<== предыдущая лекция | следующая лекция ==>
Физика атомного ядра | 
Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2026 год. (0.411 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал