Delphi World - MPKEY - Система защиты информации и программного обеспечения
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
MPKEY - Система защиты информации и программного обеспечения

Оформил: DeeCo

lel: Это руководство было любезно предоставленно компанией Мультисофт (ссылка на официальный сайт компании), и выложенно мной в качестве дополнения к моей прошлой обзорной статье о защите с применением электронных ключей.

Введение

Система защиты MPKey представляет собой систему защиты информации и программных продуктов от несанкционированного использования. Основным ее компонентом является небольшой аппаратный ключ, подключаемый к параллельному порту IBM PC или полностью совместимого компьютера. После установки на компьютер ключ MPKey становится неотъемлемой частью вашего программного пакета. Никаких дополнительных действий конечному пользователю предпринимать не требуется.
Для использования MPKey в целях защиты вашей программы от пиратов вам потребуется вставить в свое приложение последовательности программных блокировок. Каждая блокировка представляет собой вызов определенной процедуры из интерфейсной библиотеки системы защиты MPKey. Для ее корректной отработки необходимо физическое присутствие в порту компьютера ключа с определенным идентификатором. При отсутствии ключа вашему приложению будет возвращен некорректный отклик, вызывающий прекращение выполнения нелегальной копии. Пират сможет нелегально переписать программу, но не сможет запустить полученную копию.
Электронный ключ не только идентифицирует себя, "представляется" защищенному приложению, но и преобразует посылаемые на него данные в соответствии с хранимыми в нем математическими функциями, и возвращает результат вычислений в ваше приложение. В электронном ключе MPKey реализовано несколько математических и специальных функций. Их полный перечень приведен в разделе "Функции электронного ключа MPKey". Каждая функция получает в качестве аргументов два целых беззнаковых 32-разрядных числа. Размер и значение результата зависит от конкретной функции. Существует возможность запрограммировать в ключе Вашу собственную функцию, что сделает защиту конкретного продукта уникальной.
Пользователям предлагаются как средства защиты готовых программных модулей (программные оболочки типа 'shell') так и средства защиты разрабатываемых программ, работающих в MS-DOS, MS Windows 3.xx, Windows 95 и Windows NT. Ваше приложение, написанное для DOS, может использоваться вашим клиентом также и в окне DOS под Windows 95 или Windows NT.
Для операционных систем Windows 95 и Windows NT, перед запуском защищенного приложения требуется установка специального системного драйвера ключа.
Перечень поддерживаемых языков и компиляторов постоянно изменяется. Для ознакомления с его последней версией обращайтесь к основному файлу README или свяжитесь с отделом технической поддержки нашей компании.

Преимущества микропроцессорных ключей семейства MPKey

К достоинствам микропроцессорных ключей семейства MPKey можно отнести:
Прозрачность. Установка ключа между компьютером и внешним устройством не влияет на работоспособность устройства, даже при работе в сложных режимах. Обращение к ключу осуществляется одновременно с работой внешнего устройства в фоновом режиме, незаметно для внешнего устройства.
Каскадирование. Возможность установки и одновременной работы с несколькими ключами.
Кодирование информации. Введение функций аппаратного кодирования и декодирования информации дает возможность реализовать защиту программного обеспечения на принципиально более высоком уровне.
Малое время отклика. Время отклика ключа для всех функций не превышает 150 милисекунд.
Невозможность имитации. Сложность алгоритмов кодирования информации, вычисления секретных функций, особенно в режиме с накоплением, делает невозможным аппаратную или программную имитацию работы ключа.
Динамическое кодирование/декодирование кода программы. На уровне драйверов реализованы антиотладочные функции и процедуры кодирования и декодирования программы и данных во время выполнения программы.
Многофункциональность. Использование последних достижений с области электронных технологий сделало возможным реализовать все вышеперечисленные функции в одном ключе.
Техническая поддержка. Группа разработчиков обеспечивает оперативную поддержку и консультации.
Индивидуальная работа с клиентами. Быстрая, в присутствии клиента, изготовление партии ключей, запись в однократно программируемую память ключа персональной информации клиента.
Персональная функция. По желанию клиента в ключе может быть по алгоритму клиента аппаратно реализована специальная функция, что делает возможным перемещение части кода защищаемого программного обеспечения в ключ.
Защита памяти ключа от несанкционированного использования. Сложная система разграничения прав доступа к функциям работы с энергонезависимой памяти ключа.

Установка ключа на компьютер
Для установки ключа MPKEY присоедините его к параллельному порту принтера IBM PC или совместимого компьютера. Если компьютер расположен слишком близко к стене или другому препятствию, вы можете подсоединить к порту переходной кабель, а затем к этому кабелю подсоединить MPKEY. Используйте прямой 25-контактный кабель типа "папа-мама".

Выбор порта
При вставке запросов в свое приложение вы сами задаете порт, который собираетесь использовать. Ваши конечные пользователи должны устанавливать ключ на тот порт, который вы указываете в этих запросах. Вы можете вставить в код приложения проверку всех портов, тогда пользователи смогут сами выбрать тот порт, который они хотят использовать.
Каскадирование
Замечание: Каскадируемые ключи должны обязательно иметь различные идентификаторы.
Каждый МК имеет уникальный идентификатор, который используется прикладным ПО при работе с ним. Такая "визитная карточка" позволяет использовать несколько каскадно установленных на порт ключей, а приложениям - работать с каждым из них независимо.
Подсоединив к одному параллельному порту одновременно до двадцати ключей MPKey, вы можете защитить сразу несколько программных пакетов. Подсоединение ключей друг к другу выполняется посредством разъемов, которыми они снабжены. Такой метод называется "каскадированием".
Использовав подсоединенный к порту кабель-переходник, и подсоединив несколько ключей MPKey, вы сможете даже при каскадировании разместить свой компьютер непосредственно у стены или другого препятствия.
Если к одному параллельному порту необходимо подключить два устройства, только одно из которых является ключом MPKey, то непосредственно к порту надо подключать MPKey, а уже к последнему - иное устройство.
Персонализация ключа
Перед продажей Вам партии ключей осуществляется запись в однократно программируемую память специальной информации, как индивидуального характера, так и одинаковой для всех ключей из приобретаемой Вами серии. В дальнейшем эта информация может только читаться и использоваться ключом при выполнении функции.

Аппаратный интерфейс параллельного порта
В следующем далее описании аппаратного интерфейса параллельного порта все ссылки относятся к сигналам соответствующих контактов разъема параллельного порта, а не к состоянию программных регистров порта ввода-вывода. Подробнее смотрите "Справочное руководство IBM" ("IBM Reference Manual") или соответствующее руководство на Ваш компьютер.
Все сигналы постоянно свободно проходят через MPKey на принтер. Ключ MPKey производит только мониторинг этих сигналов.
Для посылки компьютеру откликов на запросы используется только одна сигнальная линия, или BUSY, или ACK. Соответствующий сигнал принтера пропускается по этой линии все время, за исключением интервала запроса. MPKey становится активным только тогда, когда обнаружит начало запроса.
· Питание (power) - при работе MPKey для питания его внутренней логики используется ток от всех доступных сигналов.
· Вывод (output) - обычно возврат данных от MPKey происходит по сигнальной линии ACK.
· Ввод (input) - для ввода ключ использует линии данных порта принтера.

Обзор методов защиты программ и данных
Существует несколько способов защиты программы и данных от несанкционированного использования. У всех их есть как сильные, так и слабые стороны.
Защита готового исполняемого модуля.
Это наиболее простой способ и требует наименьших усилий со стороны разработчиков по его реализации. Этим способом пользуются так же в тех случаях, когда невозможно или нецелесообразно внести изменения в существующий исполняемый модуль.
Защита данным способом часто называется "Защитной оболочкой" (Shell). Суть этого метода сводится к тому, что исполняемый модуль кодируется специальным образом с использованием ключа MPKey. В результате создается стартовый модуль, который, используя MPKey, декодирует и запускает основной исполняемый модуль.
Существенным недостатком этого метода, является то, что после запуска основной модуль существует в памяти в незащищенном виде и может быть перехвачен хакером.
Для защиты исполняемого модуля используется служебная программа "MPKeyMon.exe"
Использование информации из ключа
Суть этого метода сводится к опросу MPKey и выяснения наличия ключа и чтения из него некоторой информации, записанной туда на стадии персонализации. Более сложным способом определения наличия ключа является выполнение в ключе некоторой функции и сравнения результата с заранее известным значением.
Главным недостатком этого метода защиты программ и информации является то, что если хакер отследил и убрал из программы все обращения к ключу и проверки корректности откликов, то программа будет работать так, как будто бы имеется правильный ключ.
Перенос в ключ части кода приложения.
Наиболее надежным способом защиты программы и данных от несанкционированного использования является перенос части действий из персонального компьютера в ключ. Можно, например, вместо сложения двух чисел в компьютере вызвать соответствующую функцию MPKey и использовать ее результат в дальнейших вычислениях. Целостность блока данных можно проверять путем вычисления контрольной суммы блока путем применения секретных функций MPKey. Информацию можно Кодировать и декодировать в ключе во время работы. И наконец, по просьбе клиента, в ключе может быть реализован его собственный алгоритм преобразования блока информации.
Наиболее ценным свойством данного способа защиты является то, что без ключа программа не будет корректно работать по причине отсутствия в теле программы значимых фрагментов кода и данных.
Динамическое кодирование и декодирование кода программ и данных
В программное обеспечение, поставляемое с MPKey, включены средства, которые дают возможность кодировать и декодировать информационные блоки, как в данных так и в теле программы. Кодирование и декодирование осуществляется на уровне драйвера. Этот механизм дает возможность организовать программу таким образом, чтобы некоторые функции и данные декодировались непосредственно перед их вызовом или использованием, и кодировались сразу же по выходу из функции или после использования данных.
Этот метод делает очень сложным, если вообще возможным, использования отладчиков и диассемблирован для выяснения логики работы программы.

Программное обеспечение системы MPKey
Программное обеспечение, входящее в состав комплекта разработчика, состоит из трех логических частей: драйверов; библиотек для работы с различными средствами программирования; служебных, тестовых, демонстрационных программ и примеров.
Необходимо скопировать содержимое дистрибутивного диска MPKEY на жесткий диск. В дальнейшем в этом описании директория, куда вы скопировали будет называться MPKEY_ROOT.
Драйверы
Установка драйверов необходима для операционных систем Windows 95 и Windows NT. Драйвер обеспечивает бесконфликтную коммуникацию между вашим приложением и аппаратным ключом на фоне одновременного использования принтерного порта другими приложениями. Драйвер должен устанавливаться на разрабатываемой вами системе, а также на всех системах ваших конечных пользователей. Способ установки драйвера зависит от используемой вами операционной системы. Программы драйверов, средства и инструкции по их установке и удалению находятся на диске в директории "\Bin".
Для приложения, выполняемого под DOS и Windows 3.xx код драйвера является частью программного интерфейса, компонуемого совместно с вашим приложением. Никаких дополнительных действий по установке в этом случае от вас не потребуется.
Служебные, тестовые и демонстрационные программы
Служебные программы, необходимые для проверки работоспособности ключа и осуществления защиты готовых исполняемых модулей находятся в директории \Bin. Для более полной информации читайте соответствующий ReadMe.txt файл.
В директории \Bin находится демонстрационная программа, целью которой является демонстрация "прозрачности" MPKey, т.е. возможности бесконфликтной работы с MPKey во время печати принтера или работы с другими устройствами, подключенными к компьютеру через разъем принтера.
Поддержка языков программирования
Все необходимые для разработчика библиотеки взаимодействия с MPKey для "C" (mpkeyapi.c и mpkayapi.h) и "Delphi" (mpkeyapi.pas) находятся в директории \API. Для остальных средств программирования для взаимодействия с ключом могут использоваться динамически линкуемые библиотеки из поддиректории *.DLL, поставляемые в составе дистрибутивного диска в директории \Bin.
Примеры программирования
В директории "\Example" находятся готовые проекты программ с примерами защиты программ и данных при помощи MPKey.

Методология работы с ключом

MPKEY подключается к параллельному порту компьютера, следовательно, для доступа к информации и к функциям ключа, как и к любому физическому устройству, необходимо работать с регистрами параллельного порта на аппаратном уровне. Однако, с целью защиты от сбоев современные операционные системы не позволяют программе работать с оборудованием напрямую, и поэтому, прямое обращение к параллельным портам через инструкции in и out может привести к ошибке программы. И несмотря на то, что иногда операционная система эмулирует вызовы этих ассемблерных инструкции "на лету", часто возникают проблемы из-за конфликтов драйвера принтера со стандартным обработчиком исключений, который в данный момент старается исполнить ваш запрос. С другой стороны, каждое чтение или запись информации ключа в реальности соответствует многократному обращению к параллельному порту. И если ваша программа не является драйвером устройства, то планировщик задач может прервать ее и передать управление другой задаче, которая потенциально может "испортить" значения в используемом вами порту. В результате это может привести к ошибкам в вашей программе и неправильной печати на принтере.
Что бы избежать всех этих проблем при организации обращений к аппратному ключу на дистрибутивном диске MPKEY имеются драйверы для операционных систем Windows 95, Windows NT. Эти драйверы работают на самом привилегированном уровне и полностью блокируют порт от других программ, тем самым предохраняя от возможных конфликтов при одновременном обращении_к физическому порту.
С другой стороны, драйверы выполняют работу по организации интерфейса к ключу (т.е. работают с ключом на аппаратном уровне), тем самым уменьшая вероятность ошибок в вашей программе. А предоставляемые библиотеки и исходные тексты примеров обращения к драйверам еще больше упрощают задачу.

lel: Здесь идет описание уже вплотную по программированию ключа, выкладывать его я не хочу, да бы не облегчать жизнь крекерам, а для программистов это не так и нужно (вообщем я еще раз прокунсультируюсь с компанией МультиСофт в целесообразности этого, и если это действительно кому-то может быть интересно). Вообще почему так мало ответов по защите? Просто совет данный специалистом из этой фирмы гласит, если ты реализовал защиту, то никому не рассказывай как это сделал. Защита ПО это своего рода исскуство, и как правило реализуется индивидуально для каждого разработчика, есть общие принципы, а в остальном это полет Вашей фантазии и Ваших знаний.

Рекомендации по защите программ с помощью MPKEY

Почему так тяжело "взломать" программы,защищенные ключом MPKEY?

Начнем с того, что выясним, что мы понимаем под словами "защитить программу". Основная цель компаний, производящих программные продукты, это исключить возможность их нелицензионного копирования и распространения. Защита может быть чисто программной, когда ваша программа на этапе установки привязывется к индивидуальным характеристикам компьютера. Она может быть и программно?аппаратной, когда используется привязка программы к внешнему устройству (такой, как электронные ключи). В идеальном случае, при отсутствии хакеров, программист проверит наличие ключа и в случае его отсутствия или неверно введенного пароля прекратит работу с программой. Однако, оговорка о хакерах, которая была сделана выше, очень существенна. Дело в том, что высококвалифицированный программист, хорошо знающий архитектуру машины и операционной системы, разбирающийся в системе команд процессора, может с помощью отладочных средств трассировать (исполнять по шагам) вашу программу, понять логику вашей защиты и как ее обойти. В дальнейшем он введет нужные изменения в исходный код программы в исполнимом файле и вашу программу можно будет свободно скопировать и распространять. Стоит отметить, что несмотря на то, что нанять такого человека, коих не так уж много, стоит достаточно дорого, некие компании, занимающиеся распространением пиратских дисков с популярными программами могут пойти на "взлом" вашей программы.
Начнем с того, что абсолютно "невскрываемых" программ не существует.
Однако, у хорошо защищенных программ снятие защиты может оказаться настолько тяжелым, что никто и не возьмется ее "взломать". И поэтому, основная цель - это сильно усложнить процесс снятия защиты с программы. Можно сыграть также на психологии взломщика. Если ему во время взломки придется перегружаться каждые три минуты (из-за антиотладчика), если ему надо будет устанавливать по сорок, пятьдесять точек останова для того, чтобы дойти до нужного места программы, а доходя, осознать, что без взломки программы внутри аппаратного ключа (чего он никогда не сделает по определению) он ничего не сможет сделать, то, согласитесь, ему будет не так легко.
Конечно, будучи профессионалом очень высокого уровня, он может написать эмулятор ключа, который один раз "подслушав разговор" ключа с программой может впоследствии его повторить. Однако, при разумном построении программы, при многозадачности современных операционных систем, при использовании защищенных кусков программы при обработке сообщений системы и в конце концов при работе с данными, которые все время меняются, такой эмулятор будет бесполезным, поскольку обращения к ключу будут невоспроизводимыми при разных сеансах работы вашей программы.
Вы можете кодировать код и данные, пароли входа в систему и идентификаторы пользователей. Воспользуйтесь ключом для генерации псевдослучайных чисел или секретных последовательностей, для исполнения стандартных и ваших собственных секретных функций. При этом взломщику придется очень тяжело, даже если у него будет отличная отладочная плата и отличная программа-отладчик, поскольку часть логики вашей программы будет внесена в другое устройство MPKEY.
А устройство MPKEY практически нельзя "взломать".
Ситуация усугубляется еще тем, что даже, поняв некие детали логики, он все равно не сможет внести нужные ему изменения в исполнимый файл, поскольку сам файл будет закодирован, и любое изменение в его закодированных кусках приведет к некорректности работы декодирующей части и, естественно, к ошибке работы всей программы.

lel: Ну вот и все, я надеюсь кому то это описание любезно предоставленное компанией МультиСофт поможет понять возможности защиты с использованием электронных ключей. От себя замечу, что естественно есть много других электронных ключей, но по стоимости и по стойкости в защите MPKey был самым оптимальным в моем случае.

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования