<<<предыдущий список следующий>>>

Это - копия документа, находившегося на http://dz.ru. Авторские права, если не указано иначе, принадлежат Дмитрию Завалишину и/или Евгении Завалишиной. Все изменения, внесенные мной, находятся в этой рамочке.Пожалуйста, прочитайте disclaimer.


24 ноября

Вот ведь. Как-то давно я ругал Микрософт за бездарную систему секьюрити в Windows 3.1 и около. Мол, дюже непрофессионально сделано. Нет, я не беру своих слов назад, так оно и есть, но... сегодня бы я эту плюху в Win 3.1, наверное, и не заметил. На фоне той плюхи, что вскрылась с DVD, Microsoft и его недочёты бледнеют и вянут. Так лажать не умеют даже у Билла.

Впрочем, по порядку. Конечно, вы где-то уже прочли сенсационную новость - что взломана система защиты DVD. Я тут решил разобраться, что же там взломали, и как оно было устроено. Разобрался. Плакал.

Нет, ну, конечно, тривиальные моменты мы оставим в стороне. Например, тот факт, что сама по себе идея шифровать цифровые носители, предназначенные для публичного проигрывания - бред, потому как если проигрыватель может это расшифровать, значит, это можно украсть прямо из нутра проигрывателя, уже им расшифрованное. Зачем уродоваться, код ломать.

Тут лирическое отступление. В своё время был актуален взлом защищённых от копирования программных продуктов. Дело в том, что авторам казалось реальным защититься от воровства методом вставки в программу защиты, которая проверяла, легальна ли данная копия. Самыми кошмарными методами. Например, на диск с программой записывался особый сектор, такой, какой нельзя записать обычным писюковым дисководом - программа проверяла, на месте ли он, и если да - работала.

Изощрялись, кто как мог - один делал на винчестере метку, другой требовал вставлять "ключевую дискету", третий записывал в уголок exe-файла тип видеокарты и "самоуничтожал" программу, если карта не та, что была вчера, что, конечно, страшно радовало легального владельца, которому случилось купить новую видеокарту.

Хакерьё ржало вслух над этими фокусами, потому как все, буквально все защиты обладали одним свойством - где-то там, в пузе у них было место, в котором программой принималось решение - работать (то есть копия легальна), или подыхать (нас украли). Ясно, что не было никакой причины ломать саму защиту и раскрывать её тонкости - достаточно было найти тот if, тот условный джамп, который вёл программу к смерти и... убрать его. Найти и заменить три байта кода. Ровно.

Уверяю вас, это несложно. Лично у меня (решил как-то попробовать из любопытства) ушло с полдня - это с нулевым опытом взлома. Ну, естественно, с отнюдь ненулевым опытом программирования, в том числе и ассемблерного, но это же общие знания... непосредственно с креком не связаны.

В некоторый момент маразматичность ситуации дошла и до создателей защит. Они стали... защищать защиту. Например, шифровать код программы, и расшифровывать её перед запуском. Чтобы понять, как это глупо, не надо даже думать - очевидно же. Оказалось, впрочем, что думать не надо и чтобы взломать второй слой. Изящество хакерского решения новой проблемы в своё время весьма меня впечатлило. А именно...

...Появилась программа-автокрекер, которая снимала кодирование почти с любой программы, причём снимала кодирование, ничего про него не зная заранее. Кодируем так - снимает. Кодируем сяк - снимает. Не глядя. Одной левой.

Как!?

Да элементарно.

Большинство программ написано с использованием стандартных компиляторов - Борланд, Микрософт, Симантек, Интел... их - ограниченное число. Хороших - очень ограниченное. Популярных - и тем паче мало. Каждый компилятор вставляет в начало программы невидимый для программиста кусок кода - так называемый стартап. Он настраивает нужные данному языку вещи перед работой программы. Он есть почти во всех программах. Его можно изменить, но не так, чтобы очень. Определённые действия он сделать обязан. Например, обратиться к системному таймеру.

Его можно узнать. И это принципиально. Автокрекер просто запускал зашифрованную программу, и смотрел, что она там себе делает. Пока она себя расшифровывала, крекер ждал. Когда она делала то, что должен делать старт-ап код компилятора крекер говорил себе - ага, готово. Программа расшифровалась и начала собственно работать. Теперь нужно лишь найти точно начало рабочего кода и записать содержимое памяти в новый .exe-файл.

И всё. Мы имеем верхний слой защиты снятым. Автоматически. Без усилий.

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

Создатели DVD, кажется, этим фактом пренебрегли, или просто не одолели его. Так бывает. Некоторые свойства компьютерного мира имеют защиту от понимания некоторыми людьми из мира обычного. Вот и видим в результате попытки высечь реку или выпить море. Защита DVD тоже к ним принадлежит.

Тут я предвижу возражения. Например, можно сказать, что взлом защиты DVD несуществен: списывать их не на что (объём велик!), а выпускать "взломанные" проигрыватели, которые читают все диски подряд без разбора, не получится - производителя взгреют.

По порядку. "Списывать некуда". Ерунда. Звёздные войны I влезают на пару компактов и вовсю рассылаются по сети. Нынче сеть-то тоже шустрая.

"Производителя взгреют": что мешает выпустить честный проигрыватель DVD, а режим вседозволенности включать сложной, но всем известной совокупностью клавиш, или продавать отдельно, по другим каналам, firmware на DVD-же - вставляешь в плейер, он обновляет прошивку и уже всё умеет. Можно. Было бы желание.

Обратный отсчёт: пять дней до 4-й ежегодной конференции по компьютерной и IP-телефонии. Отель Аэростар, Москва, Россия. Интересная тема, интересные люди. Присоединяйтесь.


64, 128, 256...

   
From: Evgeny
Subject: Нужен ли народу Свистунов. :)

Hello dz,

Imho, разговор о процессоре плавно перетек в разговор об адресном пространстве, а это отклонение от темы.

Всё же разрядность процессора это характеристика работы с данными. Размер регистров, шины данных и т.п. Это то, что рекомендует принять за int стандарт С/С++. 64-битный int может понадобится для дисковых операций (а это опять адресация),... Больше примеров не нашёл. :( Ну ладно, еще время считать, в секундах, с 1970 года :)

Я даже сомневаюсь в возможности создать процессор способный проработать 2^64 тактов. (Интересно, есть ли Пентиумах 2^64_такт_баг :)

А адресация, это уже полезнее.Хотя... По твоей адресной системе:

"Полный адрес тогда будет иметь вид A.H.T, где A - уникальный номер объекта на данной машине (то, что мы называем адресом сегодня - номер ячейки памяти), H - адрес хоста в мировой сети и T - таймштамп, момент рождения объекта."

rep movsX Explorer_buffer.localhost.Last_Explorer_Update , html.(dz.ru).issue

Красивая команда, но как долго она будет выполняться!!!

Best regards, Evgeny
mailto:Evgeny_k@chat.ru

 

Сколько она будет выполняться - не так уж важно. Любая команда в Windows 95, Unix, NT выполняется неизвестно сколько времени. Минимум - один такт процессора, максимум ограничен быстродействием винчестера, с которого ОС подкачает высвопленную страницу. При сбое на винчестере одна команда может исполняться минуту, к примеру. Думаю, вышепроцитированная команда в минуту тоже уложится, да и реализована она будет, скорее всего, примерно тем же способом, что и виртуальная память - доступ к html.(dz.ru).issue вызовет page fault, прерывание, обращение к сети, подкачку данных в локальный буфер, продолжение исполнения команды с того же места.

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

Теперь о длине int. Опыт языкостроения показывает, что делать sizeof(int) и sizeof(void *) разными - это напрашиваться на неприятности. Пойнтер должен влезать в int, арифметика с адресами и целыми должна работать нормально во всём диапазоне адресов и размеров памяти. Теоретически потребность в равновеликих целых и пойнтерах - бардак и ещё раз бардак, но на практике я бы удивился процессору, у которого целые меньше, чем адреса. Хотя таковыми в некотором смысле являются все Интеловские процессора от 8088 до Pentium III - из-за сегментов.

Реклама
   


C 15 ноября до конца 1999 года дистрибьюторская компании OCS, корпорация 3Com и крупнейший российский производитель серверов и компьютеров Aquarius проводят уникальную совместную акцию по продвижению высоконадежных сетевых решений. Заказчикам предоставляется: оборудование на бесплатное тестирование с возможностью последующей покупки за 50% стоимости!

Подробности...

     Новое решение для корпоративного рынка!

Гениальная идея - реально синтезировать стихи вместо сообщений об ошибках. :-) Не выдавать готовые, а рожать их "на тему", причём согласно правилам грамматики и даже с некоторым согласованием слов, так что образуется некоторое подобие смысла. Ну, точнее, связности. Хороший этюд. :-)

И, наконец, деньги, деньги, деньги.

Создан прецедент неуплаты налогов с дохода за продажу собственными руками написанного кода. Если кратко, то было доказано, что программа есть имущество, и при его продаже частным лицом уплата налогов не предусмотрена.

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