створюваний виконуваний файл коду дешифратора, що знаходиться між мітками begin і EndDecoderProgram (див. лістинг 4.1). Код за адресами, старшим адреси мітки EndDecoderProgram, у вихідний файл не копіюється. br/>В
Лістинг 4.3 Процедура кодування ліченого байта
4.3 Код расшифровщика
При запуску захищеного файлу на виконання, програма завантажується в оперативну пам'ять по зсуві 100h. Перші дев'ять байтів з цього зсуву займає код передачі управління на блок дешифрування (див. лістинг 4.2). У рядках 304 - 305 лістингу код занесення вмісту комірки зі зміщенням 107h (точка входу в процедуру дешифрування) в регістр ax. У рядку 306 код команди безумовного переходу по зсуві в регістрі ax. p align="justify"> Спочатку дешіфровщік обчислює розмір образу методом, описаним в лістингу 2.1. Це необхідно для розрахунку адреси повернення з сьомої сторінки відеопам'яті і отримання поточних зсувів початку і кінця коду програми. Отримавши зміщення початку і кінця свого коду, програма завантажує себе в сьому сторінку відеопам'яті по зсуві 100h. Адреса повернення штучно заноситься в стек (див. рядки 32 - 35 лістингу 4.4). Так само в стік заноситься сегмент сьомий сторінки відеопам'яті (0BF00h) і зміщення точки входу в ньому. Завдяки нестандартного застосування команди повернення retf (див. рядок 40 лістингу 4.4), процесор витягує із стека точку входу блоку дешифрування і здійснює перехід за потрібною адресою. p align="justify"> Код рядків 41 - 95 лістингу виконується у відеопам'яті по зсуві, передбаченому компілятором. Це дозволяє використовувати адреси міток і змінних без додаткової настройки. br/>В В
Лістинг 4.4 Основні фрагменти коду дешіфровщіка
Завантажившись в відеопам'ять, розшифровщик налаштовує сегментні регістри, запитує пароль, відновлює початкові дев'ять байтів коду захищеної програми, декодує образ. Процедура декодування аналогічна процедурі шифрування, описаної в пункті 4.1. p align="justify"> У рядку 95 лістингу 4.4 відбувається повернення управління з області відеопам'яті в сегмент розшифрованої програми. Адреса повернення був занесений в стек раніше. p align="justify"> Завершується робота дешіфровщіка відновленням сегментних регістрів і передачею управління на першу команду розшифрованого образу (по зсуві 100h).
5. Інструкція користувача
- запустіть програму coder.com
В
Малюнок 5.1 Запуск програми coder.com
Програми виведе запит імені захищається виконуваного файлу, імені вихідного файлу і пароля.
дайте відповідь на запит введення
Імена файлів слід вводити без розширення.
Якщо файл знаходиться в одному каталозі з програмою coder.com, то повний шлях до файлу можна не вводити, ...