Декодування попередньо заархівованих файлів з паролем.

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

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

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

Рік:
2008
Тип роботи:
Курсова робота
Предмет:
Системне програмування та операційні системи
Група:
КН-213

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

Міністерство освіти і наукиУкраїни Національний університет “Львівська політехніка” Кафедра САПР Курсова робота З дисципліни “Системне програмування та операційні системи” На тему : “Декодування попередньо заархівованих файлів з паролем”    Львів 2008р Анотація Курсова робота з курсу “Системного програмування та операційні системи”. Декодування попередньо заархівованих файлів з паролем/ Гуменюк В.В., Львів: Національний університет “Львівська політехніка”, 2008.-27 с. Обсяг даної курсової роботи включно із кодом програм становить 27 сторінок. Курсова робота складається з 5-ти розділів, у яких наведено основні теоретичні відомості по виконанню роботи. Описано основні функції та алгоритм. Курсова робота ставить ціль – розробити декодер для закодованих архівів . Кафедра ” Системи автоматизованого проектування ”  Дисципліна Сиситемне програмування і операційні системи  Спеціальність Комп’ютерні науки  Курс 2 Група КН-213 Семестр 4 .    Завдання на курсовий проект студента    /прізвище, ім’я, по - батькові/  1. Тема проекту /роботи/ Декодування попередньо заархівованих файлів з паролем    2. Термін здачі студентом закінченого проекту /роботи/ 19.05.2008 р.  3. Вихідні дані для проекту /роботи/  Загальна характеристика програми  Основні команди та функції для написання програми  4. Зміст розрахунково-пояснювальної записки /перелік питань, які підлягають розробці/  Вступна частина  Аналіз мови програмування Асемблер  Концепція декодування  Реалізація програми  Висновки                     6. Дата видачі завдання 24.02.2008 р.  № п/п Назва етапів курсового проекту ( роботи ) Термін виконання етапів проекту ( роботи ) Примітки  1. Отримання завдання 24.02.2008 р.   2. Уточнення завдання 10.03.2008 р.   3. Аналіз книжки ”Асемблер” 2 тиждні   4. Оформлення вступної частини 24.03.2008 р.   5. Розробка 2 розділу пояснювальної записки „ Система програмування на Асемблері ” 7.04.2008 р.   6. Розробка 3 розділу пояснювальної записки „ Концепція декодування ” 21.04.2008 р.   7. Розробка 4 розділу пояснювальної записки „Реалізація програми” 5.05.2008 р.   8. Попередній перегляд проекту викладачем і виправлення помилок 12.05.2008 р.   9. Здача курсового проекту 19.05.2008 р.                        Студент     ( підпис ) ( прізвище, ім’я, по-батькові )   Керівник   Фармага Ігор Вірославович   ( підпис ) ( прізвище, ім’я, по-батькові )        ____________________2008 р      Національни університет ” Львівська політехніка”  /назва вищого учбового закладу/   Зміст Вступ 6 Аналіз мови програмування Асемблер 7 Асемблер як мова програмування 7 Структура програми на Асемблері 7 Структура операндів 9 Способи адресації 9 Класифікація команд 10 Концепція декодування 12 Історія декодування 12 Аналіз декодування 12 Текст програми 15 Висновок 27 ВСТУП. Моя програма написана на мові програмування Ассемблер. Її ціль полягає у створені декодера, який зможе підібрати пароль для архіву з розширенням rar. У цій пояснювальній записці я описав наступні розділи : Аналіз мови програмування Асемблер та аналіз самого декодування. У цих розділах описується що таке Асемблер та концепція декодування. Далі описується сам тест програми. Наступний розділ це загальна структура програми. І в кінці зроблено певні висновки. СИСТЕМА ПРОГРАМУВАННЯ НА АСЕМБЛЕРІ Асемблер як мова програмування Асемблер є мовою програмування низького рівня. Він забезпечує написання, відладку та виконання програм на рівні близькому до машинних команд. Основна область застосування Асемблера - написання високоефективних програм системного характеру (драйверів, динамічна відеографіка, обробка сигналів в режимі реального часу, тощо). Програмування на Асемблері базується на системі програмування, яка забезпечує перехід від початкового файлу з текстом програми до завантаженого файлу, готового до виконання (інтерпретації мікропроцесором). Реалізація програми на Асемблері охоплює такі етапи: - написання програми на мові Асемблера, ввід та оформлення її у вигляді початкового файлу за допомогою текстового редактора (наприклад, Nогtоn Соmmander); - трансляція початкового файлу в об'єктний файл; - редагування зв'язків на основі декількох об'єктних файлів і формування завантаженого файлу для інтерпретації мікропроцесором. Така схема забезпечує незалежне асемблювання кількох початкових файлів з подальшим їх об'єднанням на рівні об'єктних файлів в один завантажений. Вказаний підхід реалізує концепції модульного програмування (розробка та реалізація програм по частинах - модулях). Відповідно розглядають початковий модуль, об'єктний модуль та завантажений модуль. Відомі і простіші схеми асемблювання, які забезпечують, перехід, від рівня початкових файлів до завантажених. Структура програми на Асемблері Програма. на Асемблері складається з модулів. Модулі складаються з сегментів. Сегменти складаються з процедур, команд та директив. Початковий програмний модуль складається з операторів. Виділяються оператори трьох типів: команди, директиви, коментар. Оператори команд визначають операції, які виконує процесор. Директиви вказують Асемблеру та Редактору зв'язків як оформляти (об'єднувати) команди та модулі в програму. Директиви також забезпечують розподіл пам'яті та визначення даних. Оператори команд складаються з символічного імені, коду операції, поля операндів та коментарі. Код операції визначає команду і відрізняє її від директиви. При написанні програми на Асемблері символічне ім’я ставиться перед кодом операції через двокрапку і називається міткою (внутрішньою). Мітка визначає адресу команди в оперативній пам'яті, що може використовуватись, наприклад, операторами переходу. Операнди (два, один, або відсутні) визначають дані над якими виконуються операції процесором. Операнди відділяються один від одного комою, а від коду команди - пропуском. Коментар відділяється від полів команди та операндів пропуском та крапкою з комою. Він не приймає участі в асемблюванні і служить лише для документування програми. Оператори директив складаються з символічного імені, коду псевдооперації, поля операндів та коментаря. Структура директиви аналогічна структурі команди. Код псевдооперації визначає зміст директиви. Операндів директиви може бути декілька і вони розділяються комами, а від коду псевдооперації відділяються пропуском. Символічне ім'я, яке стоїть на початку директиви розподілу пам'яті (директиви визначення) називається змінною. Символічне ім'я директиви відділяється від коду пропуском, а не двокрапкою, як мітка. Коментар записується через пропуск та крапку з комою. Програма складається з модулів, які можуть бути паралельно розроблені та реалізовані. Кожний модуль складається з операторів, які обробляються (транслюються) Асемблером. Для транслятора признакою кінця операторів модуля є директива - ЕND (Кінець). Крім того операнд директиви END визначає точку входу програми. Кожний модуль поділяється на окремі частини директивами сегментації, які визначають початок (SEGMENT) та кінець (ENDS) сегмента. Кожен із сегментів (типів сегментів) має певні функції і забезпечує структуризацію програм. Всі сегменти поіменовані (SSEG - стековий сегмент, CSEG - програмний сегмент, DSEG - сегмент даних, ESEG - додатковий сегмент даних). Директива ASSUME зв'язує довільні імена з сегментами відповідного типу. Типи сегментів визначають функції, що вони виконують (SS, ES та-DS - визначення даних, CS - послідовність команд, а також, директив, що групують ці команди у блоки). Програмний сегмент поділяється на частини директивами визначення процедур (по іменованих). Процедури близькі до підпрограм, але вони знаходяться, у складі початкового модуля. Основні складові програми вказані на прикладі CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG START PROC FAR PUSH DS PAD: MOV BX,DSEG CALL MAIN MOV AX,4C00H INT 21H START ENDP MAIN PROC NEAR MOV AM,CATS . . . RET MAIN ENDP CSEG ENDS END START Структура операндів Виділяють два основних типи операндів: регістровий та операнд в оперативній пам'яті. Команда може мати 0,1,2 операнди. Якщо операнд один, то він або регістровий, або в оперативній пам'яті. Якщо їх два, то один регістровий, а інший в оперативній пам'яті. Операнд в регістрі визначається ім'ям цього регістра. Операнд в оперативній пам'яті визначається вмістом регістрів, поіменованих символічними іменами, областями оперативної пам'яті та константами - це визначає спосіб адресації. Способи адресації Безпосередня адресація: MOV DX,3451H ; (3451H - абсолютна адреса) MOV DX,OFFSET CATS ; адреса, змінної CATS відносно початку сегмента) Індексна адресація: MOV DX,[SI] ; (посередня адресація) Відносна адресація: MOV DX,[BX] ; (посередня адресація) Адресація з індексацією та базуванням: MOV [DX+SI] ; (посередня адресація) Пряма адресація: MOV DX,CATS Пряма адресація з індексацією: MOV DX,CATS[SI] Пряма адресація з базуванням: MOV DX,CATS[BX] Пряма адресація з індексацією та базуванням: MOV DX,CATS[BX+SI] Якщо операнд заданий константою (безпосередня адресація), то він обробляється, як дані (при трансляції підставляється адреса цієї константи). Якщо в операнді вказане ім'я, то це - різновидність прямої адресації. Якщо в операнді імені немає, а є регістри (індексний чи базовий) в квадратних дужках, то це - посередня, адресація, бо адреса визначається через вміст регістрів. Коли є ім’я і регістри, то це пряма адресація з базуванням та індексуванням. Класифікація команд: Команди передачі даних MOV Приклади: MOV AH,CATS MOV AX,BX MOV AH,AL MOV AH,6 Команди порівняння CMP, TEST, умовного JE, JG, JL, JNE, та безумовного JMP переходу Приклади: JMP FAD CMP AH,01 JE C1 CMP AH,01 JNE C2 Команди виклику та повернення з процедури (підпрограми) CALL, RET Приклад: CALL PG RET 4 Команди роботи зі стеком PUSH, POP Приклад: PUSH AX POP Команди роботи зі стрічковими даними LOADSB, MOVSB Приклад: MOV SI, OFFSET CATS MOV DI, OFFSET RATS MOV CX,3 REP MOVSB Команда циклу LOOP Приклад: MOV CX,14 MOV SI,0 DAD: MOV AX,CAT[SI] . . . INC SI LOOP DAD . . . MOV CX,10 C1: PUSH CH MOV CX,20 C2: PUSH CX MOV CX,30 C3: MOV AX,B2 LOOP C3 POP CX LOOP C2 POP CX LOOP C1 Команди побітової обробки AND AX,OFFOOH ; (логічне множення) OR AX,OFFOOH ; (логічне додавання) XOR AH,OF1H TEST AX,BX ; (виконується аналогічно AND, однак операнди не міняються) Команди зсуву SHR AL,1 ; (вправо) MOV CL,3 SHL AL,CL ; (вліво) SAR AL,1 ; (арифметичний зсув вправо) ROR AL,1 ; (циклічний зсув вправо) ROR AL,1 ; (циклічний зсув вправо з переносом) Арифметичні команди ADD AX,DX ; (додавання) SUB AX,AX ; (віднімання) MUL BX ; (множення) DIV BX ; (ділення) Команди переривання INT, STI, CLI Команди вводу/виводу IN AX,DX OUT DX,AX Команди роботи з прапорцями (признаками) TEST AX,01100B Команди керування HLT,WAIT Команди завантаження сегментів LDS, LES Концепція декодування. Історія кодування та декодування відносно давня. Вона починається ще з часів давньої Греції та стародавнього Риму. Наприклад, під час війни ворогуючі сторони відсилали посланців, які передавали вимоги у вигляді шифрів. Але це було ще досить примітивно і передавалось в усній формі. Згодом кодування почали використовувати як зашифровку послань, щоб вороги, які навіть змогли б перехопити повідомлення, все-рівно не змогли б його зрозуміти, тобто розшифрувати. Для цього їм потрібен був так званий декодер, тобто алгоритм розшифровки інформації. У стародавньому Римі відомий такий ,примітивний, але на той час діючий дешифратор: послання надсилалось у вигляді матриці з нібито хаотичним набором символів, як дешифратор тут використовувалась прямокутна пластина з вирізами у середині, накладаючи її на матрицю символів і повертаючи за певною послідовністю, тобто за певним алгоритмом, отримували справжній текст. Досить просто, але ефективно. Коли інформація знайшла своє застосування у радіохвилі, декодування набрало трохи іншого характеру. Одним із самих найпоширеніших прикладів кодування та декодування є «Азбука Морзе». Це інформація, закодована у вигляді коротких та довгих сигналів, яка розкодовувалась за допомогою стійкого алгоритму. Під час другої Світової Війни був розроблений великомасштабний проект під назвою «Енігма». Це був великий механічний пристрій, що займав багато місця, який міг підібрати будь-який пароль, але на це витрачалось досить багато часу, інколи навіть цілі роки. Але за універсальністю він не мав собі рівних. У наш час, коли інформація перебуває загалом у цифровій формі, кодування і декодування є просто необхідним явищем. Коли доступ до інформації є дуже широкий, то виникає необхідність накласти на неї пароль. Але існує дуже широкий спектр програм, які здатні підібрати цей пароль і отримати доступ до інформації. Інформація як відомості про об’єкт або явище відображається у вигляді конкретних даних, що представлені у буквенно-цифровій, числовій, текстовій, звуковій, графічній або іншій зафіксованій формі. Дані можуть передаватися, оброблятися, зберігатися. Інформацію (повідомлення) можна виразити в різноманітних формах: від природних для людини сигналів (звуків, жестів) до їх письмових позначень. Наочним прикладом перетворення форми подання інформації може бути переклад з однієї природної мови спілкування на іншу.Для запису слів використовується алфавіт – набір символів, що дозволяє кожному слову поставити у відповідність визначену послідовність символів – літер, тобто можна сказати, що кожне слово кодується. Залежно від того, де і яким чином представляється інформація, використовується відповідне кодування. Так для запису (кодування) чисел в десятковій системі числення використовуються 10 символів. Для запису слів – літери. Для кодування інформації в комп’ютері найзручніше (з технічних причин) використовувати мову, алфавіт якої містить всього два символи. Їх умовно позначають нулем та одиницею, а мову цю називають мовою двійкових кодів. За допомогою цих символів можна представити все розмаїття інформації. Одиницею виміру інформації є біт – він позначає „місце”, на яке можна „записати” 0 або 1. 8 бітів складають байт. Значення байту залежить від того, які позиції та у якій послідовності у ньому займають нулі та одиниці. Загалом, кількість комбінацій бітів у байті дорівнює 28=256, тобто біт може набувати 256 різних значень. Для кодування окремих символів достатньо коду довжиною 1 байт. Для кодування цілого числа, як правило, використовуються два або чотири байти, а для дійсного – вісім, інколи шість. В комп’ютерах інформація кодується відповідно до алфавіту двійкових чисел – кодової таблиці. За загальноприйнятим стандартом ASCII (американський стандарт для обміну інформацією) кодами від 32 до 127 записуються цифри та літери англійського алфавіту, з 128 символу – кодування символів національних алфавітів, деяких математичних знаків тощо. Для кодування графічної інформації також використовуються біти та байти. Так, кожна картинка складається з точок різного кольору. Так, для кодування зображення однієї чорно-білої точки достатньо 1 біту, для 16-кольорової картинки кожна точка кодується 4 бітами, для 256-кольорової – 8 бітами (1 байтом). Звукова інформація складається з елементарних звуків та пауз між ними. Тому кожному звуку відповідає певний код. Щоб із закодованої послідовності символів отримати інформацію, треба знати принцип кодування алфавіту, тобто знати, що означає кожен символ. І якщо ми маємо такий алфавіт, то процес отримання інформації із закодованої називається декодуванням. Як вже було вище зазначено декодування це, в деякій мірі алгоритм. Алгоритм – це скінчена послідовність вказівок (команд), формальне виконання яких дозволяє за обмежений час отримати розв’язок задачі. Сам термін “алгоритм” утворився в результаті перекладу на європейські мови імені арабського математика ІХ століття Аль-Хорезмі, який описав правила (алгоритми) виконання основних арифметичних операцій у десятковій системі числення. У своїй практичній діяльності люди постійно мають справу із алгоритмами (послідовностями вказівок, інструкціями, правилами тощо). Для прикладу можна назвати приготування кулінарної страви згідно з рецептом, користування міжміським телефоном-автоматом, пошук слова у словнику, розв’язування квадратного рівняння. Властивості алгоритмів Скінченність. Виконання кожного алгоритму повинно завершуватись з а скінченне число кроків. Результативність. Виконання алгоритму завжди повинно призводити до певного результату. Воно не може закінчуватись невизначеною ситуацією або ж не закінчуватися взагалі. Формальність. Виконавець відповідно до алгоритму повинен одержати результат, не вникаючи в його суть. Очевидно, що комп'ютери не можуть розуміти суть завдань і окремих вказівок алгоритму. Визначеність. Будь-який алгоритм повинен бути описаний так, щоб при його розшифруванні у виконавця не виникло двозначних вказівок. Тобто різні виконавці згідно з алгоритмом повинні діяти однаково та прийти до одного і того ж результату. Масовість. За допомогою складеного алгоритму повинен розв’язуватись цілий клас задач. Зрозумілість. В алгоритмі повинні бути лише операції, які знайомі виконавцеві. Досконалим виконавцем алгоритмів обробки інформації є комп’ютер, робота якого здійснюється під керівництвом програм. Алгоритми можна описувати за допомогою слів, спеціальних мов, використовуючи спеціальні формули, таблиці, графіки, блок-схеми, інші засоби. Алгоритм записується засобами мови, зрозумілої виконавцю. Для людини – це природна мова. Для комп’ютера мова складається з нулів та одиниць. Використання такої мови для складання програм є неефективним. Тому використовуються спеціальні мови – мови програмування. Мова програмування дозволяє записувати команди у такій формі, щоб їх можна було автоматично замінити на машинні коди. Це перетворення здійснюється автоматично за допомогою спеціальних програм-перекладачів, які називаються трансляторами. Текст програми .MODEL small .CODE ORG 05Ch FCB_1 label ORG 06CH FCB_2 LABEL ORG 80H PCOUNT LABEL BYTE ORG 81H PDATA LABEL BYTE ORG 100H ENTRY: jmp main BADPARAMS_MSG DB 'Decoder v 0.05 freeware :)',13,10,13,10 db 'Use: Decoder -<key> <archive>',13,10,13,10 db '<key>',13,10 db ' n Passwords are only from numbers',13,10 db ' a Passwords of all of letters and numbers',13,10 db ' f Passwords are from a database user.pas',13,10,'$' PMSG DB 'Please wait...',13,10,'$' isParam db ? s_sp dw 0 s_ss dw 0 ;-------------------- D_Result dw 'xx' T_HANDLE dw ? Out_Handle dw ? Pas_Handle dw ? T_DIR db 'C:\',10 dup(0) CHAR db 'x' file db 'User.pas',0 meter db ? SizeFPas dw ? ;----------------------- Exec Parameters Block EPB DW 0 ; DW offset CMD ; Вказівник на CMD DW 0 DD 0 ; DD 0 ; DD 0 ; CMD DB 14,'e -p000 -o- ',13,100 dup ('0') ExeProg DB 'unrar.exe',0 ;----------------------- Pass_Good db 13,'Password is:$' pass1 db 48 pass2 db 48 pass3 db 48 temp1 db 0 temp2 db 0 E_O_F db 13,'Error open temp file!$' E_O_d db 13,'Error open data base file!$' E_L_P db 13,'Error load unrar.exe!$' E_O_A db 13,'You enter not correct name archive file or archive is decompressed.$' P_No_Num db 13,'Password is not number.$' P_No_Thr db 13,'A password is not three by a bit.$' P_No_File db 13,'In a database is not contain a password to this archive$' Enter_Par db ? MAIN: mov ax,cs ;20.05.08 mov EPB+4,ax ;EPB+4 mov al,BYTE PTR PCOUNT cmp al,0 jnz @yes_params mov dx,OFFSET BADPARAMS_MSG mov ah,09h int 21h .exit @yes_params: xor cx,cx mov cl,PCOUNT sub cl,4 ;Передаєм кількість символів адреси mov di,cx ; mov al,[cmd] ; add al,cl mov cmd,al xor cx,cx mov cl,PCOUNT dec cl mov isParam,0 push cs pop ds mov si,OFFSET PDATA @start: lodsb cmp al,' ' je @nextT cmp al,'-' je @param mov bl,isParam test bl,bl jz @BadParamsT @next_char: lodsb mov [CMD+di],al mov [cmd+di+1],13 inc di dec cx jnz @next_char mov ah,45h mov bx,01 int 21h mov Out_Handle,ax ;jmp @Exec @Call_Exec: cmp Enter_Par,1 jne @p1 call OnlyNumber jmp @Exec @p1: cmp Enter_par,2 jne @p2 call AllChar @p2: cmp Enter_par,3 jne ex call FilePas ex: .exit @nextT: jmp @next @BadParamsT: jmp @BadParams @StartT: jmp @Start @E_O_D: mov dx,OFFSET E_O_D mov ah,09h int 21h .exit @param: lodsb dec cx cmp al,'n' jnz @c1 mov Enter_Par,1 jmp @k1 @c1: cmp al,'a' jnz @C2 mov Enter_Par,2 mov pass1,65 mov pass2,65 mov pass3,65 jmp @k1 @c2: cmp al,'f' jnz @badParams mov Enter_Par,3 mov ah,3dh mov al,0 mov dx,offset file int 21h jc @E_O_D mov Pas_Handle,ax mov meter,0 @k1: mov isParam,1 mov dx,OFFSET PMSG mov ah,09h int 21h mov di,13 lodsb cmp al,13 je @badParams dec cx jmp @next_char @start2: jmp @startT @next: mov isParam,0 dec cx jnz @start2 ret @badParams: mov dx,OFFSET BADPARAMS_MSG mov ah,09h int 21h .exit @Exec: MOV CX,10 mov si,0 L2: mov [T_DIR+3+si],0 inc SI DEC CX LOOP L2 mov ah,5ah ;створення mov cx,0 ;тимчасового mov dx,offset T_DIR ;файлy int 21h mov T_HANDLE,ax mov bx,T_HANDLE mov ah,46h ;Перенаправлення стандартного mov cx,1 ;виведення в тимчасовий int 21h ;файл mov bx,T_HANDLE mov ah,46h ;Перенаправлення стандартного mov cx,2 ;виведення про помилки в тимчасовий int 21h lea bx,end_p MOV dx,bx mov cl,4 shr bx,cl mov ah,4ah int 21h ;Вивільняєм пaмять mov s_sp,sp mov s_ss,ss mov bh,[pass1] mov cmd+5,bh mov bh,[pass2] mov cmd+6,bh mov bh,[pass3] mov cmd+7,bh MOV ax,cs mov ds,ax mov es,ax mov ax,WORD PTR FCB_1 mov dx,WORD PTR FCB_1 + 2 mov [bx+6],WORD PTR AX ;Передаєм параметри MOV [bx+8],WORD PTR DX ;FCB mov dx,offset ExeProg mov bx,offset EPB mov ax,4b00h int 21h je @Exec_Er mov ss,s_ss mov sp,s_sp mov bx,Out_Handle ;Перенаправлення виводу на mov ah,46h ;екран mov cx,1 int 21h call Result cmp D_Result,0 jne @Exit_G jmp @Call_Exec @Exec_Er: mov dx,offset E_L_P ;Виведення повідомлення mov ah,09h ; про помилку int 21h .exit @execT: jmp @exec @Exit_G: mov dx,OFFSET Pass_Good mov ah,09h int 21h mov dl,pass1 mov ah,02h int 21h mov dl,pass2 mov ah,02h int 21h mov dl,pass3 mov ah,02h int 21h .exit OnlyNumber proc mov dl,13 mov ah,02h int 21h mov dl,pass1 mov ah,02h int 21h mov dl,pass2 mov ah,02h int 21h mov dl,pass3 mov ah,02h int 21h inc pass3 cmp pass3,58 jne @execT mov pass3,48 inc pass2 cmp pass2,58 jne @execT mov pass2,48 inc pass1 cmp pass1,58 jne @execT mov ah,09h mov dx,offset P_No_Num int 21h .exit @execT2: jmp @execT OnlyNumber endp AllChar proc mov dl,13 mov ah,02h int 21h mov dl,pass1 mov ah,02h int 21h mov dl,pass2 mov ah,02h int 21h mov dl,pass3 mov ah,02h int 21h cmp pass3,223 jg @p11 inc pass3 cmp pass3,176 jl @execT2 mov pass3,224 jmp @ExecT2 @p11: inc pass3 cmp pass3,246 jne @ExecT2 mov pass3,31 jmp @t_a @execT3: jmp @execT2 @t_a: cmp pass2,223 jg @p12 inc pass2 cmp pass2,176 jl @execT2 mov pass2,224 jmp @ExecT2 @p12: inc pass2 cmp pass2,246 jne @ExecT3 mov pass2,31 cmp pass1,223 jg @p13 inc pass1 cmp pass1,176 jl @execT3 mov pass1,224 jmp @ExecT3 @p13: inc pass1 cmp pass1,246 jne @ExecT3 mov pass1,31 mov ah,09h mov dx,offset P_No_Thr int 21h .exit AllChar endp FilePas proc mov dl,13 mov ah,02h int 21h mov dl,pass1 mov ah,02h int 21h mov dl,pass2 mov ah,02h int 21h mov dl,pass3 mov ah,02h int 21h mov ah,42h mov bx,5 mov al,meter mul bx xor dx,dx xor cx,cx mov dl,al mov bx,Pas_Handle mov al,0 int 21h mov ah,3fh mov bx,Pas_Handle mov cx,5 mov dx,offset pass1 int 21h mov ax,4406h mov bx,Pas_Handle int 21h cmp al,0 je @f1 int 03h inc meter jmp @ExecT3 @f1: mov ah,09h mov dx,offset P_No_File int 21h .exit FilePas endp Result proc MOV AH,42H ;функція переміщення вказівника MOV AL,2 ;код встановлення в кінець файлу MOV BX,T_HANDLE ;HANDLE MOV CX,0 mov DX,0 INT 21H cmp al,0 je @E_O_F_R sub al,3 mov D_Result,ax;al MOV AH,42H ;функція переміщення вказівника MOV AL,0 ;код встановлення в кінець файлу MOV BX,T_HANDLE MOV CX,0 xor DX,DX mov Dx,D_Result ;зміщення результату INT 21H ;в файлі mov ah,3fh mov bx,T_HANDLE mov cx,1 mov dx,offset char int 21h mov ah,3eh mov bx,T_handle int 21h cmp char,0efh jne @ch1 mov ah,41h mov dx,offset T_DIR int 21h mov ah,09h mov dx,offset E_O_A int 21h .exit @ch1: mov ah,41h mov dx,offset T_DIR int 21h cmp char,174 je @g_result mov D_Result,0 @E_R: ret @g_result: mov D_Result,1 jmp @E_R @E_O_F_R: mov ah,09h mov dx,offset E_O_F int 21h .exit Result endp END_P db 0 END ENTRY ВИСНОВОК: Метою даної курсової роботи є декодування попередньо заархівованих файлів з паролем. На даний момент, досить розпоширеною є тема декодування файлів. В її основі лежить досить велика історія, що вказує на необхідність та актуальність цієї програми.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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