Главная страница
Навигация по странице:

  • Цель: Изучить метод защиты программы от несанкционированного копирования. Задачи

  • Лаба. Лабораторная работа №2. Отчет по лабораторной работе 2 по курсу Программноаппаратные средства защиты информации


    Скачать 132.81 Kb.
    НазваниеОтчет по лабораторной работе 2 по курсу Программноаппаратные средства защиты информации
    Дата20.11.2020
    Размер132.81 Kb.
    Формат файлаdocx
    Имя файлаЛабораторная работа №2.docx
    ТипОтчет
    #152166



    Министерство образования и науки Российской Федерации


    ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

    ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

    ВЫСШЕГО ОБРАЗОВАНИЯ

    «ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
    Факультет математики информационных технологий
    Кафедра вычислительной техники и защиты информации

    ОТЧЕТ

    по лабораторной работе №2

    по курсу «Программно-аппаратные средства защиты информации»

    Тема: Привязка программного средства к аппаратному носителю

    ОГУ 10.03.01.6020.009 О
    Руководитель

    канд. тех. наук, доцент

    ____________Р.Р. Галимов

    "__"______________2020 г.

    Исполнитель

    студентка

    группы 18ИБ(б)КЗОИ

    ___________В.А. Калинина

    "__"______________2020 г.

    Оренбург 2020г.

    Содержание


    1Постановка задач 3

    2Ход работы 4

    Заключение 7

    Список источников 8

    Приложение А 9

    1. Постановка задач



    Цель:


    • Изучить метод защиты программы от несанкционированного копирования.


    Задачи:

    1. Добавить в код программы из лабораторной работы №1, который будет открывать программу, если вставлена USB-устройство.


    1. Ход работы



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

    USBSerialNumber usb = new USBSerialNumber();

    string USB = usb.getSerialNumberFromDriveLetter("F:");

    if (USB != "F6D6C5AB")

    {

    MessageBox.Show("USB не подключено!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Warning);

    button1.Enabled = false;

    button2.Enabled = false;
    С помощью кода, представленного ниже, записываем в переменные типа string значения, полученные из другого метода.

    public string getSerialNumberFromDriveLetter(string driveLetter)

    {

    this._driveLetter = driveLetter.ToUpper();

    if (!this._driveLetter.Contains(":"))

    {

    this._driveLetter += ":";

    }

    matchDriveLetterWithSerial();

    return this._serialNumber;

    }
    Представленный ниже код проверяет порты, сопоставляя с буквами дисков.

    private void matchDriveLetterWithSerial()

    {

    string[] diskArray;

    string driveNumber;

    string driveLetter;

    ManagementObjectSearcher searcher1 = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");

    foreach (ManagementObject dm in searcher1.Get())

    {

    diskArray = null;

    driveLetter = getValueInQuotes(dm["Dependent"].ToString());

    diskArray = getValueInQuotes(dm["Antecedent"].ToString()).Split(',');

    driveNumber = diskArray[0].Remove(0, 6).Trim();

    if (driveLetter == this._driveLetter)

    {

    ManagementObjectSearcher disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

    foreach (ManagementObject disk in disks.Get())

    {

    if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) & disk["InterfaceType"].ToString() == "USB")

    {

    this._serialNumber = parseSerialFromDeviceID(disk["PNPDeviceID"].ToString());

    }

    }

    }

    }

    }
    Представленный ниже код записывает серийные номера, подключённых устройств в созданные внутри метода переменные, после чего передаётся в другой метод.

    private string parseSerialFromDeviceID(string deviceId)

    {

    string[] splitDeviceId = deviceId.Split('\\');

    string[] serialArray;

    string serial;

    int arrayLen = splitDeviceId.Length - 1;

    serialArray = splitDeviceId[arrayLen].Split('&');

    serial = serialArray[0];

    return serial;

    }

    }
    При запуске программы без USB-устройства, появляется сообщение, как показано на рисунке 1.

    Рисунок 1 – Сообщение об ошибке

    После оповещения появляется форма, но кнопки заблокированы, как показано на рисунке 2, следовательно, работать с программой нельзя.

    Рисунок 2 – Заблокированная форма
    Если же USB-устройство вставлено и его серийным номер соответствует ключу, то при запуске программы форма открывается беспрепятственно и всё работает, как показано на рисунке 3.

    Рисунок 3 – Рабочее состояние


    Заключение



    В ходе проведения лабораторной работы, программа была привязана к USB-устройству.

    Список источников





    1. Программно-аппаратные средства защиты информации: методические указания / Р.Р. Галимов, А.А. Рычкова; Оренбургский гос. ун-т. – Оренбург: ОГУ, 2015. – 89 с.

    Приложение А



    using System;

    using System.Collections.Generic;

    using System.Windows.Forms;

    using System.Management;
    namespace Permutation

    {

    public partial class Form1 : Form

    {

    public Form1()

    {

    InitializeComponent();

    Encryption.MaxLength = 255;

    USBSerialNumber usb = new USBSerialNumber();

    string USB = usb.getSerialNumberFromDriveLetter("F:");

    if (USB != "F6D6C5AB")

    {

    MessageBox.Show("USB не подключено!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Warning);

    button1.Enabled = false;

    button2.Enabled = false;

    }

    }
    string s = "";

    int[] key = { 3, 1, 5, 2, 4 };
    private void Button1_Click(object sender, EventArgs e)

    {

    if(Encryption.Text.Length<=key.Length)

    {

    for (int i = 0; i < key.Length; i++)

    Encryption.Text += " ";

    }

    for (int i=0; i
    {

    Encryption.Text += " ";

    }

    char[] a = Encryption.Text.ToCharArray();

    List text = new List();

    for(int i=0; i
    {

    char[] mass = new char[key.Length];

    for (int j = 0; j < key.Length; j++)

    mass[j] = a[i+key[j]-1];

    for (int j = 0; j < key.Length; j++)

    text.Add(Convert.ToString(mass[j]));

    }

    for(int i=0; i
    {

    s += text[i];

    s += text[i + key.Length];

    }

    Unencryption.Text = s;

    }
    private void Button2_Click(object sender, EventArgs e)

    {

    s = "";

    char[] a = Unencryption.Text.ToCharArray();

    List text = new List();

    List str = new List();

    double k = key.Length;

    int t = (int)Math.Ceiling(Unencryption.Text.Length / k);

    for(int i=0; i
    {

    for(int j=0; j
    text.Add(Convert.ToString(a[i+j]));

    }

    for (int i = 0; i < a.Length; i += key.Length)

    {

    string[] mass = new string[key.Length];

    for (int j = 0; j < key.Length; j++)

    mass[key[j]-1] = text[i + j];

    for (int j = 0; j < key.Length; j++)

    str.Add(Convert.ToString(mass[j]));

    }

    for (int i = 0; i < a.Length; i++)

    s += str[i];
    Unencryption.Text = s;

    }

    }

    }
    public class USBSerialNumber

    {
    string _serialNumber;

    string _driveLetter;
    public string getSerialNumberFromDriveLetter(string driveLetter)

    {

    this._driveLetter = driveLetter.ToUpper();

    if (!this._driveLetter.Contains(":"))

    {

    this._driveLetter += ":";

    }

    matchDriveLetterWithSerial();

    return this._serialNumber;

    }
    private void matchDriveLetterWithSerial()

    {

    string[] diskArray;

    string driveNumber;

    string driveLetter;

    ManagementObjectSearcher searcher1 = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDiskToPartition");

    foreach (ManagementObject dm in searcher1.Get())

    {

    diskArray = null;

    driveLetter = getValueInQuotes(dm["Dependent"].ToString());

    diskArray = getValueInQuotes(dm["Antecedent"].ToString()).Split(',');

    driveNumber = diskArray[0].Remove(0, 6).Trim();

    if (driveLetter == this._driveLetter)

    {

    ManagementObjectSearcher disks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");

    foreach (ManagementObject disk in disks.Get())

    {

    if (disk["Name"].ToString() == ("\\\\.\\PHYSICALDRIVE" + driveNumber) & disk["InterfaceType"].ToString() == "USB")

    {

    this._serialNumber = parseSerialFromDeviceID(disk["PNPDeviceID"].ToString());

    }

    }

    }

    }

    }
    private string parseSerialFromDeviceID(string deviceId)

    {

    string[] splitDeviceId = deviceId.Split('\\');

    string[] serialArray;

    string serial;

    int arrayLen = splitDeviceId.Length - 1;

    serialArray = splitDeviceId[arrayLen].Split('&');

    serial = serialArray[0];

    return serial;

    }
    private string getValueInQuotes(string inValue)

    {

    string parsedValue = "";

    int posFoundStart = 0;

    int posFoundEnd = 0;

    posFoundStart = inValue.IndexOf("\"");

    posFoundEnd = inValue.IndexOf("\"", posFoundStart + 1);

    parsedValue = inValue.Substring(posFoundStart + 1, (posFoundEnd - posFoundStart) - 1);

    return parsedValue;

    }

    }


    Лист




    написать администратору сайта