Пример реализации защиты на программном уровне
Покажем теперь, как такая защита может быть реализована на программном уровне. Самое простое, что можно сделать – отправить приводу команду "сырого" чтения TOC (opcode: 43h, format: 2h) и сравнить возращенный ею результат с эталоном. Какие именно поля TOC'a защита будет проверять – это ее личное дело. По минимуму достаточно проверить количество сессий и стартовый адрес искаженного трека. По максимуму можно контролировать весь TOC целиком. Естественно, от побайтового сравнения контролируемого TOC'a с оригиналом настоятельно рекомендуется воздержаться, – т. к. это неявно закладывает защиту на особенности микропрограммной прошивки читающего привода. Стандарт ничего не говорит о том, в каком порядке должно возвращается содержимое TOC'а и потому его бинарное представление может варьироваться от привода к приводу. Грамотно спроектированная защита должна анализировать только те поля, к содержимому которых она привязывается явно.
Демонстрационный пример, приведенный ниже, как раз и иллюстрирует технику корректной привязки к TOC'у. Разумеется, явная проверка целости TOC'а может быть элементарно обнаружена хакером и выкинута из программы, как ненужная, поэтому не стоит копировать этот демонстрационный пример один к одному в свои программы. Лучше используйте значения полей TOC'а, как рабочие константы, жизненно необходимые для нормальной работоспособности программы, – в этом случае сличение паспортов с лицами будет не столь наглядным. Естественно, явная проверка оригинальности диска все равно обязана быть, но ее основная цель отнюдь не защитить программу от взлома, а довести до сведения пользователя, что проверяемый диск с точки зрения защиты не является лицензионным.
/*---------------------------------------------------------------------------- * * crack me 9822C095h * ================== * * демонстрация техники привязки к искаженному TOC'у;для работе программе * требуется лазерный диск, прожженный соответствующим образом *