Как сделать хорошую защиту от трещин? - PullRequest
12 голосов
/ 05 апреля 2011

Начну с того, что Я знаю , что невозможно предотвратить реинжиниринг вашего программного обеспечения.

Но, когда я смотрю на crackmes.de , появляются крэкмы с уровнем сложности 8 и 9 (по шкале от 1 до 10). Эти мрази взломаны гениальными мозгами, которые пишут учебник о том, как взломать его. Иногда такие уроки занимают более 13 страниц!
Когда я пытаюсь сделать взлом, они взламывают его через 10 минут. Затем следует учебное пособие «Как взломать» длиной 20 строк.

Итак, вопросы:

  • Как мне сделать относительно хорошую защиту от трещин.
  • Какие техники мне следует использовать?
  • Как я могу это узнать?
  • ...

Ответы [ 6 ]

7 голосов
/ 06 апреля 2011

Отказ от ответственности : Я работаю на поставщика средств защиты программного обеспечения ( Wibu-Systems ).

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

Наиболее сильная защита от взлома основана на шифровании (симметричный или открытый ключ). Шифрование может быть очень сильным, но если хранение / генерация ключа не является таким же надежным, его можно атаковать. Возможны и другие методы, даже с хорошим шифрованием, если вы не знаете, что делаете. Решение, предназначенное только для программного обеспечения, должно хранить ключ в доступном месте, легко обнаруживаемом или уязвимом для атаки «человек посередине». То же самое верно и для ключей, хранящихся на веб-сервере. Даже при хорошем шифровании и безопасном хранении ключей, если вы не можете обнаружить отладчики, взломщик может просто сделать снимок памяти и создать из него исполняемый файл. Поэтому вам никогда не нужно полностью расшифровывать память и иметь некоторый код для обнаружения отладчика. Запутывание, мертвый код и т. Д. Не замедляют их надолго, потому что они не взламываются, начиная с самого начала и прорабатывая ваш код. Они намного умнее, чем это. Достаточно взглянуть на некоторые видео с инструкциями по взлому в сети, чтобы узнать, как найти код обнаружения безопасности и взломать его оттуда.

Краткое бесстыдное продвижение: наша аппаратная система НИКОГДА не была взломана. У нас есть один крупный клиент, который использует его исключительно для антиреверсивного проектирования Итак, мы знаем, что это можно сделать.

3 голосов
/ 05 апреля 2011

Языки, такие как Java и C #, являются слишком высокоуровневыми и не предоставляют никаких эффективных структур против взлома. Вы могли бы усложнить детишкам сценария путаницу, но если ваш продукт того стоит, он все равно будет сломан.

2 голосов
/ 05 апреля 2011

Я бы немного повернул этот круг и подумал бы:

(1) введение простых (ish) мер, чтобы ваша программа не была тривиальной для взлома, например, на Java:

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

Однако, чем больше усилий вы приложите, тем более серьезные хакеры будут воспринимать это как «вызов». Вы действительно просто хотите убедиться, что, скажем, среднестатистический студент 1 курса информатики не сможет взломать вашу программу за несколько часов.

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

(3) просто раздайте свою программу в тех странах, где у вас практически нет шансов получить от нее прибыль, и не слишком переживайте по этому поводу - во всяком случае, это форма вирусного маркетинга. Помните, что во многих странах то, что мы видим в Великобритании / США как «пиратство» наших Драгоценных вещей, открыто воспринимается правительством / правоохранительными органами; не основывайте свою бизнес-модель на соблюдении авторских прав, которого не существует.

1 голос
/ 21 марта 2014

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

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

Мой метод состоитпри использовании комбинации трех реализаций:

1 - много проверок в исходном коде (размер, CRC, дата и т. д.: используйте свое творчество. Например, если мое приложение обнаруживает, что выполняются такие инструменты, как OllyDbg,это приведет к выключению машины)

2 - Виртуализация CodeVirtualizer в чувствительных функциях в исходном коде

3 - Шифрование EXE

Ничто из этого действительно не эффективно в одиночку: проверки могутпередается отладчиком, виртуализация может быть отменена и шифрование EXE может быть расшифровано.

Но когда вы используетеВ целом, они причинят БОЛЬШУЮ боль любому взломщику.

Это не идеально, хотя: большое количество проверок замедляет работу приложения, а шифрование EXE может привести к ложному срабатыванию в некоторых антивирусных программах.

Даже в этом случае нет ничего лучше, чем не быть взломанным;)

Удачи.

0 голосов
/ 16 января 2015

Я ставлю перед собой цель:

  • Создайте в доме ключ с именем KEY1 с N байтами случайным образом.

  • Продать пользователю «Номер лицензии» с Программным обеспечением. Запишите его / ее имя и фамилию и скажите ему, что эти данные необходимы для активации Программного обеспечения, а также для подключения к Интернету.

  • Загрузите в течение следующих 24 часов на ваш сервер «Номер лицензии», а также имя и фамилию, а также KEY3 = (KEY1 XOR hash_N_bytes (License_number, имя и фамилия))

  • Программа установки запрашивает "Licese_number", а также имя и фамилию, затем отправляет эти данные на сервер и загружает ключ с именем "KEY3", если эти данные соответствуют действительной продаже.

  • Затем установщик делает KEY1 = KEY3 XOR hash_N_bytes (номер лицензии, имя и фамилия)

  • Установщик проверяет KEY1, используя «хэш» из 16 битов. Приложение зашифровано ключом KEY1. Затем он расшифровывает приложение с помощью ключа и готово.

  • И установщик, и приложение должны иметь проверку содержимого CRC.

  • Обе проверки могут быть отлажены.

  • Оба могут иметь зашифрованные части кода во время выполнения.

Что вы думаете об этом методе?

0 голосов
/ 05 апреля 2011

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

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

Чем больше логики вы перенесете на сервер, тем сложнее его взломать. Но так будет, если оно того стоит. Даже крупные компании, такие как Blizzrd, не могут предотвратить реверсирование серверной части.

...