Звездная сила обращается в пыль

         

Как это работает


Привязка к диску основана на измерении угла между секторами. Похожая техника использовалась еще во времена 8-битных компьютеров и дискет. Аналогичным образом работают CD-Cops, SecureROM и многие другие защитные механизмы, так что назвать идею star-force "революционной" очень трудно. Но это не помешало разработчикам запатентовать ее или, по крайней мере, объявить, что она запатентована. Впрочем, не будем углубляться в юридическо-лирические дебри, а лучше перейдем к техническим деталям.

Спиральная дорожка лазерных дисков очень похожа на грампластинку, только начинается не снаружи, а изнутри, то есть наматывается от центра к краю. Лазерная головка, удерживаемая в магнитном поле (примерно так же как удерживается звуковая катушка в акустических системах) движется на салазках поперек спиральной дорожки. Сама дорожка состоит из секторов с данными и каналов подкода. Номера секторов находятся как в заголовках самих секторов, так и в каналах подкода, "размазанных" вдоль спиральной дорожки. Для грубой наводки не требуемый сектор используются салазки и каналы подкода, а для точной— отклонение в магнитном поле и секторные заголовки.

Просто взять и измерять структуру спиральной дорожки нельзя, но можно сделать вот что. Допустим, головка считывает сектор X, а следом за ним сектор Y. Если угол XOY, образованный центром (O) диска и секторами X, Y составляет ~15 град, а сами сектора расположены в соседних витках спиральной дорожки, то приводу будет достаточно всего лишь немного отклонить головку и через мгновение сектор Y сам упадет в его руки, как перезревшее яблоко — диск ведь вращается!. Если же угол составляет менее 15 град, тогда за время перемещения головки, сектор Y уже "уплывет" и приводу придется ждать целый оборот лазерного диска!

Рисунок 2 когда угол между секторами X и Y составляет ~15 град. при переходе на соседний виток, сектор Y сразу же "подлетает" к оптической головке (рисунок слева), при меньшем значении угла сектор Y успевает уплыть и головка вынуждена ждать целый виток


Таким образом, замеряя время чтения различных пар секторов, мы можем приблизительно определить их взаимное расположение на спиральной дорожке. У каждой партии диска оно будет своим (ведь плотность секторов на 1мм и крутизна спирали неодинакова и варьируется от партии к партии). Чтобы побороть упреждающее считывание (которым "страдают" многие приводы), защита должна читать сектора в порядке убывания их номеров. Так же она должна измерять скорость вращения привода, чтобы во-первых, определить постоянство временных замеров (пляшут они как пьяные человечки или нет), а во-вторых скорректировать формулу для вычисления угла, ведь как легко показать, чем быстрее вращается диск, тем скорее "уплывает" сектор.

Именно так Star-Force и поступает. Ниже приведен протокол работы защиты, перехваченный программой BusHound (при этом использовался SCSI-накопитель, поскольку с IDE защита работает напрямую и программный перехват уже не спасает).



Рисунок 3 BusHound за работой

Сначала защита выполняет профилировку поверхности, определяя время одного оборота, и оценивая величину разброса, исходя из которого будет рассчитываться допуск на отклонение ключевых характеристик:

049634  292ms

04961f   192ms



04960a  8.5ms

0495f5   8.3ms

0495e0  8.5ms

0495cb  8.5ms

0495b6  8.5ms

0495a1  8.5ms

04958c  8.5ms

049577  8.5ms

049562  8.5ms

04954d  8.5ms

049538  8.5ms

049523  8.5ms

04950e  8.7ms



048e7e   8.1ms

048e69  8.2ms

048e54  8.2ms

048e3f   8.2ms

048e2a  8.2ms

048e15  8.2ms

048e00  8.2ms

Листинг 1 профилировка спиральной дорожки (все номера секторов шестнадцатеричные)

Как видно, каждый последующий номер на 15h меньше предыдущего (приблизительно столько секторов и содержится на данном витке спирали), а время чтения сектора колеблется от 8,1 до 8,7 ms.

Затем защита делает некоторые несущественные операции (то есть очень даже существенные, но не суть важные) и приступает к измерению углов. Вот так выглядит протокол оригинального диска:



051dfe   25ms

051dfa   7.3ms

051df5   6.6ms

051dee   6.2ms

051de6  5.5ms

051ddd  5.2ms

051dd2  12ms

051dc6  12ms

051db9  11ms

051daa  11ms

051d9a  10ms

051d89  10ms

051d76  9.9ms

051d62  9.1ms

051d4c  8.8ms

051d35  8.0ms

Листинг 2 измерения угла между секторами (оригинальный диск)

Сразу бросается в глаза, что шаг убывания между секторами не остается постоянным, а плавно растет, то есть защита перебирает различные комбинации X и Y, засекая в какой момент происходит "перескок" сектора, вынуждающий ждать целый оборот. В данном случае, он расположен между 051ddd и 051dd2 секторами. Время доступа скачкообразно увеличивается с 5,2 ms дол 12 ms, т.е. больше чем в два раза!

А теперь посмотрим как выглядит протокол обмена с копией:

051dfe   29ms

051dfa   7.3ms

051df5   6.6ms

051dee   6.2ms

051de6  5.5ms

051ddd  5.1ms

051dd2  4.7ms

051dc6  12ms

051db9  11ms

051daa  11ms

051d9a  10ms

051d89  10ms

051d76  9.9ms

051d62  9.2ms

051d4c  8.8ms

051d35  8.0ms

Листинг 3 измерение угла между секторами (копия)

Вроде бы все так же как в прошлый раз, но присмотревшись повнимательнее, можно заметить, что перескок происходит не межу 051ddd и 051dd2 секторами, как раньше, а между 051dd2 и 051dc6, т. е. на один шаш позже. Вот это-то и отличает скопированный диск от его оригинала!


Содержание раздела