Міністерство освіти і наукиУкраїни
Національний університет “Львівська політехніка”
Кафедра САПР
Курсова робота
З дисципліни
“Системне програмування та операційні системи”
На тему :
“Декодування попередньо заархівованих файлів з паролем”
Виконав :
Студент групи КН-213
Керівник :
Фармага Ігор Вірославович
Прийняв :
Фармага Ігор Вірославович
Оцінка :
Дата :
Львів 2008р
Анотація
Курсова робота з курсу “Системного програмування та операційні системи”.
Декодування попередньо заархівованих файлів з паролем/ Гуменюк В.В., Львів: Національний університет “Львівська політехніка”, 2008.-27 с.
Обсяг даної курсової роботи включно із кодом програм становить 27 сторінок. Курсова робота складається з 4-ти розділів, у яких наведено основні теоретичні відомості по виконанню роботи. Описано основні функції та алгоритм.
Курсова робота ставить ціль – розробити декодер для закодованих архівів .
Кафедра ” Системи автоматизованого проектування ”
Дисципліна Сиситемне програмування і операційні системи
Спеціальність Комп’ютерні науки
Курс 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
ВИСНОВОК:
Метою даної курсової роботи є декодування попередньо заархівованих файлів з паролем. На даний момент, досить розпоширеною є тема декодування файлів. В її основі лежить досить велика історія, що вказує на необхідність та актуальність цієї програми.