Как я препятствую тому, чтобы мой код был украден?

Чтобы получить результат в MB:

SELECT  SUM(ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 ), 2)) AS "SIZE IN MB"
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = "SCHEMA-NAME";`

Чтобы получить результат в GB:

SELECT  SUM(ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 /1024 ), 2))  AS "SIZE IN GB"
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = "SCHEMA-NAME";`
27
задан Brian Leahy 26 February 2010 в 14:33
поделиться

7 ответов

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

Это крайне плохая идея по двум причинам:

  1. Вам нужно будет включить ключ шифрования в свою заглушку. Если хакер 1337 может осмысленно использовать ваши отраженные сборки, он может так же легко украсть ваш ключ шифрования и сам расшифровать их. (Это в основном Аналоговая дыра )
  2. Никому нет дела до вашего кода 1337. Прости, но это тяжелая любовь. Никто не думает, что чей-то код так же интересен, как автор.
36
ответ дан 28 November 2019 в 04:09
поделиться

Лично я думаю, что запутывание - путь. Это просто и может быть эффективно, особенно если весь ваш код находится внутри exe-файла (я не уверен, что беспокоит «испортить IL»).

Однако, если вы чувствуете, что это не сработает для вас, возможно, вы сможете зашифровать свой exe-файл и встроить его в качестве ресурса в панель запуска. Самый простой способ справиться с этим - расшифровать ресурс exe, записать его в файл и выполнить. Как только исполняемый файл завершится, удалите файл. Вы также можете запустить его через функции Emit. Я понятия не имею, как это будет работать, но вот статья для начала - Использование Reflection Emit для кэширования сборок .NET .

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

3
ответ дан Brian 28 November 2019 в 04:09
поделиться

сгенерированный exe-файл - это просто программа запуска, которая запускает среду выполнения и передает ей IL-код.

Не совсем. Существуют различные способы настройки программы, но обычно IL-код компилируется в родной машинный код, который запускается вместе с программой выполнения.

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

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

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

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

20
ответ дан 28 November 2019 в 04:09
поделиться

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

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

26
ответ дан 28 November 2019 в 04:09
поделиться

Копирую свой ответ из этого вопроса (который не совсем дублируется, но на него можно ответить тем же, поэтому CW):

Windows EXE содержит несколько "частей". Упрощенно, код .net (=MSIL) является только частью EXE, а внутри EXE также есть "настоящая" часть Windows, которая служит своего рода пусковой установкой для .net Framework, которая затем выполняет MSIL.

Mono просто возьмет MSIL и выполнит его, игнорируя родной Windows Launcher.

Опять же, это упрощенный обзор.

Редактировать: Я боюсь, что мое понимание глубоких деталей depp недостаточно хорошо для действительно подробного описания (я примерно знаю, что такое PE Header, но не совсем детали), но я нашел эти ссылки полезными:

NET Assembly Structure - Part II

.NET Foundations - .NET assembly structure

Appendix: Если вы действительно хотите углубиться, возьмите копию Advanced .net Debugging. В самой первой главе объясняется, как именно загружается сборка .net до и после Windows XP (начиная с XP, загрузчик Windows знает .net, что радикально меняет запуск .net-приложений)

.
2
ответ дан 28 November 2019 в 04:09
поделиться

"... чтобы скрипткидди не могли открыть мой код в Reflector и просто украсть все мои классы."

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

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

6
ответ дан 28 November 2019 в 04:09
поделиться

«Они копировали все, что могли, но не могли копировать мои мысли, поэтому я оставил их потеть и воровать на полтора года позади». - Р. Киплинг

6
ответ дан 28 November 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: