────────────
Снятие 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 более серь-
езную программу - мы это только
приветствуем.
────────────