Захист від копіювання за допомогою постановки фізичної мітки

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Інші
Група:
ВП

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Звіт До лабораторної роботи №4 Захист від копіювання за допомогою постановки фізичної мітки Львів 2012 Лабораторні роботи №4 Тема: Захист від копіювання за допомогою постановки фізичної мітки. Мета роботи: Зрозуміти принципи побудови захисту від копіювання за допомогою простановки фізичної мітки. Завдання: Написати програму, яка здійснює пошук BAD-кластера на дискеті. Вступ Курс лабораторних робіт базується на лекційному матеріалі з курсу "Системне програмування та операційні системи" та довіднику з мови TURBO-ASSEMBLER. Він дає змогу ознайомитись та вивчити основні особливості цієї мови для практичного застосування. Роз'яснення до завдання. Простановка фізичної мітки. Ідея методу полягає в тому, що при нанесенні на робочі поверхні дискети пошкоджень, спроби читання або запису секторів, що доводяться на пошкоджені зони, приведе до помилки. Очевидно, що при копіюванні дискети з фізичною міткою пошкоджені зони не утворяться на копії, тому, спроба вважати або записати ті сектори, які на оригіналі були пошкоджені, на копії закінчиться цілком успішно. Цей факт і є критерієм для розрізнення копії і оригіналу. Більш акуратна простановка мітки, наприклад, за допомогою лазера призводить до виникнення, як правило, не більше одного пошкодженого сектора. Алгоритм роботи з лазерною міткою буде приблизно таким: • сформатувати дискету; • пропалити мітку; • визначити шляхом запису і читання в кожний сектор конкретний вигляд і місце мітки; • при перевірці легальності копії в це місце треба записати і зчитати інформацію; • легальна копія дає мітку (помилкове читання або запис) в потрібному місці. Нанесення фізичної мітки досить простий, дешевий і стійкий до копіювання спосіб. Необхідно, правда, зазначити, що якщо читання відбувається через переривання, то виявлення фізичної мітки можна моделювати деякою резидентною програмою, яка перевизначає переривання на себе і повертає необхідний код помилки у разі читання або запису в потрібні сектори. Тому, при використанні фізичної мітки необхідно вжити заходів по «захисту» дискового переривання. Методи отримання міток, що не копіюються на жорстких магнітних дисках Особливостями жорсткого магнітного диска (ЖМД) є: • недоступність робочих поверхонь ЖМД, внаслідок чого виключається можливість нанесення фізичної мітки; • великий об'єм інформаційного поля - тому ускладнене копіювання «диск в диск». Отже, основним методом створення мітки, що не копіюється на ЖМД є форматування доріжок за межами робочого поля. При цьому повинні бути виконані наступні вимоги: • збереження мітки при операціях реорганізації диска, наприклад, з використанням засобу SpeedDisk; • невидимість мітки або її неповторність на іншому диску; • збереження мітки при знищенні захищеною від копіювання інформації (програм) на ЖМД з метою створення архівних копій. У зв'язку з цим не рекомендується вміщувати мітку в завантажувальні сектори, оскільки при цьому вона буде виявлена антивірусними засобами, перевіряючи ці зони на наявність вірусів. Не рекомендується «прив'язувати» програми і дані до їх місцеположення на вінчестері, оскільки реорганізація диска або буде неефективна (якщо інформація помічена як непереміщувана), або захищені програми будуть сприйматися як нелегальні копії, оскільки їх місцеположення на диску зміниться. Можливі наступні підходи до простановки мітки: • Аналіз існуючих особливостей вінчестера: • прив'язка до місцеположення BAD-кластерів; • вимірювання тимчасових параметрів електромеханічної частини ЖМД. • Створення власних відмітних міток: • помітка помилкових BAD-кластерів; • використання операцій довгого читання/запису; • нестандартне форматування невживаної доріжки ЖМД. Для прив'язки до місцеположення BAD-кластерів на вінчестері необхідно визначити тип FAT-таблиці і знайти в ній елементи, відповідні BAD-кластерам, після чого запам'ятати їх положення, а надалі перевіряти їх наявність на фіксованих місцях. Приклад. Пошук BAD-кластера #include <dos.h> #include <io.h> // буфери для читання секторів unsigned char buffer[512], buf[512]; int tg, tg1, SecNum, ByteNum; // номер першого сектора FAT і число секторів в FAT int i_Fat1Sec, i_FatSecs; int i_LoopOffs, i_Ind; int sw_fat; /* прапор типу FAT */ int cur_disk; // Визначення поточного диска cur_dsk=getdisk(); // Визначення типу FAT absread(cur_dsk, 1,0, buf); i_FatSecs = *(int *)(buf+0xl6); if(i_FatSecs * 341 / 4096) sw_fat=l; /* 16- бітова FAT*/ else sw_fat=0; /* 12- бітова FAT */ // Визначення номера початкового сектора FAT i_FatlSec = *(int *)(buf+0x0e); // Цикл пошуку BAD-кластера tg=0; for(i =0; i < i_FatSecs; i++){ //Читання чергового сектора FAT absread(cur_dsk, 1, i_Fat1Sec + i, buffer); if(sw_fat ==1) for(j=0; j < 256; j += 1){ if(buffer[j*2] == 0xf7 && buffer[j*2 + 1] == Oxff){ SecNum = i; ByteNum = j*2; tg=l; /* BAD-кластер знайдений */ break; } } else{ i_LoopOffs = i % 3; /* У 12-і бітової FAT деякі елементи попадають на кордон між секторами, тому не всі сектори починаються з нового елемента, перед ним можуть розташовуватися 1 або 2 байти від попередньої пари елементів */ for(j = 0; j < 170; j++){ i_Ind = j*3 + i_LoopOffs; if(buffer[i_Ind] == 0xf7 && (bufгer[i_Ind+l] & 0x0f) == 0x0f){ SecNum = i; ByteNum = i_Ind; tg=l; /* Виявлений BAD-кластер*/ break; } if (buffer [i_Ind+l] & 0xf0)( == 0х70 && ) (buffer[i_Ind+2] == Oxff){ SecNum = i; ByteNum = i_Ind + 1; tg=l; /* Виявлений BAD-кластер */ break; } } } if(tg ==1) /* Виявлений BAD-кластер, вихід з циклу */ break; } Необхідно відмітити, що простановка помилкових BAD-кластерів може бути помічена користувачем захисту, особливо, якщо до початку експлуатації захищеної програми у нього їх не було. Тому, проставляти помилковий BAD-кластер необхідно або в перше від початку FAT вільне місце (імовірність, що при перенесенні на іншу ПЕОМ цей кластер буде зайнятий, велика, а редагувати ланцюжки FAT ризикне не кожен), або в самий кінець FAT, так щоб його не показували засоби типу SpeedDisk. Порядок виконання роботи: Відлагодити та запустити модифікований приклад програми. Перевірити режим копіювання з захищеної від копіювання дискети. Скласти звіт по результатам виконання лабораторної роботи. Модифікована програма: #include<stdio.h> #include<dos.h> #include<io.h> #include<dir.h> int main(void) { unsigned char buffer[512], buf[512]; int i, j, tg, tg1, SecNum, ByteNum; int i_Fat1Sec, i_FatSecs; int i_LoopOffs, i_Ind; int sw_fat; int cur_disk; cur_disk=getdisk(); absread(cur_disk,1,0,buf); i_FatSecs = *(int *)(buf+0x16); if(i_FatSecs * 341 / 4096) sw_fat=1; else sw_fat=0; i_Fat1Sec=*(int *)(buf+0x0e); tg=0; for(i=0;i<i_FatSecs;i++){ absread(cur_disk, 1, i_Fat1Sec + i, buffer); if(sw_fat ==1) for(j=0; j < 256; j += 1){ if(buffer[j*2] == 0xf7 && buffer[j*2 + 1] == 0xff){ SecNum = i; ByteNum = j*2; tg=1; break; } } else{ i_LoopOffs = i % 3; for(j = 0; j < 170; j++){ i_Ind = j*3 + i_LoopOffs; if(buffer[i_Ind] == 0xf7 && buffer[i_Ind+1] & 0x0f == 0x0f){ SecNum = i; ByteNum = i_Ind; tg=1; break; } if (buffer[i_Ind+1] & 0xf0 == 0x70 && buffer[i_Ind+2] == 0xff){ SecNum = i; ByteNum = i_Ind + 1; tg=1; break; } } } if(tg==1) break; } return 0; }
Антиботан аватар за замовчуванням

23.05.2013 19:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!