Как предотвратить кражу моего кода?

Что происходит, когда я запускаю .NET exe? Я знаю, что С# скомпилирован в IL-код, и я думаю, что сгенерированный exe файл просто запускает запуск среды выполнения и передает ему IL-код. Но как? И насколько это сложный процесс?

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

Моя конечная цель - извлечение кода IL и запись моей собственной зашифрованной пусковой установки, чтобы запретить скрипт-треки открывать мой код в Reflector и просто легко красть все мои классы. Ну, я не могу полностью предотвратить обратное проектирование. Если они смогут проверять память и улавливать момент, когда я передаю чистый ИЛ во время выполнения, это не имеет значения, является ли это .net exe или нет, не так ли? Я знаю, что есть несколько инструментов обфускатора, но я не хочу испортить сам код IL.

РЕДАКТИРОВАТЬ: так что кажется, что не стоит пытаться делать то, что я хотел. Они все равно взломают... Так что я буду искать инструмент обфускации. И да, мои друзья тоже сказали, что достаточно переименовать все символы в бессмысленное имя. И обратное проектирование не будет таким легким в конце концов.

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

"Они скопировали все, что могли последовать, но они не могли скопировать мой разум, поэтому я оставил им потение и кражу за полтора года". - Р. Киплинг

Ответ 6

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

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

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

Ответ 7

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

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

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

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

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

Структура сборки NET - Часть II

.NET Foundations - структура сборки .NET

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