He escrito un ensamblaje que no quiero que otras personas puedan usar. Mi ensamblado está firmado con un archivo de clave de nombre fuerte, pero ¿cómo puedo asegurar el código para que solo los otros ensamblados firmados con la misma clave puedan llamar a los miembros en este ensamblaje?Asegurar un conjunto para que no pueda ser utilizado por un tercero
Respuesta
Hay algunas opciones, ninguno muy eficaz, ya que no harán más que hacer las cosas un poquito más difíciles, pero no evitar que un usuario comprometido a evitar cualquier restricción:
En cada uno de sus puntos de entrada, se puede llamar a Assembly.GetCallingAssembly() y comparar el resultado con una lista de ensamblados que pueden llamar a su biblioteca, y lanzar una excepción de lo contrario.
Puede usar una herramienta como ilmerge para combinar sus ensamblajes en su aplicación principal y marcar todos los internos como privados. Combine con un ofuscador para proteger ligeramente mejor los resultados.
Pero asegurar un ensamblaje es tan sólido como asegurar una computadora donde el atacante tiene acceso físico: hay muy poco que puede hacer para proteger el contenido una vez que se le concede acceso físico.
Me parece un problema imposible. No puedes confiar en tu entorno Ese es un principio de computación fundamental y el motivo del cifrado de clave pública/privada.
es necesario agregar StrongNameIdentityPermissionAttributeattributes para exigir la seguridad
por ejemplo
[assembly:StrongNameIdentityPermissionAttribute(SecurityAction.RequestMinimum,
PublicKey="00240000048000009400000006020000002400005253413100040000010001005" +
"38a4a19382e9429cf516dcf1399facdccca092a06442efaf9ecaca33457be26ee0073c6bde5" +
"1fe0873666a62459581669b510ae1e84bef6bcb1aff7957237279d8b7e0e25b71ad39df3684" +
"5b7db60382c8eb73f289823578d33c09e48d0d2f90ed4541e1438008142ef714bfe604c41a4" +
"957a4f6e6ab36b9715ec57625904c6")]
ver esto msdn page para obtener más información
o lo hacen en Código Consulte this example
Yo sugeriría que se use el atributo LicenseProvider para asegurar el uso de su ensamblaje. Más información sobre el uso exacto está disponible here on MSDN
No estoy seguro si esta es la mejor opción, pero podría hacer que todas las clases "públicas" de su conjunto sean internas, y luego usar el atributo de nivel de ensamblaje [InternalsVisibleTo] para especificar explícitamente sus otras asambleas firmadas.
[assembly: InternalsVisibleTo('MyAssembly,Version=1.0.0.1, Culture=neutral,PublicKeyToken=...");
Here son los documentos de MSDN en el atributo.
Trivialmente pasado por alto con la reflexión. – AviD
Al principio pensé que podría hacer sus miembros/clases en su ensamblado firmado privado y aplicar el nivel de ensamblaje InternalsVisibleTo attribute a sus otros ensamblajes. Supongo que esa reflexión te dejará atravesar eso sin embargo.
Tal vez el StrongNameIdentityPermission es lo que estás buscando.
- 1. pasar un argumento para ser utilizado por instanceof
- 2. ¿Cómo puedo crear un plumín con una clase de vista asociada que pueda ser utilizado por múltiples ViewControllers?
- 3. Cómo crear un control/componente ASP.NET MVC 3 que pueda ser reutilizado por otras aplicaciones
- 4. Proteger un servicio web para que solo pueda ser llamado por una aplicación específica de Android
- 5. Conjunto valor predeterminado de una introducción de la contraseña para que pueda ser leído
- 6. typedef'ing function * signature * (no un puntero a), para que pueda ser reutilizado?
- 7. ¿Cómo serializo un objeto Java de modo que pueda ser deserializado por pickle (Python)?
- 8. ¿Cómo asegurar que el contenido del archivo cargado no pueda recuperarse después del uso?
- 9. Conjunto RelativeLayout niño para llenar el espacio no utilizado
- 10. ¿Cómo hacer que un elemento en las listas de ul no pueda ser ordenado ni extraíble?
- 11. Cómo autorizar aplicaciones móviles con un tercero por oauth PERO conectar a mi servicio, no el tercero
- 12. ¿Cómo puedo hacer que HttpContext esté disponible para ser utilizado por mis Pruebas Unitarias?
- 13. ¿Cómo configurar una función C++ para que pueda ser utilizada por p/invoke?
- 14. {obtener; conjunto; } utilizado en ViewModel
- 15. miembro no invocable 'System.Web.HttpRequest.ServerVariables' no puede ser utilizado como un método de
- 16. ¿Cómo evitamos que "CoreData no pueda cumplir un error"?
- 17. Ordenación de un conjunto basado en un atributo que puede ser nula en algunos elementos
- 18. ¿Por qué puedo probar un genérico para nulo cuando puede no ser anulable o puede no ser un objeto?
- 19. ¿Cómo hago que un enlace no se pueda hacer clic?
- 20. ¿Se puede crear un disco RAM de Java para ser utilizado con la API java.io. *?
- 21. Cómo envolver una biblioteca de C, de manera que pueda ser llamado desde un servicio web
- 22. Establecer CSS para iframe desde el sitio de un tercero
- 23. es válido para crear un objeto Regex estática para ser utilizado por todos los hilos en una aplicación ASP.NET?
- 24. ¿Debería el mailto ser utilizado en HTML5?
- 25. ¿Hay algún método que pueda anular en un objeto JavaScript para controlar lo que muestra console.log?
- 26. ¿Cómo desactivo el enrutamiento de reescritura de CakePHP para una sola carpeta para que pueda ser utilizado como una ubicación para una segunda aplicación?
- 27. ¿Cómo es un enrejado utilizado por un compilador
- 28. Cómo hacer que un LinearLayout pueda desplazarse
- 29. Buscando un host que pueda manejar Haskell
- 30. Es el puerto utilizado por un cliente TCP para conectarse a un servidor no disponible para otros servidores TCP
posible duplicado de [¿Cómo evitar que otros utilicen mi ensamblado .Net?] (Http://stackoverflow.com/questions/96624/how-to-prevent-others-from-using- my-net-assembly) – Manishearth