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

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


          ────────────

    Снятие MICROPROTECTOR'а

   Наверняка многие  встречались
с этой защитой. В последнее вре-
мя 'MP' приобрел необычайную по-
пулярность среди фирм, торгующих
SOFT'ом для Спектрума.
   У  нас  накопилось  приличное
количество   дисков,  защищенных
при помощи  'MP'  (речь  идет  о
версии  7.0).  Поскольку  дальше
терпеть такое не хотелось (нель-
зя сделать архивную копию, нель-
зя  восстановить   такой   диск,
нельзя  запустить  под  эмулято-
ром...), пришлось заняться  изу-
чением этого вопроса.  Итак, для
начала - о сути защиты.

   MICROPROTECTOR  ставится   на
какой-либо  трек   диска:   0-й,
160-й, или же за последним  фай-
лом на диске, и позволяет  защи-
щать BASIC-файлы (все или по вы-
бору) от копирования.  MICROPRO-
TECTOR работает по принципу IBM-
овских  DIR-вирусов:  он  меняет
начальные трек и сектор  бейсик-
программы (а также ее длину)  на
свои. Первый сектор  защищаемого
бейсика ксорится. Настоящие  па-
раметры  программы  также  коди-
руются и записываются на выбран-
ный трек. Там же находится и сам
'MP'. Константы кодирования  за-
писаны в пробел между  секторами
на этом же треке.
   Т.е. под  именами  защищенных
программ скрывается микропротек-
тор.
   Таким  образом,  работая   по
принципу  вторичного   loader'а,
'MP' загружается вместо програм-
мы, командой чтения дорожки счи-
тывает константы  ксорок, загру-
жает настоящий бейсик, расксори-
вает его и запускает.
   Далее ничего  не  подозреваю-
щая программа начинает  работать
как обычно.
   Копирование   такого    диска
стандартными средствами ни к че-
му хорошему не приводит.
   Те же результаты при  попытке
восстановления плохо  читающего-
ся диска, если  на  нем  присут-
ствует 'MP':  константы  уничто-
жаются и диск безвозвратно поте-
рян.
   Под эмулятором 'MP' сбрасыва-
ется - ни UKV Spectrum Debugger,
ни Z80TRDOS не умеют читать тре-
ки командой чтения дорожки...
   Но не все так  плохо.  Сущес-
твует  замечательная   программа
для  копирования  подобных  дис-
ков  -  копировщик 'McDONALD-2'.
(кстати,  кто-нибудь  знает  его
авторов ???)
   Для  получения  копии   диска
достаточно скопировать  его  лю-
бым  потрековым  копировщиком, а
потом отдельно скопировать  трек
с 'MP' при помощи 'McDONALD'а.
   Существует и другой способ  -
снять защиту.  Это  легко  можно
сделать под 'STS'ом:  загружаете
бейсик через  MERGE, трассируете
код с адреса 23884, пока не уви-
дите такую последовательность:
140.
        PUSH IX
        NOP
        NOP
        NOP
        NOP
        EI
        JP #3D2F
2
затем записываете  (запоминаете)
8 байт с адреса 23781 (это  нас-
тоящие данные о программе) и за-
писываете один сектор  с  адреса
23867  (начало  бейсика)  на  те
сектор и трек, что указаны в ад-
ресах 23787/23788.
   Все!  Остается   только   под
диск-доктором в заголовке  файла
(того, с которого собственно  мы
и снимаем защиту) вместо находя-
щихся там 8-ми (7-ми, без  учета
типа файла - это всегда  бейсик)
байт (полная длина  BASIC, длина
без переменных, обьем  в  секто-
рах, начальные  трек  и  сектор)
указать записанные ранее.
   После всего  этого  на  диске
окажется  абсолютно   нормальная
программа, которая свободно  ко-
пируется не только в потрековом,
но и в пофайловом режиме.
   Таким образом мы сняли  защи-
ту с нескольких дисков. Но  ког-
да очередь дошла  до  диска,  на
котором было около 40  системных
программ, защищенных MICROPROTE-
CTOR'ом...
   Короче  говоря,  написали  мы
небольшую   программку,  которая
сама делает все это.
   В  процессе  ее  тестирования
как-то незаметно перевелись  все
защищенные диски, и пропал  сти-
мул делать из небольшой процеду-
ры серьезную программу (как  это
было задумано ранее) для  снятия
'MP'.
   Чтобы программа  все-таки  не
пропадала  без  дела, мы  решили
отослать ее в ZX-РЕВЮ.
   Вот ее текст:
140.
        ORG  48000
;*****************************
; ANTIMICROPROTECTOR
;*****************************
; Written by Max from 'CYBERAX SOFTWARE'
3; on 15.08.97, Kemerovo.
;
START   LD   (STK),SP    ;сохранили стек.
        LD   HL,(23613)
        LD   E,(HL)
        INC  HL
        LD   D,(HL)
        LD   (OBR+1),DE  ;тоже сохранили.
MAIN    LD   SP,(STK)    ;главный цикл.
CUR_NAM LD   HL,NAMES
               ;в HL - текущее имя файла.
        LD   A,(HL)
        INC  A
        JP   Z,END ;если имена кончились.
        LD   DE,23773
        LD   BC,8
        LDIR  ;перебрасываем в заголовок.
        LD   (CUR_NAM+1),HL
        LD   A,"B"
        LD   (DE),A
;-----------------------------------------
;       ЗДЕСЬ МОЖНО СДЕЛАТЬ СИГНАЛ
;       ДЛЯ ВСТАВКИ ИСХОДНОГО ДИСКА
;-----------------------------------------
        LD   C,10
        CALL #3D13   ;ищем такой файл.
        LD   A,C
        CP   255
        JP   Z,END
        LD   (NUM+1),A
        XOR  A
        LD   (23824),A
        LD   (23801),A
        LD   C,14
        CALL #3D13   ;считываем бейсик.
        LD   HL,23912
        LD   DE,#DE00
        LD   BC,768
        LDIR ;кидаем microprotector туда,
             ;где он должен работать.
        DI
        CALL DECODE
        DEFW #DE00
        DEFB 21
        CALL DECODE
        DEFW #DE15
        DEFB 24
        CALL DECODE
        DEFW #DE2D
        DEFB 30
        CALL DECODE
        DEFW 57171
        DEFB 38
        CALL DECODE
        DEFW 57405
        DEFB 30
;все пять ксорок пройдены!
CONT10  LD   SP,TABLE
        LD   A,4
CLEAR   POP  DE
        POP  HL
        AND  A
        SBC  HL,DE
        LD   B,H
        LD   C,L
        LD   H,D
        LD   L,E
        INC  DE
        LD   (HL),0
        LDIR
        DEC  A
        JP   NZ,CLEAR
;ну вот, удалили всякий мусор...
        LD   SP,(STK)
        LD   HL,23814
        LD   (57219),HL
        LD   HL,57501
        LD   (HL),195 ;ставим точку
        INC  HL       ;останова.
        LD   DE,CONT
        LD   (HL),E
        INC  HL
        LD   (HL),D
        JP   56900 ;запускаем все это.
CONT    IM   1
        EI
;-----------------------------------------
;     ЗДЕСЬ МОЖНО ВСТАВИТЬ СМЕНУ ДИСКА
;-----------------------------------------
NUM     LD   A,0
        LD   C,9
        CALL #3D13;модифицируем заголовок.
        LD   DE,(23787)
        LD   BC,#0106
        LD   HL,23867
        CALL #3D13    ;пишем расксоренный
          ;первый сектор бейсика на место.
        JP   MAIN     ;на начало.

END     LD   SP,(STK)
        LD   HL,(23613)
OBR     LD   DE,0
        LD   (HL),E
        INC  HL
        LD   (HL),D
        RST  8
        DEFB 255

DECODE  POP  HL     ;самая важная подпрог-
        LD   E,(HL) ;рамма: занимается
        INC  HL     ;прохождением ксорок.
        LD   D,(HL)
        INC  HL
        LD   C,(HL)
        INC  HL
        PUSH HL
        LD   B,0
        EX   DE,HL
        PUSH HL
        PUSH BC
        DEC  C
        DEC  C
        LD   DE,XORKA
        LDIR
        EX   DE,HL
        LD   (HL),195
        INC  HL
        LD   DE,POINT1
        LD   (HL),E
        INC  HL
        LD   (HL),D
        LD   A,(REG)
        LD   R,A
        JP   XORKA
POINT1  POP  BC
        POP  HL
        LD   DE,XORKA
        LDIR
        EX   DE,HL
        LD   (HL),195
        INC  HL
        LD   DE,POINT2
        LD   (HL),E
        INC  HL
        LD   (HL),D
        LD   A,(REG)
        LD   R,A
        JP   XORKA
POINT2  LD   A,R
        RLCA
        SUB  8
        RRCA
        LD   (REG),A
        RET

NAMES   DEFM "GAME1   " ;здесь находятся
        DEFM "GAME2   " ;имена вскрываемых
        DEFM "GAME3   " ;бейсик-файлов.
        DEFB 255    ;маркер конца.

REG     DEFB 0      ;всякие переменные...
STK     DEFW 0

TABLE   DEFW 56832,56906
        DEFW 57171,57208
        DEFW 57406,57434
        DEFW 57511,57546

XORKA   DEFB 0 ;сюда переносятся ксорки.
2
   Теперь инструкция по эксплуа-
тации.
   1) Ассемблируете данную прог-
рамму с нужными вам именами (ка-
кие именно имена  вам  нужны, вы
узнаете дальше).
   2) Даете CLEAR 47999.
   3) Вставляете защищенный диск.
   4) RANDOMIZE USR 48000.
   Начнется ерзанье головки дис-
ковода по диску, моргание бордю-
ра, появится  немного  мусора  в
экране. Сохраняйте  хладнокровие
и дождитесь окончания этого про-
цесса.
   После этого защита снята.
   Правда, сам 'MP' на диске все
же  останется, но  он  абсолютно
безвреден.
   Теперь тонкости. Вы  наверня-
ка заметили в листинге коммента-
рии, относящиеся к смене  диска.
Дело вот в чем:  программа  сня-
тия  записывает  исправления  на
тот же диск, и  если  она  вдруг
сглючит - например, микропротек-
тор  другой  версии  (я, правда,
таких не встречал, но...) или вы
указали имя  незащищенной  прог-
раммы, или что-то  еще, то  диск
может быть испорчен.
   Поэтому либо скопируйте  диск
McDONALD'ом и запускайте  снима-
тель  на  нем, либо  организуйте
запросы на смену диска  (в  этом
случае  перед  запуском  ANTI_MP
необходимо потреково скопировать
защищенный  диск  на  другой,  и
этот другой  диск  вставлять  по
запросам программы).
   Есть и  третий  путь, которым
пользовался я:  рискнуть, и  всю
операцию по  "вырезанию"  прово-
дить с одним диском (сбоев  пока
еще не было...)
   Теперь самое главное: как уз-
нать, что на диске  именно  мик-
ропротектор, а не что-либо иное.
   Во-первых, при запуске бейси-
ка, головка дисковода либо  едет
на 160-ю дорожку, либо  в  конец
диска, либо остается на 0-й (это
зависит от того трека, на  кото-
рый был установлен 'MP').
   Во-вторых, дисковод при  этом
некоторое  время крутится на та-
ком  треке  (микропротектор  чи-
тает  дорожку).  Наблюдается ха-
рактерное моргание бордюра белым
цветом и слышен щелчок.
   В-третьих  -  попытка запуска
копии программы на другом  диске
приводит к сбросу.
   И,  наконец,  самый   главный
признак  -  длина  такого   бей-
сик-файла равна 762 байтам, т.е.
3-м секторам. Еще  могу  пореко-
мендовать посмотреть  под  диск-
доктором начальный трек подозри-
тельного файла. Если он 0-й  или
160-й, то это еще одно  подтвер-
ждение.
   Правда, может  случиться, что
защита спрятана в свободной  об-
ласти диска, но мне таких  вари-
антов еще не встречалось.
   На этом все. Может быть, кто-
нибудь из читателей РЕВЮ возьмет
и сделает из ANTIMP более  серь-
езную программу - мы это  только
приветствуем.

          ────────────




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

Авторская разработка - С.Зонов, А.Ларченко. О контроллере 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 года.

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


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

Похожие статьи:
Sofтинка - DNA_OS v0.431 - пакет утилит для работы с винчестерами, RAM-дисками и дискетами.
Проба пера - Стихи А. Баженова: Свечи, Смятение, Осень, Безисходность.
Demoparty - chaos construstions'oo1 report: "в Петербурге царила просто непередаваемая атмосфера духа сцены, дружбы, сплочённости, и так хорошо мне, наверное, никогда ещё не было"

В этот день...   19 июня