Pull to refresh

DVD-RX, борьба с защитой

Copyright
Sandbox
DVD-RX это многоуровневая защита DVD видео от несанкционированного копирования. Но раз есть информация которую можно просмотреть, значит её можно и сохранить. В этом посте я опишу то, как именно мне удалось снять образ с такого диска, при помощи Linux.

Так как мне до этого ни разу не приходилось иметь дело с защищёнными дисками, а в частности с DVD-RX, пришлось опробовать многие способы, чтобы получить устраивающий результат.

Содержимое диска, который был у меня, представляло из себя 30 минутный видеоролик без меню, хранящийся в виде огромного количества файлов (больше сотни) с расширением VOB и каждый размером свыше одного гигабайта. Впрочем, сам ролик является нарезкой новостей с телевидения, так что я даже ничего не нарушил. Суммарный объём содержимого составлял порядка одного терабайта, несмотря на то, что объём самого диска был стандартным, т.е. 4,7 Гб. Следовательно от копирования содержимого в виде файлов я отказался сразу. От сграбливания видео с экрана я тоже решил отказаться, хотя это было бы быстрее, но я задался идеей сделать именно копию диска. Попытка снять образ при помощи K3b ни к чему не привела, т.к. после скопированных 10 мб стали появляться ошибки чтения секторов. Несмотря на то, что в функционал K3b входит пропуск ошибок чтения и ограничение их попыток, сам привод старается прочитать каждый сектор, а на одну попытку прочтения битого сектора уходит порядка 10 секунд, что является не только затяжным процессом, но и изрядно насилует лазер в приводе.

Почитав литературу, по копированию информации с плохих носителей, я решил воспользоваться консольной программой dd_rescue, которая умеет создавать образы файлов блочных устройств, пропуская заданное количество байт вначале (забивая их нулями). К сожалению, я так и не смог найти программного решения, для быстрого поиска bad block`ов на оптических носителях. Пришлось искать методом тыка. Я знал нижнюю границу, где начинались битые сектора (10 мб), поэтому решил взять сразу 100 Мб для проверки. Как ни странно, сектор начинающийся со 100 Мб тоже был битым, как и с 200, но на 300 пошли данные, поэтому в качестве нижней границы поиска я выбрал 200 мб, а в качестве верхней — 300. В итоге мне пришлось сделать примерно 20 прыжков, чтобы найти границу между битыми и живыми секторами. Таким образом я скопировал верхнюю часть диска.

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

image

Тем же способом (запуская dd_rescue на разных местах и глядя в вывод) я нашёл нужные границы.
Одна была в районе 63 Мб, а вторая в районе 130. Итак, у меня уже был iso файл весом 10 Мб (от центра диска до первых бэдблоков), и файл размером 4,7 Гб, содержащий информацию от конца бэдблоков до края диска. Мне было необходимо сделать дамп между теми кольцами. Я воспользовался тем же dd_rescue, нажав на Ctrl+C когда посыпались бэдблоки:

$dd_rescue -s 62973431 -f /dev/sr0 /home/mascom/middle

Таким образом, у меня были три файла, которые мне нужно было соединить в один, накладывая один поверх начала другого, вроде слоёв (в том смысле что это не просто конкатенация). Я воспользовался программой split, разбив средний файл на равные части, каждая размером с малый файл.

$split -b 9997139 /home/mascom/middle

Заменив файл первой части (xaa) на 10 мегабайтный begin.iso и соединив все части в одну, у меня получился файл, содержащий информацию от физического центра диска до начала второго кольца.

$cat begin.iso xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar xas xat xau xav > begin1
$rm xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar xas xat xau xav

Повторив эту процедуру с большим файлом (используя размер получившегося begin1, заменяя им новый xaa и сконкатенатив их заново) я получил готовый, работающий iso образ исходного диска.
Tags:видеорипripdvdlinuxdd
Hubs: Copyright
Total votes 39: ↑36 and ↓3+33
Views5.6K

Popular right now