У меня есть сборка, которая должна быть не может использоваться любым приложением, кроме указанного исполняемого файла. Пожалуйста, дайте мне несколько инструкций.Как запретить другим пользователям использовать мою сборку .Net?
ответ
Вы можете подписать сборку и исполняемый файл одним и тем же ключом, а затем поместить чек в конструктор классов, которые вы хотите защитить:
public class NotForAnyoneElse {
public NotForAnyoneElse() {
if (typeof(NotForAnyoneElse).Assembly.GetName().GetPublicKeyToken() != Assembly.GetEntryAssembly().GetName().GetPublicKeyToken()) {
throw new SomeException(...);
}
}
}
Возможно, вы сможете установить это в политике безопасности доступа к коду на сборке.
Вы должны иметь возможность сделать все внутри области, а затем использовать атрибут InternalsVisibleTo, чтобы предоставить только один доступ к сборке для внутренних методов.
может ли он победить отражение? – cathy 2008-09-18 20:45:06
В .Net 2.0 или лучше сделать все внутренние, а затем использовать Friend Сборки
http://msdn.microsoft.com/en-us/library/0tke9fxk.aspx
Это не остановит отражение. Я хочу включить часть информации ниже. Если вы абсолютно необходимо, чтобы остановить кого-либо от вызова, вероятно, лучшим решением является:
- ILMerge Исполняемых и .dll
- запутать окончательный EXE-файл
Вы также можете проверить на вызов стек и получить сборку для каждого вызывающего абонента и убедиться, что все они подписаны с тем же ключом, что и сборка.
будет ли это отражать? – cathy 2008-09-18 20:44:14
Нет, чтобы победить отражение, вам нужно запутывать. – 2008-10-08 13:45:26
Если сборка была веб-службой, например, вы могли убедиться, что указанный исполняемый файл передает секретное значение в сообщении SOAP.
Вы можете использовать обфускацию.
Что получится:
int MySecretPrimeDetectionAlgorithm(int lastPrimeNumber);
В то нечитаемым, как:
int Asdfasdfasdfasdfasdfasdfasdf(int qwerqwerqwerqwerqwerqwer);
другие будут по-прежнему иметь возможность использовать сборку, но это будет трудно сделать любой разумный.
100% полностью невозможно без прыжка через некоторые обручи.
Одним из преимуществ использования .NET является возможность использования отражения, который загружает сборку и проверяет ее, динамически вызывает методы и т. Д. Это то, что делает возможным взаимодействие между VB.NET и F #.
Однако, поскольку ваш код находится в управляемой сборке, это означает, что может добавить ссылку на ваш код и вызвать его общедоступные методы или загрузить его с помощью отражения и вызвать частные методы. Даже если вы «запутываете» свой код, люди все равно смогут использовать отражение и вызывать ваш код. Однако, поскольку все имена будут замаскированы, выполнение чего-либо затруднительно.
Если вы должны отправить свой код .NET таким образом, чтобы другие люди не выполняли его, вы могли бы использовать NGEN свой бинарный файл (скомпилировать его на x86) и отправить эти двоичные файлы.
Я не знаю специфики вашей ситуации, но обфускация должна быть достаточно хорошей.
Я не уверен, как это мне поможет .. будь то сборка .net или собственная сборка, любой должен иметь возможность загрузить ее правильно .. – cathy 2008-09-18 20:47:56
Да, вы можете динамически загружать неуправляемую DLL и выполнять ее тоже - однако то вы должны знать: адрес памяти кода, количество/тип параметров, как настроить эти параметры и т. д. Вызов неуправляемого кода для работы практически невозможно без источника. – 2008-09-18 22:45:56
кодом доступа атрибут, который @Charles Graham упоминает это StrongNameIdentityPermissionAttribute
из этой ссылки. В .NET Framework версии 2.0 и более поздних версий требования к разрешениям на идентификацию неэффективны, если вызывающая сборка имеет полное доверие. – cathy 2008-09-18 20:43:26
Как некоторые люди уже упоминали, используйте атрибут InternalsVisibleTo и пометить все как внутренние. Это, конечно, не защитит от отражения.
Одна вещь, о которой не упоминалось, относится к ilmerge вашим сборкам в ваш основной файл .exe/.dll/whatever, это будет препятствием для входа немного (люди не смогут увидеть вашу сборку самостоятельно запрашивая ссылку), но не остановит маршрут отражения.
ОБНОВЛЕНИЕ: Кроме того, IIRC, ilmerge имеет функцию, в которой он может автоматически интегрировать объединенные сборки, что означало бы, что вам не нужно использовать InternalsVisibleTo вообще
Вы также можете ознакомиться с использованием исполняемого упаковщика и компрессора Netz.
Это берет ваши сборки и ваш .exe-файл и упаковывает их в один исполняемый файл, чтобы они не были видимы во внешнем мире без какого-либо поиска.
Я предполагаю, что этого достаточно, чтобы предотвратить доступ для большинства программистов .net.
Большое преимущество подхода .netz заключается в том, что он не требует изменения кода. Другим преимуществом является то, что он действительно упрощает процесс установки.
Похоже, что вы ищете инструмент защиты или обфускации. Хотя нет серебряной пули, рекомендуемый инструмент защиты - smartassembly. Некоторые альтернативы: Salamander Obfuscator, dotfuscator и Xenocode.
К сожалению, если вы передадите свои байты кому-то, кто будет читать ... если у них будет достаточно времени и сил, они смогут найти способ загрузить и вызвать ваш код. Чтобы упредить ответ на комментарий, я вижу, что вы часто спрашиваете: Саламандра предотвратит загрузку вашего кода прямо в инструмент Reflector, но у меня было лучше (т.е. более надежное) впечатление от smartassembly.
Надеюсь, это поможет. :)
Я не уверен, что это доступный проспект для вас, но, возможно, вы можете разместить сборку с использованием веб-служб WCF или ASP.NET и использовать какую-то схему аутентификации (пары ключей LDAP, public/rpivate и т. д.), чтобы обеспечить подключение только разрешенных клиентов. Это обеспечит физическую сборку ваших собраний из чужих рук, и вы сможете контролировать, кто к ней подключается. Просто мысль.
Просто введите код доступа, который будет отправлен с использованием вызова функции, и если он не был авторизован, ничего не работает, как .setAuthorizeCode ('123456'), то в каждом месте, которое можно использовать, проверьте, если authorizeCode! = 123456, затем выбросьте ошибку или просто выйдите ... Это не похоже на хороший ответ для повторного использования, но это точно так.
Единственный раз, когда он может быть использован вами и когда вы будете жестко закодировать код авторизации в программу.
Просто мысль, может быть то, что вы ищете, или может вдохновить вас на что-то лучшее.
- 1. Как запретить другим пользователям использовать мое приложение для facebook?
- 2. Как запретить другим встроить мою вспышку?
- 3. Как запретить другим пользователям добавлять ссылку на службу хостинга wcf?
- 4. запретить другим пользователям вызова PHP файл
- 5. Как запретить пользователям доступ к другим записям пользователей?
- 6. Как запретить другим внешним пользователям загружать файлы из облачного хранилища
- 7. Как запретить другим пользователям загружать/открывать другие файлы?
- 8. Как я могу запретить другим кодерам обходить мою обертку?
- 9. Запретить другим пользователям получать файлы в TFS 2010?
- 10. Как запретить пользователям злоупотреблять услугами
- 11. Как запретить пользователям перетаскивать окна?
- 12. Как запретить пользователям удаление записей
- 13. Как запретить пользователям перемещать страницы?
- 14. Как запретить пользователям загружать видео?
- 15. Как защитить мою сборку .net winforms от клиентов клиента
- 16. Запретить другим пользователям доступ к файлам SVN Get Lock
- 17. запретить пользователям получать частичными
- 18. Запретить пользователям щелкать RadioButton
- 19. Отъезд - запретить другим пользователям проверять и проверять не отображается
- 20. Могу ли я запретить другим пользователям видеть мой код Python?
- 21. Запретить пользователям вводить дату
- 22. Как использовать сборку .Net в MongoDB?
- 23. Узнайте, кто начал мою сборку
- 24. Как запретить пользователям или приложениям использовать огромную поддержку?
- 25. Как (в Crosstable vis) запретить пользователям использовать сортировку?
- 26. Как запретить пользователям использовать одну учетную запись? (ASP.NET MVC)
- 27. Как запретить пользователям использовать блокировку рекламы на моем веб-сайте?
- 28. Как запретить пользователям использовать определенный URL-адрес в Facebook?
- 29. Запретить пользователям изменять дату в текстовом поле
- 30. Как запретить пользователям писать с закрытием крышки?
Проверьте с/[Assembly.GetEntryAssembly()] (http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly.aspx) – 2008-09-18 20:38:17