Как я могу защитить мой исходный код ASP.Net от моих разработчиков - PullRequest
17 голосов
/ 18 июля 2009

Кажется, это странная позиция, но позвольте мне все же задать вопрос.

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

Так что, несмотря на наличие команды, я работал над этим в одиночку.

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

Ответы [ 8 ]

8 голосов
/ 18 июля 2009

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

Редактировать: вы можете использовать переменную окружения, раздел реестра, наличие счетчика производительности, скрытый параметр в machine.config и т. Д. И сделать его похожим на подлинный параметр, затем скрыть и подписать строгим именем.

4 голосов
/ 18 июля 2009

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

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

2 голосов
/ 18 июля 2009

Это странное положение, в котором ... мои соболезнования.

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

Другой подход, который используют некоторые люди, - это написать действительно чувствительный код на C ++, скомпилировать его в неуправляемый .dll и вызывать его из .net с помощью взаимодействия. Байт-код C ++ гораздо сложнее для чтения, чем IL, и это создает гораздо больше барьеров для простого обратного инжиниринга.

Изменить: на основе комментариев от ОП, здесь обновленный ответ.

Если вы просто беспокоитесь о том, что они украдут библиотеку DLL, которую вы помещаете в папку bin на вашем веб-сервере, просто опубликуйте ее в подпапке \ bin, заблокируйте папку с помощью разрешений Windows, чтобы они никак не могли может войти в него и изменить ваш web.config, чтобы проверить его.

<runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin;bin\mysubfolder;" />
   </assemblyBinding>
</runtime>

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

1 голос
/ 30 декабря 2009

Я согласен со стратегией LachlanG по распространению прокси-библиотеки DLL, вместо того, чтобы предоставить вашим разработчикам доступ к производственной, которую можно легко взломать и перепроверять.

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

Я обнаружил, что Keylok предлагает конкурентоспособный продукт по доступной цене, который я настоятельно рассматриваю. Еще неизвестно, как защитить вызовы API в PHP, код которых не является ни двоичным, ни запутанным. Я не предвижу никаких проблем с DLL.

Я был руководителем проекта в компании, которая защищала свое ПО интеграции SAP с помощью таких ключей. Конечным продуктом был компакт-диск с кодом, руководством по установке, ключом и лицензионным счетом за 200 тысяч долларов. Sweeet !!! Это было 10 лет назад, и я еще не слышал о них ни о пиратстве, ни о нарушениях авторских прав!

Надеюсь, это поможет.

1 голос
/ 20 июля 2009

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

1 голос
/ 18 июля 2009

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

И, если возможно, открывайте свою DLL только через службу Windows или COM-сервер вне процесса, чтобы вы могли изолировать вашу DLL там, где они не могут получить к ней прямой доступ.

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

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

1 голос
/ 18 июля 2009

Вы могли бы поговорить с dll с доверенной третьей стороной (вероятно, это был бы сервер, которым вы бы управляли), чтобы немного пожать руку, чтобы убедиться, что он должен работать.

Что-то вроде

A. Hey, I'm sitting at [hostname->taken from env vars], can i do my job?
B. (checks records of registered hosts)  Yes you can.
A. Thanks.  (does what it does best)

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

1 голос
/ 18 июля 2009

Похожие: https://stackoverflow.com/questions/181991/suggest-a-good-obfuscator-for-net-closed.
Возможно, вы захотите выборочно запутать ваш код (оставьте общедоступные API-интерфейсы такими, как есть)

...