Как я могу защитить свой исходный код ASP.Net от моих разработчиков

Это кажется странным, но позвольте мне все равно задать вопрос.

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

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

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

Я просто хочу защитить все, что попадает в корзину.


person Cyril Gupta    schedule 18.07.2009    source источник
comment
Перед тем, как поднять доверие к себе. Раньше меня обижал разработчик, который украл мой код и обратился к конкуренту. Однажды укушенный, навсегда застенчивый.   -  person Cyril Gupta    schedule 18.07.2009
comment
Должен признаться ... Над этим вопросом тоже размышлял. +1   -  person Cerebrus    schedule 18.07.2009


Ответы (8)


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

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

person Matt Howells    schedule 18.07.2009
comment
Здесь есть несколько жизнеспособных подходов. Но я наконец выбрал твою, потому что она самая злая. Я добавляю некоторые флаги компилятора в свою DLL, которые, если это правда, могут испортить вычисления. Теперь мне нужно только не забыть заменить тестовую dll моей производственной dll перед загрузкой. Спасибо - person Cyril Gupta; 18.07.2009
comment
Это замедлит их, но в конечном итоге будет взломано - где-то в памяти есть логический флаг, который просто нужно изменить, чтобы проверка прошла. - person womp; 18.07.2009
comment
Это константа компилятора. Так что технически я считаю, что в DLL должен быть скомпилирован только неправильный код. - person Cyril Gupta; 18.07.2009
comment
Самая злая +1 за это! Очень понравилось. - person Ryan Liang; 18.07.2009

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

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

person LachlanG    schedule 18.07.2009

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

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

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

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

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

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

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

person womp    schedule 18.07.2009
comment
Это не ответ на мой вопрос. Меня беспокоит не реверс-инжиниринг. - person Cyril Gupta; 18.07.2009
comment
+1 Ваш обновленный ответ очень интересен, но я уже изменил DLL, чтобы отображать неправильные результаты (что было проще всего реализовать). Я попробую ваш метод, как только смогу, и скажу, есть ли у вас какие-либо проблемы с безопасностью. Спасибо - person Cyril Gupta; 18.07.2009

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

person Cherian    schedule 18.07.2009
comment
Обфускация - не моя проблема. Меня не беспокоит, что кто-то декомпилирует мой код. Меня беспокоит, что кто-то возьмет эту dll, поместит ее в свою папку bin и использует для создания веб-сайта, похожего на мой. (Это DLL, которая выполняет некоторые специальные вычисления). Как мне их остановить? Как мне доказать, что они используют мою DLL на своем сервере, если это произойдет? - person Cyril Gupta; 18.07.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)

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

person nilamo    schedule 18.07.2009
comment
Такие вещи требуют трещин. Хотя бы все равно их замедлить. - person womp; 18.07.2009
comment
Также может замедлить работу приложения, если трубки немного вялые. - person nilamo; 18.07.2009

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

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

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

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

person Gerald    schedule 18.07.2009
comment
Да, они подписали NDA. Но для урегулирования судебного процесса в Индии требуется десятилетие (а). Я бы принял подход «пасхальное яйцо», но DLL предназначена для использования в ASP.Net. Если они разместят его на сервере, я ничего не смогу сделать, чтобы вызвать с него функции. Он будет находиться в корзине. Я думаю, что лучше всего не позволить им получить доступ к правильной DLL. - person Cyril Gupta; 18.07.2009
comment
Да, я имел в виду, выполняла ли DLL какую-либо обработку пользовательского ввода с сайта. Не зная фактического характера кода, трудно понять, имеет ли он смысл, но если, например, ввод в DLL основан на данных формы, вводимых пользователем, это может быть вашим каналом для вызова пасхального яйца, если вывод DLL затем отображается пользователю. Но если судебные процессы длятся так долго, это, вероятно, в любом случае спорный вопрос, и я согласен, что не предоставлять им доступ к правильной DLL, вероятно, лучше всего. - person Gerald; 18.07.2009

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

person JBrooks    schedule 20.07.2009
comment
Звучит как жизнеспособная стратегия, но это увеличит время задержки для разработчиков mmy. Я сделал фальшивую dll (dll дает неправильные результаты), поэтому мои разработчики никогда не узнают, что работают с плацебо, и они получат неприятный сюрприз, если кто-то попытается запустить его в производство. - person Cyril Gupta; 20.07.2009

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

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

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

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

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

person Machetero    schedule 30.12.2009