Лазерные диски


Пример реализации защиты на программном уровне - часть 3


              // произошла ошибка. что ли привод не готов?               Sleep(TRY_DELAY);                 // выдерживаем паузу               if (try++ == MAX_TRY)                    // макс. кол-во попыток уже вышло?                      { fprintf(stderr,"-ERR: can not read TOC\x7\n"); return -1;}        }               // TOC прочитан, приступаем к его анализу        //---------------------------------------       

       // проверка кол-ва сессий        if ((TOC[3] - TOC[2]) != (_N_SESSION-1))                      {fprintf(stderr, "-ERR: not original CD\n");return -1;}               // проверка стартового LBA-адреса трека _TRACK        //--------------------------------------------        real_len = TOC[0]*0x100L+TOC[1];  // определение реальной длины TOC'a        for (a = 4; a < real_len; a+=11)  // переборвсех entry        {               if (TOC[a+3] == _TRACK)                  // этонаштрек?                      if ((((TOC[a+4]*60L)+TOC[a+5])*75L)+TOC[a+6] != _TRACK_LBA)                            {fprintf(stderr, "-ERR: not original LBA\n");return -1;}               else                      break;        }               // это оригинальный диск!        printf("Hello, original CD\n");

}

Листинг 8 Демонстрационный пример простейшей защиты, привязывающейся к искаженному TOC'у и не позволяющей себя копировать

Предлагаемая защита не копируется Clone CD (т. к. он создает всего одну сессию вместо ожидаемых двух), но легко обходится Алкоголем, которой хоть и помещает на место первой секции непотребный мусор, зато вполне корректно воссоздает оригинальный TOC.

Для усиления защиты мы можем попытаться не только проверять обе сессии на существование, но и контролировать целостность их содержимого. Разумеется, не обязательно перелопачивать каждую из секций целиком. Достаточно выбрать несколько ключевых секторов, желательно имеющих по возможности уникальное содержимое. "Постойте! – воскликнет внимательный читатель. ? Разве автор не предостерегал нас о последствиях такой проверки?! Ведь никто не может гарантировать, что на оборудовании пользователя эти сектора вообще прочтутся! " "Что ж, – отвечу я. ? Закладываться на читабельность секторов, действительно категорически не рекомендуется, но вот контролировать успешно прочитавшиеся сектора можно и нужно! То есть: если ключевые сектора не читаются, то все ОК, и нет никаких поводов считать диск нелицензионным – это просто у конечного пользователя оборудование такое (в смысле ? кривое). Другое дело, если чтение секторов прошло без ошибок, но вместо ключевых данных в них оказалось нечто совсем иное. Вот тогда, действительно, проблема не в оборудовании, а в диске".

Усиленный вариант защиты уже не копируется Алкоголем (т.к. вместо оригинального содержимого первой сессии Алкоголь помещает на диск какой-то дикий мусор), но может быть скопирован вручную по методике, описанной выше. К тому же привязка к искаженному TOC'у элементарно отламывается в отладчике/дизассемблере. Так что дальнейшее совершенствование защиты практически полностью бессмысленно. От "простых смертных" пользователей мы уже защитились, а от хакеров мы не сумеем защититься все равно (во всяком случае, этим способом). В любом случае, более продвинутые защиты – тема отдельного разговора.





Начало  Назад  Вперед



Книжный магазин