Как препятствовать тому, чтобы другие использовали мой блок .NET?

Это сделает это:

/[A-Za-z\u00C0-\u00FF ]+/.exec('hipopótamo maçã pólen ñ poção água língüa')

Он явно выбирает диапазон символов юникода. Он будет работать для латинских символов, но другие странные символы могут быть вне этого диапазона.

10
задан starblue 25 April 2009 в 13:45
поделиться

13 ответов

Можно подписать блок и исполняемый файл с тем же ключом и затем поместить регистрацию конструктора классов, которые Вы хотите защитить:

public class NotForAnyoneElse {
  public NotForAnyoneElse() {
    if (typeof(NotForAnyoneElse).Assembly.GetName().GetPublicKeyToken() != Assembly.GetEntryAssembly().GetName().GetPublicKeyToken()) {
      throw new SomeException(...);
    }
  }
}
14
ответ дан 3 December 2019 в 13:32
поделиться

В.Net 2.0 или лучше, сделайте все внутренним, и затем используйте Друга блоки

http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx

Это не остановит отражение. Я хочу включить часть информации снизу. Если абсолютно необходимо мешать кому-либо звонить, вероятно, лучшее решение:

  1. ILMerge .exe и .dll
  2. запутайте финал .exe

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

11
ответ дан 3 December 2019 в 13:32
поделиться

100%, абсолютно невозможных, не переходя через некоторые обручи.

Одна из льгот использования.NET является способностью использовать отражение, которое является загрузкой блок, и осмотрите его, динамично назовите методы и т.д. Это - то, что делает interop между VB.NET и F# возможным.

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

Если необходимо поставить код.NET способом, который препятствует тому, чтобы другие люди выполнили его, Вы смогли к NGEN свой двоичный файл (скомпилируйте его в x86), и поставьте те двоичные файлы.

Я не знаю специфических особенностей Вашей ситуации, но путаница должна быть достаточно хорошей.

9
ответ дан 3 December 2019 в 13:32
поделиться

Вы могли также посмотреть на использование исполнимого упаковщика Netz и компрессора.

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

Мое предположение - то, что это достаточно для предотвращения доступа для большинства программистов .NET.

Большое преимущество подхода .netz - то, что он не требует, чтобы Вы изменили свой код. Другое преимущество - то, что это действительно упрощает Ваш процесс установки.

3
ответ дан 3 December 2019 в 13:32
поделиться

Необходимо смочь сделать все внутренне ограниченным по объему и затем использовать Атрибут InternalsVisibleTo, чтобы допустить только что один доступ из сборки к внутренним методам.

2
ответ дан 3 December 2019 в 13:32
поделиться

Атрибутом Безопасности доступа к коду, который упоминает @Charles Graham, является StrongNameIdentityPermissionAttribute

2
ответ дан 3 December 2019 в 13:32
поделиться

Вы смогли устанавливать это в политиках Безопасности доступа к коду в отношении блока.

1
ответ дан 3 December 2019 в 13:32
поделиться

Я не уверен, является ли это доступным путем для Вас, но возможно можно разместить блок с помощью WCF или веб-сервисов ASP.NET и использовать своего рода схему аутентификации (LDAP, public/rpivate пары ключей, и т.д.) для обеспечения только разрешенный клиенты соединяются. Это не допустило бы Ваш блок физически в чьи-либо еще руки, и можно управлять, кто соединяется с ним. Просто мысль.

2
ответ дан 3 December 2019 в 13:32
поделиться

Можно использовать путаницу.

Это повернется:

int MySecretPrimeDetectionAlgorithm(int lastPrimeNumber);

Во что-то нечитабельное как:

int Asdfasdfasdfasdfasdfasdfasdf(int qwerqwerqwerqwerqwerqwer);

Другие все еще смогут использовать Ваш блок, но будет трудно сделать любого разумным.

1
ответ дан 3 December 2019 в 13:32
поделиться

Поскольку некоторые люди упомянули, используют атрибут InternalsVisibleTo и отмечают все как внутреннее. Это, конечно, не примет меры против отражения.

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

ОБНОВЛЕНИЕ: Кроме того, IIRC, ilmerge имеет функцию, где он может автоматически усвоить объединенные блоки, которые означали бы, что Вы не должны использовать InternalsVisibleTo вообще

2
ответ дан 3 December 2019 в 13:32
поделиться

Если бы блок был веб-сервисом, например, то Вы могли бы удостовериться, что обозначенный исполняемый файл передает секретное значение в сообщении SOAP.

0
ответ дан 3 December 2019 в 13:32
поделиться

Просто потребуйте, чтобы код передачи был отправлен в использовании вызова функции и если оно не было авторизовано затем, ничто не работает, как .setAuthorizeCode ('123456') затем в каждом месте, которое может использоваться, имеют его проверка если authorizeCode! = 123456 затем выводят ошибку или просто выходят... Это не походит на хороший ответ для возможности многократного использования, но это - точно точка.

Единственное время это могло использоваться, Вами и когда Вы трудно кодируете авторизовать код в программу.

Просто мысль, мог быть тем, что Вы ищете или могли вдохновить Вас к чему-то лучше.

-2
ответ дан 3 December 2019 в 13:32
поделиться

Это кажется на поиск инструмента путаницы или защиты. В то время как нет серебряной пули, инструмент защиты, который я рекомендую, является smartassembly. Некоторые альтернативы являются Саламандрой Obfuscator, dotfuscator, и Xenocode.

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

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

1
ответ дан 3 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

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