Безопасность в Дельфи

       

«Как написать программу которую будет дешевле купить чем сломать»


Раздел "Анти крэковые мучения" Часть I.
Часть II.
Автор Дмитрий Логинов
дата публикации 31 января 2000 г.

Часть III (заключительная).

Люди и числа. Очень романтичная тема. Она может быть очень философской, а может быть достаточно конкретной. Я не буду углубляться в эту область, но небольшое предисловие необходимо. Сегодня я был в самом большом в городе книжном магазине. Магазин богатый, хоть и глуповато организованный. Подхожу к разделу "Информатика". Пять книжных стоек. Несмотря на богатство, выбора нет абсолютно. Но я не об этом. Так вот подхожу к последней полке. Вижу небольшую брошюрку "Теоретические основы защиты информации". Автор отечественный. Открываю. Вот уж не ожидал! Со страниц на меня повеяло временами пятнадцатилетней давности. Пустые коридоры ВУЗов, не достигшие половой зрелости лысоватые профессора, занимающие руководящие должности. Действительно хорошие математики, физики, программеры, собирающие картошку на полях Родины. В качестве катализатора идей и свободы используется спирт. Огромное количество "научной" литературы, по "обязаловке" написанной морем аспирантов и кандидатов. Результат один – там, где была тайга, сейчас бескрайние степи. Эта "элитная" литература для чтения в кругу "избранных" знатоков ГОСТов и генеральной линии партии. Как всегда это не имело ничего общего с реальной жизнью. Я и не думал, что такая литература будет переиздаваться сейчас. Я знаю, что есть издательства, которые собирают статьи в инете, и издают книжкой, зарабатывая хорошие деньги. Эти издательства имеют хорошую крышу, и наезжать на них очень вредно для здоровья. Один мой друг, хороший специалист в области вирусной технологии, пострадал от такого издательства. Видимо еще появились издательства, которые издают книги для чайников, не называя их таковыми. И печатают в этих книгах содержимое аспирантских библиотек. А, что? Книги выглядят очень заумно. Автор никогда не узнает о переиздании и не затребует денег. Так вот, в руках я держал именно такую книжонку. И назвал бы я ее не "теоретические", в "Сказочные основы защиты информации". Открываем содержание. Где-то в середине видим – "Пример гарантированной защиты". Очень интересно! Смотрим. Пара страниц псевдоматематики и далее интересно. "Система очищает внешнюю память (??? Наверно имеется в виду диски), очищает память за исключением ПЗУ (еще интересней!!!). Далее система через шлюз внешней памяти в зашифрованном виде (а в каком же еще?) записывает файлы. Имена файлов тоже зашифрованы. Система выключается (я бы написал, переходит в неопределенный режим вероятностного ожидания!)". Весело? Мне да. В общих словах дальше, пользователь желающий, что-то прочитать в этой системе вводит шифр и ему становится доступной только та часть, которая может раскодироваться этим ключом. Здорово! Возьметесь реализовать? Кто возьмется, претендует на создание вируса года! Хотел я купить этого динозавра, но вдруг обнаружил две весьма дефицитные книжечки. Первая, написанная французскими математиками в виде примеров подпрограмм на языке Ада. И что самое интересное, 150 страниц посвящено теории чисел. Той ее части, которая используется в криптографии. Приведены генераторы случайных чисел, тесты простых чисел, индикаторы Кармайкла и т.д. И хоть приведено там не все самое передовое и точное, но приведено достаточно, чтобы ознакомится с этой областью. Вторая книга написана нашим математиком. Она тоже посвящена криптографии, но без реализации алгоритмов. Но очень грамотно написано! Вот какие книги надо продавать и читать. Потому как существует множество мифов и заблуждений с этой областью. Как бы мне не хотелось поговорить о криптографии, я затрону наиболее нужные для рассматриваемой темы сферы. Итак, сначала о существующих системах шифрования при защите программ. Их можно разбить на несколько частей по следующим признакам:
  • 1. По способу хранения ключа.
  • 2. По методу наложения на программу.
Но прежде чем перейти дальше, давайте договоримся о следующих данных:
  • 1. Если вы не математик, вы не сможете создать устойчивого шифра.
  • 2. Как бы вы не прятали ключ, его всегда можно получить.
  • 3. Существуют программы, существенно упрощающие штурм шифров.
Теперь по пунктам. Я сам когда-то писал собственные алгоритмы шифрования. Естественно, это происходило из-за незнания математики и того, как ломаются такие системы. Ну вот, например, вы решили, что у вас будет ключ длиной 10 символов, и он будет ксориться (XOR) побайтно с блоками данных (1-й байт ключа с 1-м байтом данных, 2-й со 2-м и т.д.). В чем отвратительность этой попытки шифрования? Очень просто. Во-первых, у вас не один ключ, а 10 однобайтных ключей. Понимаете? Здесь даже не поможет предварительное ксоринье и сдвиги с результатом предыдущей операции. Во-вторых, XOR очень быстрая операция. Т.о. мне ничего не стоит написать простой перебор 256x10 комбинаций. Это будет чуть больше секунды. Вот так. Тонкость состоит в первом пункте. Математически вам нужно придумать функцию, чтобы операция выполнялась над всем блоком. Причем блок должен быть больше чем байт или два, а уж ключ тем более. Современные машины позволяют в реальных масштабах перебрать ключи для DES. Кстати о последнем, возьмите на заметку первую операцию над всем блоком – побитовую перестановку. Причем, т.к. это симметричный шифр, то повторное наложение этой перестановки должно получать исходный блок. Да еще, есть такая теорема, я бы назвал ее "первой теоремой криптографии". Она гласит, что для того чтобы шифр был абсолютно устойчив, его ключ должен быть по длине больше, чем шифруемые данные. Т.е. если вы шифруете 1Мб данных, то вам нужен ключ, приблизительно такой же длины. Это нереально. Поэтому используются блочные шифры. Где поток данных разбивается на блоки длиной несколько десятков бит, и на них накладывается ключ соизмеримой длины. Т.о. теоретически и практически доказано, что любой шифр имеет множество "слабых ключей". Например, для XOR это будет 0 и еще несколько чисел. Все зависит от данных. Но почти для всех алгоритмов шифрования можно вычислить множество "слабых ключей". Что значительно облегчает штурм. Так же существует словарные характеристики ключей. Т.е. если вы требуете от пользователя введения числа. То я не буду пробовать такие ключи, как "psw". Если вводятся почти все символы, то я буду перебирать прежде всего слова языка. В инете можно закачать сколько угодно таких словарей. В том числе и для умников, набирающих пароль латынью, глядя на русские буквы на клаве. Но это еще не все. Например, вы наслышаны о славе PGP, и она не дает вам покоя. В этой системе на самом деле несколько шифров. Но это не важно. Самое главное, все испытывают доверительное отношение к RSA. Первому несимметричному шифру. Который в отличие от симметричных шифров, использует один ключ для зашифровки и другой для расшифровки. Когда вы кинетесь писать, что-то свое на его основе, вам придется узнать что такое простые числа. Вам придется написать свой генератор случайных чисел и тест на то, что число является простым. Вы не математик, поэтому за алгоритмом полезете в инет. Без труда найдете и вставите в свою программу. Прекрасно! Теперь я знаю, как вычислить пароль для вашей системы. Если не понятно, подумайте на досуге, потому как в 90% случаях при вскрытии шифрованных систем НЕ ТРЕБУЕТСЯ ШТУРМОВАТЬ ШИФР. Почему? Потому что посмотрите на пункт два последнего списка в начале статьи. Итак, о втором пункте. Ключи могут вводиться с клавиатуры. Хранится на внешних носителях. Это могут быть ключевые диски или некий таинственный сектор на диске. Ключи также могут браться с неких устройств, втыкаемых, например, в порт принтера. Теперь посмотрим на то, кому надо ломать программы. Чаще всего это распространители пиратских дисков. Т.е. конечно могут быть группы или одиночки, у которых покупаются кряки. Но все сводится к одному – получить более дешевую версию программы. Касательно HASP, я не буду останавливаться на безграмотной организации шифрования Alladdin-ом. Все это подробно можно почитать у Meteo. Но суть состоит вот в чем. Вы всегда сможете подойти к знакомым и спросить пароль или возможность запустить программку, снимающую образ HASP-а. В крайнем случае, всегда можно купить вашу программу, сломать и шлепать на алюминий. Кстати, не отходя от кассы, о HASP-е. Сейчас уже не знаю как, но раньше было так. Установщик защиты берет ваш екзешник prog.exe, переименовывает его, зашифровывает заголовок, а сам кидает расшифровщик в файл с именем вашей программы. Вам было достаточно один раз расшифровать программу и все. Т.е. если у вас система шифрования не интегрирована в работу программы, ее будет очень легко отцепить.

Выводы?

  • 1. Все, что можно написать, можно и проанализировать. Вспомните червя Морриса, написанного на сях. Его дизассемблировали и полностью проанализировали, что он делает в течении двух часов!!! Вот так. Поэтому не рассчитывайте, что ваш шедевр нельзя проанализировать. Не рассчитывайте, что ваш соперник, кракер, будет глупее. Наоборот!
  • 2. Дамоклов меч систем защиты не SOFTICE, FILEMON и REGMON, а навыки, знание системы и смекалка кракера.
  • 3. Если вы пишете шареварную прогу, никогда не предусматривайте ее переделывания в полнофункциональную. Т.о. вы открываете двери вору.
  • 4. Шифрование не может служить панацеей от взлома. Наоборот. Она больше запутывает мозги создателю. Т.к. он пользуется библиотечными функциями верхнего уровня, и архитектура системы скрыта от него. В то время как профессиональный кракер прекрасно знает ее. Шифрование хорошо для абсолютно индивидуального хранения персональных данных, в разглашении пароля, для которых, не заинтересован сам пользователь. В случае привязки программы к конкретному пользователю, шифрование может использоваться для осложнения возможности правки самого экзешника.
  • 5. То, что программа использует аппаратные ключи мало что значит. И отпугивает только 10% процентов кракеров. По-настоящему серьезная аппаратная защита должна прятать от анализа часть исполняемого кода программы. Это, кстати, достаточно просто. Вам надо просто запаять часть жизненоважных функций программы прямо в аппаратуру. Причем эта функция не должна быть тривиально табулирована. Эффект прост. Эта часть программы не будет проходить через процессор. Нельзя поставить брейк, нельзя деассемблировать, т.к. исполняемый код исполняется и хранится в памяти ВУ. Если на все это наложить шифрование, то можете спать спокойно. Вы будете зарабатывать больше, чем терять от воровства.
Ну, вот, пожалуй, и все. Хотелось написать больше. Но слишком много личных воспоминаний от ломки "устойчивых" от взлома систем, не хотелось превращать в автобиографический очерк. Слишком много более интересных задач. Прошу простить за сбивчивую или непонятную речь, лавры писателя меня не интересуют. Извините, если я разочаровал ваши ожидания чего-то нового или необычного, но повторю, что я не профессиональный кракер. Просто в описании предлагаемых защит на этом сайте я увидел ТАКИЕ ДЫРЫ, что могу вскрыть даже я. Если вы хотите писать защиту, подумайте прежде, может стоит ее распространять в более цивилизованных странах!

Пока.

Дмитрий Логинов,
31 января 2000г, специально для «Королевства Дельфи»



Содержание  Назад