Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #80, АВГУСТ 2005 г.

Звездный отряд

крис касперски ака мыщъх

Хакер, номер #080, стр. 080-062-2


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

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

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

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

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

Как видно, каждый последующий номер на 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

Сразу бросается в глаза, что шаг убывания между секторами не остается постоянным, а плавно растет, то есть защита перебирает различные комбинации 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

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

Назад на стр. 080-062-1  Содержание  Вперед на стр. 080-062-3