tagspaces tag files and windows client-server uniqueidentifier bios hardware-id

windows - files - tag folders



Manera confiable de generar ID de hardware único (4)

Lo que estás buscando es el Windows WMI . Puede obtener la ID de la placa base (que es única en el mismo tipo de placa base) o muchos otros tipos de identificadores únicos y crear una función sembrada inteligente para generar un UHID. Whoa acabo de hacer un acrónimo?

Y si está buscando específicamente obtener el ID de la placa base (BIOS):

WMI class: Win32_BIOS Namespace: /Root/Cimv2

Documentación: http://msdn.microsoft.com/en-us/library/aa394077(VS.85).aspx
Código de ejemplo: http://msdn.microsoft.com/en-us/library/aa390423%28VS.85%29.aspx

Edición : No especificó un idioma (y asumí C ++), pero esto se puede hacer en Java (con un controlador COM), y también en cualquier lenguaje .NET.

Pregunta: Tengo que crear una identificación única para cada cliente en red, de manera que:

  • (ID) debe persistir una vez que el software cliente está instalado en la computadora de destino, y debe continuar persistiendo si el software se vuelve a instalar en la misma computadora y en la misma instalación del sistema operativo,
  • no debería cambiar si la configuración del hardware se modifica de la mayoría de las formas (excepto el cambio de la placa base)
  • Cuando el disco duro con software cliente instalado se clona en otra computadora con una configuración de hardware idéntica (o, lo más similar posible), el software cliente debe estar al tanto de ese cambio.

Un poco de explicación y un poco de historia de fondo:

Esta pregunta es básicamente una pregunta antigua que también toca el tema de la protección contra copia de software, ya que algunos de los mecanismos utilizados en esa área se mencionan aquí. Debería tener claro en este punto que no estoy buscando un esquema de protección contra copia. Por favor, sigue leyendo. :)

Estoy trabajando en un software cliente-servidor que se supone que funciona en una red local. Uno de los problemas que tengo que resolver es identificar cada cliente único en la red (no tanto como un problema), de modo que pueda aplicar ciertos atributos a cada cliente específico, retener y aplicar esos atributos durante el tiempo de vida de implementación de un determinado cliente.

Mientras buscaba una solución, estaba al tanto de lo siguiente:

  • El sistema de activación de Windows utiliza algún tipo de mecanismo de huellas dactilares que es extremadamente sensible a las modificaciones de hardware.
  • El software de imágenes de disco se copia a lo largo de todos los ID de volumen (vinculados a cada partición cuando se formatea), y los ID personalizados, generados de forma única durante el proceso de instalación, durante la primera ejecución, o de cualquier otra forma, es estrictamente software en su naturaleza y se almacenan en el registro en el disco duro, por lo que es muy fácil confundir dos.

La opción obvia para este tipo de problema sería averiguar los identificadores de BIOS (aunque no estoy 100% seguro de que esto sea único a través de modelos de placa base idénticos), ya que eso es lo único en lo que puedo confiar que no se duplica, se transfiere por clonación , y eso no se puede cambiar (al menos no usando algún programa de espacio de usuario). Todo lo demás falla ya sea por no ser confiable (clonación de MAC, ¿alguien?) O demasiado exigente (en términos de que es demasiado sensible a los cambios de configuración).

La subpregunta que me gustaría preguntar es: ¿Lo estoy haciendo correctamente, en cuanto a arquitectura? Tal vez haya una mejor herramienta para la tarea que debo realizar ...

Otro enfoque que tuve en mente es algo similar a un mecanismo de intercambio de manos, en el que un servidor mantiene una tabla de búsqueda interna de ID de clientes conectados (que puede ser completamente basada en software y no única en un momento dado), y le dice al cliente que crear una ID diferente durante el protocolo de enlace, si se proporciona una ID duplicada en la conexión. Ese enfoque, desafortunadamente, no funciona bien con uno de los requisitos para vincular atributos a un cliente específico durante su vida útil.


Me parece que debe construir la ID única correspondiente a sus requisitos. Esta ID se puede construir como un hash (como MD5, SHA1 o SHA512) a partir de la información que es importante para usted (información sobre el componente de software y hardware).

Puede hacer que su solución sea más segura si firma tal hash con su clave privada y su software verifica durante el inicio, que la clave ( valor de hash firmado ) está firmada (solo la clave pública debe instalarse junto con su software). Uno puede expandir este tipo de solución con diferentes servicios en línea, pero los clientes corporativos podrían encontrar servicios en línea no tan agradables.


Muchos programas utilizan el hostId para crear un código de licencia (como los basados ​​en FlexLM). Eche un vistazo a lo que hace Matlab según el sistema operativo:

http://www.mathworks.com/support/solutions/en/data/1-171PI/index.html

También echa un vistazo a esta pregunta:

Obtención de una ID única de un sistema similar a Unix

Una vez que vi algunos programas que basan sus licencias en el número de serie del disco duro, tal vez sea menos probable que cambie. Algunos sugerirían usar el MAC de su tarjeta Ethernet, pero eso puede ser reprogramado.


NO CONFÍES EN MAC Y VOLUMEN ID !!!!!

La conexión a un servidor de validación también puede causarle muchos problemas porque:
* Sus clientes pueden no estar siempre conectados a Internet.
* sus clientes pueden conectarse con configuraciones especiales (enrutador / NAT / proxy / puerta de enlace) que deben ingresar en su programa para permitir que se conecte al servidor de validación.
* pueden estar detrás de un firewall que bloqueará todos los programas excepto unos pocos (mi caso). En algunos casos, es posible que el firewall no esté bajo su control (válido para la mayoría de los usuarios corporativos).

Si necesita una protección sólida, necesita confiar en la ID del hardware.

Aquí hay una biblioteca que ofrece EXACTAMENTE lo que usted desea: una forma confiable de leer el ID de hardware de una computadora. Entre otros, puede leer la ID de CPU y la ID de HDD, que son únicas y nunca cambiarán (sí, ni siquiera después de formatear la computadora y reinstalar Windows).

Hay una aplicación de demostración compilada que demuestra que, de hecho, las ID son únicas y permanentes: http://www.soft.tahionic.com/download-hdd_id/index.html

También hay un código fuente de demostración para muchos lenguajes de programación: http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL.html

El uso de la biblioteca es tan simple como llamar a una sola función (después de cargar la DLL en la memoria, por supuesto).