Какой код написать для системы с ключом, чтобы обеспечить лучшую безопасность? - PullRequest
10 голосов
/ 25 августа 2009

Я разработал программную часть (с C и Python), которую я хочу защитить с помощью ключа, чтобы копирование и обратный инжиниринг стали достаточно сложными. Мой аппаратный ключ поставляется с API, который обеспечивает эти:

  • Проверить наличие ключа
  • Проверьте правильность ключа
  • Запись в ячейку памяти в ключе
  • Чтение из памяти в ключе и т. Д. (Я думаю, что остальные не так хороши ..)

Что я могу сделать в исходном коде, чтобы его стало сложнее взломать. Поставщик электронного ключа предложил, чтобы я проверял правильность существования ключа в цикле или после события, или я должен использовать память электронного ключа эффективным способом. Но как? Я понятия не имею, как взломать крекеры. Пожалуйста, пролите немного света. Заранее спасибо.

P.S .: Пожалуйста, не предлагайте запутывать. Я уже сделал это.

Ответы [ 8 ]

11 голосов
/ 25 августа 2009

Прежде всего, поймите, что ключ будет лишь небольшим препятствием. Кто-то, кто знает, что они делают, просто удалит вызов ключа и вставит «true» для любого результата, который был вызван. Все скажут тебе это. Но есть контрольно-пропускные пункты, которые вы можете добавить!

Я бы нашел ключевую часть вашего кода, что-то, что трудно или трудно понять, что-то, что требует знания предметной области. Затем положите эти знания на ключ. Одним из примеров этого могут быть шейдерные процедуры. Процедуры шейдеров - это текстовые файлы, которые отправляются на видеокарту для достижения определенных эффектов; очень простой фильтр яркости / контраста может быть реализован менее чем за 500 символов, и вы можете сохранить его в пользовательском пространстве на большинстве ключей. Затем вы помещаете эту информацию на ключ и используете только информацию от ключа для показа изображений. Таким образом, если кто-то попытается просто удалить ваш ключ, все изображения в вашей программе будут затемнены. Для этого потребуется кто-то, у кого будет копия вашей программы, выхватите текстовый файл из ключа, а затем измените вашу программу, чтобы включить этот текстовый файл, и затем узнаете, что этот конкретный файл будет «правильным» способом отображения изображений. Особенности реализации зависят от вашей платформы развертывания. Например, если вы запускаете программу в WPF, вы можете сохранить подпрограмму directx на свой ключ, а затем загрузить эту подпрограмму из ключа и применить эффект ко всем изображениям в вашем приложении. Затем взломщик должен иметь возможность перехватить эту процедуру DirectX и применить ее правильно.

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

Лучше всего, однако, поместить на ключ функцию, специфичную для домена (например, всю процедуру генерации UID). В этом отношении у разных производителей будут разные возможности.

Сколько блокпостов вам принесут эти хитрости? Реально, это зависит от популярности вашей программы. Чем популярнее ваша программа, тем больше вероятность того, что кто-то захочет ее взломать и посвятит этому время. В этом случае у вас может быть несколько дней, если вы особенно хорошо умеете кодировать ключи. Если ваша программа не так популярна (скажем, всего несколько сотен клиентов), то наличие только одного ключа может быть достаточно сдерживающим фактором, не делая ничего умного.

6 голосов
/ 25 августа 2009

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

Запутывание кода тестирования и множества разбросанных фрагментов кода, которые выполняют тесты различными способами, а также пространственно и временно отделяют эффект теста (отключение / снижение функциональности, отображение предупреждения и т. Д.) От самого теста сделать первый метод сложнее.

Изменение содержимого ключа в каждом тесте на основе некоторого случайного одноразового номера, созданного при каждом запуске или, возможно, даже сохраненного между запусками, так что наивная запись и воспроизведение трафика не будут работать, что усложнит последний метод.

Однако в описанной системе все еще очень просто эмулировать ключ, поэтому рано или поздно кто-нибудь это сделает.

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

4 голосов
/ 17 февраля 2010

Как максимизировать защиту с помощью простого ключа?

Используйте API вместе с Enveloper, если для вашего результирующего формата файла существует разработчик. Это очень основное правило. Потому что наш разработчик уже оснащен некоторыми анти-отладочными и запутывающими методами, чтобы обычные хакеры-новички не отказывались от взлома программы. Только использование enveloper также не рекомендуется, потому что, как только хакер может взломать защиту разработчика в другой программе, он также может взломать вашу.

Вызывайте API-интерфейсы ключей в большом количестве мест в вашем приложении. Например, при первом запуске, при открытии файла, при открытии диалогового окна и перед обработкой любой информации. Также возможно сделать некоторую случайную проверку, даже если ничего не сделано вообще.

Используйте более одной функции для защиты программы. Не просто используйте функцию поиска для поиска подключенного ключа.

Используйте несколько библиотек dll / библиотек (если применимо) для вызова функций ключей. В случае взлома одной библиотеки DLL существуют другие части программного обеспечения, которые используют функции из другой библиотеки DLL. Например, скопировав sdx.dll в print.dll, open.dll и другие имена, затем определите вызовы функций из каждой библиотеки с разными именами.

Если вы используете файл dll для вызова функций ключа, свяжите его вместе с исполняемым файлом. Есть довольно много программ, способных сделать это; например PEBundle. 3

Я получил эту статью на PRLOG и нашел ее очень полезной для максимизации защиты с помощью простого ключа. Может быть, эта ссылка может помочь вам

Максимальная защита с помощью простого ключа для вашего программного обеспечения

0 голосов
/ 06 ноября 2010

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

0 голосов
/ 26 сентября 2010

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

Ничто не защищает от ошибок, как уже говорилось ранее. Кроме того, чем сложнее ваша безопасность, тем больше вероятность того, что она вызовет головные боли или проблемы у законных пользователей.

Я бы сказал, что самым безопасным приложением всегда является приложение, привязанное ближе всего к серверу. К сожалению, пользователи беспокоятся о том, что это шпионское ПО.

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

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

Я лично использую очень минимальные методы защиты в своем программном обеспечении, зная эти факты.

0 голосов
/ 25 июня 2010

Возможно, вы захотите изучить использование ключей Dinkey для защиты от копирования.

Кажется, это очень безопасная система, и в документации даются советы по повышению общей безопасности с помощью системы.

http://www.microcosm.co.uk/dongles.php

0 голосов
/ 25 августа 2009

Вы можете реализовать множество контрольных точек в своем приложении.

Я не знаю, используете ли вы HASP , но, к сожалению, ключи можно эмулировать .

0 голосов
/ 25 августа 2009

Я бы сказал, что если кто-то захочет взломать вашу защиту программного обеспечения, он сделает это. Когда вы говорите «достаточно сложно» - как следует понимать «достаточно»?

Ключ может помешать вашему обычному пользователю копировать ваше программное обеспечение - так что в этом смысле его уже «достаточно». Но любой, кто чувствует потребность и способен обойти ключ, скорее всего сможет обойти любую другую схему, которую вы разработали.

...