C++ Защита интеллектуальной собственности/защита от реверса

Я видел здесь много дискуссий о защите от копирования. Меня больше интересует антиреверс и защита IP.

Существуют такие решения, как Safenet и HASP, которые утверждают, что шифруют двоичный файл, но защищены ли они от реверсирования при использовании действительного ключа?

Какие стратегии можно использовать для запутывания кода и устранения реверсеров? Есть ли достойные коммерческие реализации?

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


person Kevin Bowling    schedule 26.05.2009    source источник
comment
Я предполагаю, что реверсирование означает обратный инжиниринг (он же декомпиляция)?   -  person StaxMan    schedule 27.05.2009


Ответы (7)


Существуют такие решения, как Safenet и HASP, которые утверждают, что шифруют двоичный файл, но защищены ли они от реверсирования при использовании действительного ключа?

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

Лично я бы не беспокоился. По общему признанию, я ничего не знаю о вашем бизнесе, но мне кажется, что обратное проектирование C++ относительно сложно по сравнению с такими языками, как Java или .NET. Этой защиты будет достаточно, чтобы отпугнуть всех, кроме самых решительных нападающих.

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

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

person Peter    schedule 26.05.2009

наймите некоторых людей, с которыми я работал на протяжении многих лет, и они полностью запутают исходный код!

person Community    schedule 26.05.2009
comment
Обфускация исходного кода не сильно усложнит обратный инжиниринг. Это потому, что компиляторы, скорее всего, оптимизируют большинство функционально эквивалентных обфускаций. - person Eduard - Gabriel Munteanu; 27.05.2009
comment
@Eduard - Габриэль Мунтяну, люди, с которыми я работал, могли сбить с толку даже лучших компиляторов! - person KM.; 27.05.2009
comment
+1: Очень смешно. Я видел код, который — готов поклясться — был намеренно запутан и забагован. - person S.Lott; 27.05.2009


При этом есть два основных направления:

  1. Обфускация — часто означает переименование и удаление символов. Некоторые могут также переупорядочивать код с помощью эквивалентных преобразований кода. Исполняемые упаковщики также обычно используют логику, препятствующую отладке.
  2. Защита нижнего уровня. Это означает программирование на уровне ядра или аппаратного обеспечения. Встречается в таких руткитах, как Sony, nProtect, защита от копирования CD/DVD.
person Unknown    schedule 26.05.2009

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

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

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

Обычно чем более коммерческим является ваше решение, тем более «известными» являются векторы атак.

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

person Eric    schedule 26.05.2009
comment
все ваши клиенты, которым придется нести препятствия, которые несет ваш метод защиты, большую часть времени - да, но если мы говорим о многопользовательской игре - большинство нечитерских игроков ценят античитерскую защиту (и для такого рода защиты, важен каждый бит) - person No-Bugs Hare; 17.09.2017

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

Вы указываете две цели желаемой схемы защиты:

1) Затруднить обратный инжиниринг. 2) Сделайте так, чтобы кто-то вас обворовывал.

Для № 1 любая схема обфускатора/детектора отладки/и т. д. будет иметь хоть какое-то влияние. Однако, если честно, сокращение процента инженеров, когда-либо копавшихся в выводе компилятора, означает, что для многих скомпилированный код C/C++ ЯВЛЯЕТСЯ запутанным кодом.

Для # 2, если у вас нет конкретного и юридически защищенного алгоритма / процесса, который вы пытаетесь защитить, как только приложение подвергнется обратному проектированию, вы потонете. Если это юридически защищено, вы уже опубликовали защищенные данные, так что вы пытаетесь получить?

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

person DarkSquid    schedule 26.05.2009

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

Откладывание реверс-инжиниринга лишь «отсрочит» неизбежное. На чем вам нужно сосредоточиться, так это на сдерживании первоначальной попытки нарушения авторских прав/ИС. Хорошее юридическое уведомление об условиях на странице «О нас» или смелое уведомление об авторских правах, предупреждающее о том, что любые попытки реконструировать код приведут к кирке по позвоночнику…

Большинство людей откажутся от попыток сорвать что-либо, если есть шанс, что они будут привлечены к судебной ответственности.

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

person Community    schedule 23.07.2009