Най-интелигентната защита на флопи дискове

Оригиналът е на Chris Evans

16
1646

Въведение

Наскоро започнах една одисея по изучаването на различните защити на гъвкавите дискове.

В своите предишни постове вече споделих пряко и косвено редица примери за интересни защити на флопи дисковете:

  • Слаби битове. Техниката на слабите битове се реализира по следния начин: част от повърхността на гъвкавия магнитен диск се остава недокосната от магнитните потоци на главата. В тези условия на липсата на сигнал, автоматично се повишава коефициента на усилване, който се проявява като силен шум и се интерпретира от флопидисковото устройство като неясен цифров сигнал от диска
  • Размити битове. При защитата с помощта на размити битове, които понякога се наричат неясни битове, измененията в магнитните потоци се записват с интервали, които имат по-различни тайминги от таймингите указани в спецификацията, като например в MFM. Благодарение на използването на нестандартни тайминги, вместо двойка очаквани значения директно се вмъква дълъг сигнал – например  два интервала по пет микросекунди вместо очакваните от контролера 4 и 6 микросекунди. По този начин контролерът на флопидисковото устройство започва да връща случайни цифрови сигнали
  • Дълги и къси пътечки. При защита с помощта на дълги пътечки записът на цифрови данни става малко по-бързо от стандартния. Това може да бъде цяла пътечка или само нейна отделна част. Така или иначе за флопидисковото устройство това означава, че тази пътечка има повече байтове от стандартната. Тази защита работи, понеже контролерът на флопидисковото устройство обикновено има широк допуск на битрейт, което е необходимо, за да се игнорират различаващите се скорости на въртене на дисковете в различните модели флопидискови устройства

Но тук ще разгледаме една изцяло друга защита, която има съвсем уникални особености и която на мен ми изглежда изключително изобретателна.

За кой точно Western става дума?

Не е много лесно да бъде открита компанията Western Security, Ltd., която е свързана с компютъра BBC Micro. Как да разберем, че тя съществува? Първо, когато разработвах своя емулатор beebjit, направих много грешки и допуснах много бъгове. Докато направя точната емулация на флопи дисковете, за да мога да да имам възможност да зареждам оригиналните образи на защитените флопи дискове, аз се натъкнах на следното:

Разбира се, авторът на оригиналните дискове не е успял да предвиди възникването на подобна ситуация. Може би причината да се види този екран е повреден диск (не е така) или неговото незаконно копиране (не е съвсем истина) или може би бъговете в моя емулатор са твърде много. По-долу е показан още един скрийншот с грешки. Може би това е някаква по-ранна версия на тази защита. В текста се вижда, че е написано disk вместо disc и дори не се прави проверка дали този диск не е повреден.

Това излезе от диска на играта Phantom Combat на компанията Doctor Soft

Малко ще се отвлека от основната тема, но ще покажа още един скрийншот. Той не е свързан с компанията Western Security Ltd., но на него е показан специалния екран, който излиза при срив в защитената зареждаща програма записана в този диск. Случаят е интересен с това, че при обикновената ежедневна работа с този диск потребителят няма как да види това интересно изображение:

Това се показва от Disc Duplicator 3, ако разбере, че се прави незаконно копие

Второ, ние знаем името Western от маркерите на дубликаторите на дискове. Маркерът на почти всички дубликатори на дискове е специална пътечка, записана с помощта на комерсиален софтуер за дублиране на дискове. Обикновено тя е разположена след края на обикновения диск – например, 41-вата или 81-та пътечка на диска. Въпреки че тя се намира извън пределите на стандартния диск, почти всички флопидискови устройства търсят поне една пътечка извън стандартните граници на диска. На тази пътечка обикновено се записва само началото на сектор от пътечка, което има CRC грешка. Това е една съвсем необичайна конструкция, която се извиква когато например, моята програма discbeast изучава диска Jolly Jack Tar:

Ето как изглежда Jolly Jack Tar в програмата Discbeast

В маркера на дубликатора е включена датата и едно-две текстови полета. При Jolly Jack Tar имаме следното:

86 07 01 (1986, July 1st)
523-037E WESTERN NM,10/256 PROT DUP 5"-48/40 1S SD SS
32173-2Aw

Има и още един, по-малко разпространен ред в маркера на  дубликатора, който пак е свързан с Western security, както е например в Tens and Units, но на компанията Sherston Software:

85 10 31 (1985, October 31st)
523-037C BBC NM,10/256 WESTERN SEC. PROTO1 DUP 5"-48/40 1
70422-00w

Основите на различните защити на дисковете

Преди да се задълбочим в работата на защитата на Western Security, нека да разгледаме основите на защитите на дисковете. Има немалко различни специфични нюанси, но като цяло принципът изобщо не е сложен:

Дискът трябва да е лесен за четене, но труден за записване.

Четенето на диска задължително трябва да е лесно. Ако дискът не може да бъде прочетен от стандартните контролери на флопидисковото устройство, то той няма да може да бъде продаван, понеже купувачите няма да могат да го използват.

Най-добрият начин за осигуряване на сложно презаписване на дисковете е най внимателното изучаване на чиповете на контролерите на флопи дискови устройства, за да може да се направи така, че да стане невъзможно копирането и дублирането на този диск с помощта на стандартно домашно оборудване.

Защитата на дискове, използвана от компанията BBC Micro, не тръгна по този път. Нейните първи дискове, както и много от следващите бяха много екзотични, но не бе сложно да бъдат пресъздадени с помощта на стандартния контролер на флопи дисковите устройства. Само че бе необходима специална програма. Компанията-производител за разлика от потребителите, разполага със собствена фирмена програма за запис на дискове, която прави така, че тези дискове са сложни за копиране и дублиране. Но по-късно, когато се появиха програми от ранга на Disc Duplicator 3, внезапно се оказа, че тези дискове са съвсем лесни за копиране. Появилите се по-късно програми за дублиране на дискове до една можеха да копират и презаписват тези защитени дискове.

Но някои експерти на BBC Micro наистина правеха дискове, които не могат да бъдат записани с помощта на стандартния контролер на флопи дисковите устройства. По-интересните са:

  • Техниката на слабите битове на Саймън Хослър
    • Една от основните задачи на контролера на дисковете е никога да не се записват слаби битове – всичко са съвсем точни цифрови единици и нули. Но днес в съвременната епоха аз намерих начин доста хитро да накарам контролера Intel 8271 да записва слаби битове. Доколкото ми е известно, тази техника не бе позната и не се използваше в миналото
  • Редица дискове, като например The Sentinel на компанията Firebird, криеха данни между секторите
    • Мисля че при по-интелигентно програмиране, с помощта на стандартните контролери на флопидисковите устройства е възможно да бъдат записвани данни между секторите. За да се направи това е необходимо да се извърши неколкократен запис на една и съща пътечка и да се нулира контролера на дисковете в някои критични моменти от време. Но в старите програми за копиране и дублиране на дискове не съм виждал нищо подобно

Анализ на защитата на Western Security Ltd.

В тази версия на The Wizard’s Revenge компанията Sherston Software използва защитата на дискове на Western Security Ltd.

Ето един скрийншот от тази игра:

А ето какво вижда на диска програмата discbeast:

Тук няма нищо необикновено. Червеното квадратче в края на диска показва пътечка с един сектор, който е направен с CRC грешка. Това не е част от защитата на диска, а маркерът на дубликатора. Със зелен цвят са показани стандартните сектори, в които няма нищо екзотично. С буквата D е обозначено наличието на изтрити сектори. Това е една елементарна защита на дискове, която не е екзотична и дискът не е сложен за копиране. Но при зареждането на диска в моя емулатор beebjit с помощта на контролера за флопидискови устройства Western Digital WD1770 и log disc:commands ние получаваме нещо съвсем необичайно:

info:disc:1770: command $E4 tr 1 sr 3 dr 1 cr $29 ptrk 1 hpos 1884

Командата $E4 означава „Прочети пътечката“. Тя не се използва при обикновеното зареждане на диска, а и доколкото знам от нито една друга защитена зареждаща програма.

Време е да погледнем какво точно има в тази зареждаща програма, за да разберем какво се случва. Целта на този пост не е подробното описване на всички дори и най-малки детайли на тази зареждаща програма. Както много други защитени Boot Loader-и, кодът е защитен и по-точно обфускиран (маскиран). Демаскирането се извършва самостоятелно от самия него с помощта на няколко слоя за самостоятелно модифициране на кода. На адрес PC $0657 се извършва извикване към диска, за да се зареди част от тази зареждащата програма от маркираните като изтрити сектори на пътечка 9. Това лесно може да бъде объркано и да се приеме като част от защитата, но това не е така. Малко по-долу на адрес $3CF7 можем да видим следния цикъл:

[ITRP] 3CF7: JSR $3D16
[ITRP] 3CFA: LDA $75
[ITRP] 3CFC: SEC
[ITRP] 3CFD: SBC $3F4E
[ITRP] 3D00: TAX
[ITRP] 3D01: LDA $86
[ITRP] 3D03: STA $3F71,X
[ITRP] 3D06: INC $75
[ITRP] 3D08: LDA $3F4F
[ITRP] 3D0B: CMP $75
[ITRP] 3D0D: BCS $3CF7

Изобщо не очаквам, че смисълът лесно може да бъде разбран от този фрагмент, в който дори липсват всички подпрограми, но все пак може да се види, че в този цикъл се обхождат пътечките от 1 до 8 включително. Всяка пътечка изцяло се прочита, като дължините на тези пътечки се записват в таблица на адрес $3F71. Малко по-долу, на адрес $3CB6 тези дължини се сравняват с таблицата, която се намира на адрес $3D9B.

Ето тази проверка е особено интересна. За да може защитата от копирането на диска да се счита за изпълнена, прочита се броя пътечки, дължината на които се намира в пределите на ±1 от очакваната, като този брой трябва да бъде равен на 7 или 8. Веднага се вижда, че тази защита не е точна технология. Именно това можеше да се очаква: дисковете са си аналогови носители на информация и в началото и в края на пътечката се появява малко шум. При различните прочитания на един и същ диск с помощта на един и същ контролер в едно и също флопидисково устройство, може да има известни вариации на дължината на пътечките. Като погледнем процеса на зареждане с помощта на beebjit можем да видим какви са пресметнатите и очакваните дължини на пътечките (0x4A == 3122 байта).


Край на първа част. Във втората част ще разгледаме какъв наистина гениален подход се използва за защитата на флопи дисковете – нещо, което намира приложение и в наши дни.

4.6 7 гласа
Оценете статията
Абонирай се
Извести ме за
guest
16 Коментара
стари
нови оценка
Отзиви
Всички коментари