ZX Review #11-12
26 ноября 1997

Форум - Программа детекта эмулятора.

<b>Форум</b> - Программа детекта эмулятора.

   А теперь  -  некоторые разра-
ботки Max'а:
   Продолжая  тему   эмуляторов,
начатую Alex'ом, несколько  слов
хочу сказать о  способах  защиты
от них (в основном от UKV).
   Не всем может понравиться на-
личие встроенного отладчика, под
которым  почти  любую  программу
можно не только  отладить, но  и
взломать. И ведь нельзя перехва-
тить нажатие ESC (выход в отлад-
чик) - ведь это  не  СПЕКТРУМ, и
нажатие сей кнопочки  не  остав-
ляет никаких следов... (вот было
бы здорово:  нажимает  какой-ни-
будь чайник ESC, с целью поковы-
ряться в программе, а там - SHA-
DOW FORMATTER...)  Поэтому оста-
ется только один способ - в  са-
мом же начале  работы  программы
определить факт запуска под эму-
лятором и сброситься.
   После проведения серии бесче-
ловечных экспериментов  над  UKV
Spectrum Debugger, было  найдено
несколько способов:
   1) Следующие байты: #DD, #DD,
#23 интерпретируются  эмулятором
как INC HL, в то время  как  для
СПЕКТРУМА это - INC IX. Т.е. ес-
ли после такой  проверки  увели-
чился регистр  HL, то  программа
запущена под эмулятором.
   2) Абсолютно  не  эмулируются
3-й и 5-й биты флагового  регис-
тра - они сброшены в ноль.
140.
        XOR A
        ADD A,240
        PUSH AF
        DEC SP
        POP AF
        AND 40
2
   Если после  выполнения  такой
процедуры в  аккумуляторе  будет
ноль - программа под UKV.
   3) Подвязка по скорости.
   Сравнивать  замеренную   ско-
рость с каким-либо числом не ре-
комендуется.
   Во-первых  -  и у  Спектрумов
скорость   может   незначительно
варьироваться.
   Во-вторых  -  скорость эмуля-
тора можно  подобрать  (например
понизить частоту прерываний в  2
раза - в результате тактов  меж-
ду прерываниями станет больше).
   Лучше сделать так. UKV сильно
тормозит при работе с  атрибута-
ми. Теперь  если  сделать  замер
тактов между  прерываниями, и  в
цикле подсчета поставить  коман-
ду записи числа в область  атри-
бутов, то вы получите одно  зна-
чение.
   Если затем повторить этот за-
мер еще раз, но записывать  чис-
ло в  обычную  память, результат
будет другим.
   На  настоящем  Спектруме  эти
два числа будут равны.
140.
Цикл 1-й:
        LD BC,50
        XOR A
COUNT1  INC BC
        LD (22528),A
        JR COUNT1

Цикл 2-й:
        LD BC,0
        XOR A
COUNT2  INC BC
        LD (65535),A
        JR COUNT2
2
   В первом цикле стоит  команда
LD BC,50. Это сделано для  того,
чтобы дать 'фору' более  медлен-
ному (на эмуляторе) циклу (вдруг
Спектрум  тоже  слегка  тормозит
при записи в атрибуты...)
   Естественно,  запускать   эти
циклы  нужно  сразу   же   после
HALT'а, а выход из них  -  через
процедуру обработки IM 2.
   Теперь осталось сравнить  два
этих числа, к примеру - SPEED1 и
SPEED2:

        LD HL,SPEED1
        LD DE,SPEED2
        AND A
        SBC HL,DE
        JR C,EMU
OKAY    ...

   То же самое можно проделать и
с выводами в  порты  -  эмулятор
весьма и весьма медленно  меняет
цвет бордюра (ведь "бордюр" - на
самом деле только  часть  экрана
на IBM, и эмулятор после  каждо-
го OUT'а в порт 254 меняет  цвет
всех пикселов бордюра, а это за-
нимает значительное время).
   Alex писал  и  еще  об  одном
эмуляторе - Z80TRDOS.
   Так вот: все  вышеперечислен-
ные тесты на нем  не  срабатыва-
ют - он более  совместим, нежели
UKV Spectrum Debugger.
   Да и защищаться  от  него  не
имеет смысла, так как в Z80  мо-
нитор отсутствует.
   Тем не менее, могу порекомен-
довать следующее: LD HL,(#FFFF).
   После  такого, Z80TRDOS  без-
надежно виснет  вместе  с  PC, и
единственное, что может помочь -
кнопка RESET (семь  бед  -  один
RESET...)
   Кстати, то же самое будет и с
UKV, если на вашем PC  не  уста-
новлена EMS-память.
   Еще Alex писал о случаях пор-
чи ПЗУ (так как в эмуляторе  ПЗУ
- это ОЗУ, только  с  программно
запрещенной   записью,   видимо,
иногда эта проверка не  срабаты-
вает...)
   Мне не  удалось  найти  такие
условия, при которых  происходит
эта порча.



Другие статьи номера:

Авторская разработка - С.Зонов, А.Ларченко. О контроллере SMUC (HDD и IBM периферия).

Компьютерная новелла - Воины Звезд (по игре Shadowfire).

Новые программы - Обзор Digital Studio v1.12, Digital Studio Compiler v1.01

Новые программы - Обзор Xas редактор-ассемблер 128К (v5.05).

Новые программы - Обзор Музыкального редактора Instrument v3.01

Новые программы - Обзор программ FASTzasm и @-zasm.

Новые программы - Обзор программы No Kempston.

Профессиональный подход - Алгоритмы построения и прохождения Лабиринтов.

Смех без причины... - Материалы из юмористического журнала SpectrofUn.

Советы экспертов - Игра FEUD.

Советы экспертов - Игра Killed Until Dead.

Советы экспертов - Игра War in Middle Earth.

Форум - Конверсия цветной спектрумовской картинки на IBM. Конверсия ч/б картинки с IBM на ZX Spectrum.

Форум - О русификации игровых программ.

Форум - Программа детекта эмулятора.

Форум - Процедура "цветные полосы на бордюре". Снижение шума FDD.

Форум - Процедура перевода числа в десятичный вид. Процедура - сканер пароля.

Форум - Снятие защиты Microprotector'а.

Форум - Эмуляторы, которые мы выбираем: 'UKV Spectrum Debugger', 'Z80TRDOS'.

Читатель-читателю - Драйвер ввода в режимах последовательного и прямого доступа из файлов системы TR-DOS.

Этюды - Графический эффект "плазма 2".

Этюды - Графический эффект "плазма 2".

Этюды - Графический эффект "плазма".

Этюды - Полезные советы. Быстрая переброска экрана.

Этюды - Ремейк процедур 93 года.

Этюды - Эффект "пламя".


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Креаторы - Sisoft: Решил-таки хоть что-то написать о себе.
Тема - Russian ZX: история создания Российского спектрума.
Записки программиста - глюк монитора отладчика в ZS Scorpion 256.
Hints! - игра Japanese Contrast.
Вступление - О газете.

В этот день...   21 ноября