FORUM
В11 12 номере "ZX РЕВЮ" (стр. 254) за прошлый год мы писали о существовании "циклических" защит программ от копирования и упоминали защиты класса ALKATRAZ LOADER.
Вответ на эту заметку пришло несколько писем. Победы, одержанные нашими читателями над этим загрузчиком с помощью аппаратных средств мы рассматривать не будем, считая этот путь не относящимся к теме, а вот частный случай, с которым разобрался Д.Коронцвит из Г. Жуковского, Моск. обл., мы рассмотрим.
Почему нас не интересуют аппаратные пути взлома и копирования программ? Дело в том, что с программистской точки зрения взлом ради взлома, копирование ради копирования не интересны. Нас интересуют программистские приемы, новые методы, короче интересует все то, на чем можно учиться и набирать опыт. И, если быть до конца честными, то надо признаться, что любые статьи, посвященные вскрытию программ и снятию защит в основном служат не тем, кто их снимает, а тем, кто их ставит и тем, кто учится программировать.
Итак, по порядку. Просматривая загрузчики, написанные Сергеем Скоробогатовым для дискофицированных им программ Winter Edition, Chase H.Q., Agent X и др., наш читатель столкнулся с листингом, который выглядел примерно так (см. листинг 1, комментарий к листингу наш, "ИНФОРКОМ"):
Декодирование вручную, с помощью MONS3 показало, что то, что было АБРАКАДАБРОЙ, содержит блок, очень похожий на то, что Вы видите на листинге. Изменился только "ключ" и конечно изменился адрес, загружаемый в регистровую пару HL. Дальнейшее декодирование открыло еще один аналогичный блок и т.д. Длина и структура всех трех просмотренных блоков были одинаковыми.
Конечно, это лишь частный случай, но этот факт позволил написать программу, которая все последующее декодирование выполнила автоматически. Конечно, в более общих случаях она не сработает, но сам принцип будет полезен начинающим, а по мере необходимости они смогут адаптировать метод к конкретным условиям.
Пример декодирующей процедуры приведен в листинге 2.
|
|
| ЛИСТИНГ 1 |
| LD HL,nn | загрузили адрес, с которого начинается декодируемый блок. | |
| LD ВС,nn | длина этого блока (организовали счетчик). | |
LOOP | LD A,(HL) | приняли байт для декодирования. | |
| XOR "ключ" | само декодирование. | |
| LD (HL),A | заслали декодированное значение на место АБРАКАДАБРЫ. | |
| INC HL | перешли к очередному байту. | |
| DEC BC | уменьшили счетчик байтов на единицу. | |
| LD A,B | подготовка к проверке счетчика на ноль. | |
| OR C | проверка счетчика на ноль. | |
| JR NZ,LOOP |
|
|
| .................. | ||
| АБРАКАДАБРА |
|
|
| ................... | ||
|
|
| ЛИСТИНГ 2 |
AGAIN | LD IX (аа) | аа адрес ячейки, в которой организовано хранение адреса начала | |
|
|
| "взламываемого" блока. |
| LD L,(IX+1) | второй и третий байты исследуемого блока | |
| LD H,(IX+2) |
| содержат адрес декодируемого куска |
| LD C,(IX+4) | пятый и шестой байты исследуемого блока | |
| LD D,(IX+5) |
| содержат длину декодируемого куска. |
LOOP | LD A,(HL) |
| приняли байт для декодирования. |
| XOR (IX+8) |
| само декодирование. |
| LD (HL),A | заслали декодированное значение на место. | |
| INC HL |
| перешли к очередному байту. |
- BETA BASIC
- ГЛАВА 1. ВВЕДЕНИЕ
- ГЛАВА 2. РЕДАКТИРОВАНИЕ
- Курсор текущей строки
- Команда LIST FORMAT
- Команда CSIZE
- Команды JOIN <номера строк> и SPLIT.
- Управляющий код "новая строка".
- ГЛАВА 3. ПРОЦЕДУРЫ
- Передача параметров списком
- ГЛАВА 4. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
- ГЛАВА 5. ОБРАБОТКА ДАННЫХ
- ГЛАВА 6. ГРАФИКА
- ЗАЩИТА ПРОГРАММ
- ЧАСТЬ 1
- ГЛАВА 1. Исключение возможности остановки программ.
- 1.1. Общие рекомендации.
- 1.6. Метод защиты, используемый в программе FIST III.
- 2.3. Использование управляющих кодов.
- 40 ЛУЧШИХ ПРОЦЕДУР
- РАЗДЕЛ А
- 1. ВВЕДЕНИЕ
- Общие сведения о Бейсике и машинных кодах
- 2. ВНУТРЕННЯЯ СТРУКТУРА ZX SPECTRUM
- Карта памяти
- Атрибуты
- Буфер принтера
- Область программ на BASICe
- 5.Подпрограммы сдвига.
- 5.1Сдвиг атрибутов влево.
- 5.5 Сдвиг влево на один символ.
- МАСТЕРФАЙЛ 09 полная русификация.
- ВСТУПЛЕНИЕ.
- 3. Перевод программы на русский язык.
- POKES
- POKES
- NETHER EARTH
- HEAD OVER HEELS
- BETA BASIC
- РАЗДЕЛ 2. КОМАНДЫ
- 1. ALTER <атрибуты> ТО атрибуты
- 2. ALTER <ссылка> ТО ссылка
- 7. CLS <номер окна>
- 8. CONTROL CODES (управляющие коды)
- 12. DEF KEY односимвольная строка; строка
- ЗАЩИТА ПРОГРАММ
- ПРОГРАММА ДЛЯ СНЯТИЯ ЗАЩИТ
- Глава 3. Методы защиты от MERGE
- 40 ЛУЧШИХ ПРОЦЕДУР
- 5.8 Сдвиг вниз на один символ.
- 5.12 Сдвиг вниз на один пиксел.
- 6.ДИСПЛЕЙНЫЕ ПРОГРАММЫ
- 6.1 Слияние картинок
- 6.2. Инвертирование экрана.
- 6.6 Изменение атрибута.
- 6.9 Построение шаблонов.
- Текстовые сообщения программы MF 09 и их перевод
- ЗАКЛЮЧЕНИЕ.
- 0. Torneo
- SNOOKER
- Правила игры.
- FORUM
- Версия 1.
- Версия 2.
- Версия 3
- Перелеты к двойным звездам и невидимым звездам.
- Тайные возможности компьютера.
- СПЕКТРУМ В ШКОЛЕ
- BETA BASIC
- 22. EXIT IF <условие>
- 23. FILL x,y
- 28. KEYIN строковая переменная
- 29. KEYWORDS число.
- ЗАЩИТА ПРОГРАММ
- Глава 4. Прочие приемы защиты.
- 4.1Запуск программ в кодах.
- Глава 1. Введение
- Общие рекомендации.
- Глава 2. Блокировка автозапуска.
- Введение.
- 2.1 Загрузка Бейсика через блок кодов.
- 40 ЛУЧШИХ ПРОЦЕДУР
- 7.ПРОЦЕДУРЫ ОБРАБОТКИ ПРОГРАММ.
- 7.1Удаление блока программы.
- 7.4 Создание REM строк
- 8.ИНСТРУМЕНТАЛЬНЫЕ ПРОГРАММЫ
- 8.1Определение размера свободной памяти.
- ВОЗВРАЩАЯСЬ К НАПЕЧАТАННОМУ
- КАНАЛЫ И ПОТОКИ
- ПРОФЕССИОНАЛЬНЫЙ ПОДХОД
- ОБРАБОТКА ОШИБОК В БЕЙСИКЕ
- ПРЕДОТВРАЩЕНИЕ ОСТАНОВКИ БЕЙСИК ПРОГРАММЫ
- 1. Блок кодов "ON ERROR GO TO"
- FORUM
- Полезные советы.
- Письмо читателя.
- Проблемы совместимости.
- Уровень II.
- Выполнение миссии.
- Сводка боевых команд
- SHERLOCK
- Понедельник, 8:00
- НАШ КОНКУРС
- Наши предложения.
- Наши условия:
- BETA BASIC
- 34. LIST FORMAT число.
- 42. ON ERROR номер строки
- 46. POP <числовая переменная>
- 47. PROC имя <параметр><,параметр><,параметр>...
- 2.2.2Изменение хэдера для блокировки автозапуска.
- 40 ЛУЧШИХ ПРОЦЕДУР
- 8.5 Составление списка переменных.
- 8.7 Поиск и замещение строки.
- Формат данных в "Спектруме"
- Числовая переменная с именем из одной буквы.
- Числовая переменная с именем более чем из одной буквы.
- Числовой массив.
- ЭЛЕМЕНТАРНАЯ ГРАФИКА В МАШИННЫХ КОДАХ
- ЭЛЕМЕНТАРНАЯ ГРАФИКА В МАШИННЫХ КОДАХ
- Управляющие символы.
- Другие приемы управления позицией и цветом печати.
- Организация экранной памяти.
- Файл атрибутов.
- Эмуляция команд БЕЙСИКа из машинного кода.
- Скроллинг экрана.
- СЛУЧАЙНАЯ ГРАФИКА
- СЛУЧАЙНАЯ ГРАФИКА
- КРИБЕДЖ
- КРИБЕДЖ
- Программа
- Комментарий
- BETA BASIC
- 53. SAVE <строка TO строка;> устройство;> имя
- 56. SPLIT (не ключевое слово).
- 57. TRACE номер строки
- РАЗДЕЛ 3. ФУНКЦИИ
- ЗАЩИТА ПРОГРАММ
- 3.2Работа со встроенными машинными кодами.
- Глава 4. Изучение блоков в машинных кодах.
- 4.1 Введение.
- 4.2.2. Новые возможности программы "RENEGADE".
- ПРОФЕССИОНАЛЬНЫЙ ПОДХОД
- "ДЕБЮТ ПРОГРАММЫ"
- УНИВЕРСАЛЬНОЕ МЕНЮ
- Программа "PRIM"
- Маленькие Хитрости
- Маленькие хитрости
- ОШИБКИ ПЗУ
- 1. Ограничение по использованию регистровой пары IY.
- 2. Особенности регистровой пары H'L' (альтернативной).
- BETA BASIC
- 6. DPEEK (адрес).
- 7. EOF (номер потока).
- 12. ITEM ()
- 13. LENGTH (n, "имя массива")
- 21. SHIFT$ (число, строка)
- 24. TIME$ ()
- 25. USING$ (строка, число)
- 26. XOR (число, число)
- ПРИЛОЖЕНИЕ 1
- ПРИЛОЖЕНИЕ 2.
- ПРИЛОЖЕНИЕ 3
- Коды ошибок.
- ЗАЩИТА ПРОГРАММ
- 1.2 Смещение системной переменной PROG.
- 1.4 Новые POKES.
- Том 4. Методы защиты программ от копирования.
- Введение.
- ОШИБКИ ПЗУ
- 8. Ошибка CLOSE#.
- 9. Ошибка CHR$ 9.
- 13. Ошибка SCREEN$.
- Ошибки в редакторе
- 14. Ошибка Scroll?.
- 18 Ошибка проверки синтаксиса.
- Ошибки калькулятора
- 19. Ошибка MOD_DIV.
- 20.Ошибка E_TO_FP.
- ПРОФЕССИОНАЛЬНЫЙ ПОДХОД
- Блок кодов, воспроизводящий звук.
- Ввод параметров при помощи оператора INPUT.
- КАК ЭТО ДЕЛАЕТСЯ!
- RANARAMA
- Предварительные исследования.
- 1. Дизайн экрана.
- 2. Раскладка оперативной памяти.
- 3. Упаковка данных.
- THE DARK WHEEL
- ГЛАВА 3.
- ГЛАВА 4