Рекомендации при разработке приложения.
Лабораторная работа N1
Защита программ от несанкционированной эксплуатации за счет привязки к носителю информации Цель работы: получить навыки по установке защиты на разрабатываемые программы за счет привязки к носителю информации (устройства внешней памяти). Идея защиты основывается на использовании индивидуальных характеристик носителей информации. При запуске приложения проводится проверка на наличие подключенного внешнего устройства с конкретным серийным номером и на нахождение стартовавшей программы на этом устройстве. Данный способ защиты позволяет беспрепятственно копировать приложение, существующие стандарты записи информации не нарушаются, специфических требований к устройствам считывания-записи нет. Возможна организация проверки из разных точек программы с использованием нескольких подобных процедур: цель данных действий - усложнить работу квалифицированного взломщика. Среда ускоренной разработки приложений Delphi позволяет напрямую работать с функциями API-Windows. Для получения информации об устройстве используется WinAPI функция GetVolumelnformation. В HELP-e Delphi (раздел Windows SDK) дано следующее описание параметров этой функции: BOOL GetVolumelnformation( LPCTSTR IpRootPathName, // address of root directory of the file system LPTSTR IpVolumeNameBuffer, // address of name of the volume DWORD nVolumeNameSize, // length of IpVolumeNameBuffer LPDWORD IpVolumeSerialNumber, //address of volume serial number LPDWORD IpMaximumComponentLength, // address of system's maximum //filename length LPDWORD IpFileSystemFlags, //address of file system flags LPTSTR IpFileSystemNameBuffer. // address of name of file system DWORD nFileSystemNameSize // length of IpFileSystemNameBuffer Параметры функции: IpRootPathName - имя устройства, информацию о котором необходимо получить; IpVolumeNameBuffer - имя буфера, в который будет помещено имя тома;
nVolumeNameSize - размер буфера для имени тома; IpVolumeSerialNumber - переменная, в которую будет записан серийный номер; IpMaximumComponentLength - переменная, в которую будет записано максимальное значение пути, поддерживаемое файловой системой; IpFileSystemFlags - флаги файловой системы, может быть любая комбинация флагов:
FS_CASE_IS_PRESERVED - файловая система сохраняет регистр имен файлов, когдасохраняет имя на диске; FS_CASE_SENSITIVE - файловая система чувствительна к регистру имен файлов; FS_UNICODE_STORED_ON_DISK - файловая система поддерживает имена в UNICODE; FS_PERSISTENT_ACLS - файловая система поддерживает списки доступа (NTFS); FS_FILE_COMPRESSION - файловая система поддерживает компрессию на уровне файлов; FS_VOL_IS_COMPRESSED - файловая система поддерживает компрессию на уровне тома;
IpFileSystemNameBuffer - буфер, в который будет помещено имя файловой системы; nFileSystemNameSize - размер буфера для имени файловой системы.
Начальная загрузка параметров:
IpVolumeNameBuffer:="; IpVolumeSerialNumber:= 0; IpMaximumComponentLength:= 0; IpFileSystemFlags:= 0; IpFileSystemNameBuffer:="; GetMem(lpVolumeNameBuffer, Max_Path+1); //выделение памяти для переменной GetMem(lpFileSystemNameBuffer, Max_Path+1); //выделение памяти для переменной nVolumeNameSize:= Nlax_Path+1; nFileSystemNameSize:= Nlax_Path+1; IpRootPathName:= PChar(DriveComboBox1.Drive+'iV); //имя устройства определяется компонентом TDriveComboBox
Рекомендации по проектированию защиты программ: - не используйте стандартные обработчики компонентов, а организуйте проверки в цикле сообщений, - не храните коды в одном месте, - не проверяйте код только в одном месте, - не анализируйте характеристику сразу после ее получения (считывания), - не создавайте для проверки функцию или библиотеку, - не задавайте действия, связанные с проверкой, сразу после самой проверки
- применяйте отвлекающие функции проверок, - не храните результаты проверок в переменных, - не проверяйте контрольные данные одним алгоритмом, - не храните результаты проверки в реестре, - применяйте шифрование программ и данных, - не записывайте текстовые строки в программе в их реальном виде. Действия, направленные против использования отладчиков при взломе программ: - определение отладчика до запуска программы с последующим завершением или эмуляцией ошибки, - изменение работы программы в случае ее выполнения в отладчике, - усложнение листинга, - зашифрованные строки в ресурсах. Выполнение работы Задание на подготовку к работе 1. На своем профиле создать новую папку для хранения разрабатываемого приложения. 2. Запустить Delphi. Среда программирования создаст «пустой» проект. 3. Записать «пустой» проект в папку на своем профиле (пункт основного меню File->Save Project as) 4. Подключить к системному блоку внешний носитель информации (flash-память) Лабораторное задание Задача лабораторной работы - а) определить серийный номер подключенного внешнего носителя информации, б) встроить в приложение проверку наличия внешнего носителя с конкретным серийным номером. Рекомендации при разработке приложения. 3.1. Для определения серийного номера внешнего устройства создайте отдельное приложение и используйте в нем стандартный компонент TDriveComboBox. Возможный вариант интерфейса вспомогательного приложения приведен на рис.1
3.2. Для определения подключенных к компьютеру внешних устройств при встраивании защиты в программу используйте функции GetLogicalDrives: Integer и GetDriveType(Name: PChar): Integer. Текст процедуры, выводящей в компонент TListBox список подключенных внешних устройств компьютера:
Содержание отчета Отчет должен содержать 1. Реквизиты - фамилия студента, номер группы и номер лабораторной работы 2. Цель и задание работы 3. Файлы проекта (Projectl.cfg, Projectl.dof, Projectl.dpr, Projectl.exe, Projectl.res, Unitl -dcu, Unitl.dfm, Unitl.pas) 4. Скриншоты результатов работы программы
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|