рамою запитується і перевіряється пароль, відновлюються перші дев'ять байтів коду захищається додатки, які зберігаються в спеціальному буфері расшифровщика. Після цього декодується образ, і управління передається розшифрованих коду. br/>
4. Опис програми
4.1 Структура програми
У програмі виділяються два основних функціональних блоку: код шифратора і код дешифратора. Блок шифрации потрібно тільки на етапі створення нового захищеного виконуваного файлу, тому, на відміну від ділянки коду дешифратора, що не дописується в кінець вихідного. Com файлу. Було логічно помістити його після коду розшифровувача (див. лістинг 4.1). До того ж, це спрощує згодом обчислення розміру зашифрованого образу, операції з налаштування адрес на етапі завантаження расшифровщика в відеопам'ять, а так само дозволяє копіювати код дешифратора в сьому сторінку відеопам'яті по зсуві 100h, що є звичайним розташуванням. Com програм. br/>В
Лістинг 4.1 Загальна структура програми
4.2 Код шіфровщіка
Передача управління на блок шифрации відбувається у рядку 9 лістингу 4.1.
Спочатку шифратор запитує введення імені файлу, призначеного для захисту, імені результуючого файлу, пароль. Потім відбувається корекція вмісту буферів за допомогою спеціальної процедури FilenameCorrectProc, описаної в рядках 315 - 346 (див. лістинг в додатку А.1). Призначена вона для зрушення рядків і додавання розширення. Com в кінці кожного рядка. Далі відкривається захищається файл для читання, створюється вихідний файл у відповідності з вказаним ім'ям, підраховується довжина вхідного файлу за допомогою процедури FilenameCorrectProc, описаної в рядках 353 - 357 лістингу, на підставі отриманої довжини підраховується точка входу в процедуру дешифратора і зберігається у змінній jmpAdress107h (см . лістинг 4.2). Ділянка коду, що містить цю змінну, записується в початок нового виконуваного файлу. Згодом при запуску файлу на виконання ця змінна буде завантажена по зсуві 107h, надавши можливість визначити розташування дешифратора. br/>В
Перші дев'ять байтів файлу, відкритого для читання, зберігаються в буфер FirstBytesOfOriginalProgram, що знаходиться перед дешифратором.
На наступному етапі шіфровщікі копіює залишився вміст вхідного файлу у вихідний, попередньо кодуючи кожен лічений байт за допомогою процедури CodingByteProc (див. лістинг 4.3). На вхід процедури кодування подається байт для кодування і адреса буфера, що зберігає пароль. Розраховується контрольна сума пароля шляхом побайтового підсумовування елементів буфера з відкиданням старшого байта результату. На виході процедури байт результату, отриманий застосуванням операції "виключає або" до контрольної сумі пароля і вхідного байту. p align="justify"> Завершується робота шифратора копіюванням в ...