2012-01-27 43 views
12

Estoy creando una licencia que es específico de una máquina. La licencia se basa en los siguientes elementos:C# Creación de un ID único basado en los identificadores de hardware

  1. Dirección MAC
  2. CPU Número de serie
  3. ordenador volumen de serie Número de Drive0

estoy asumiendo que si 2 de los 3 coincidencia, mi licencia es valida Por lo tanto, la puede obtener una nueva tarjeta de red, y la licencia sigue siendo válida, etc.

¿Es esta una buena aproximación o voy a tener problemas con esto que no se ajuste o cambio de forma regular?

estoy tratando de obtener un identificador único para el equipo para que pueda validar la licencia.

Por favor, hágamelo saber cómo se ve o si usted tiene una mejor solución!

¡Gracias nuevamente!

** Esto es lo que se le ocurrió **

Terminé usando sólo el VolumeSerial, cpuid y VideoControllerDescription.

public enum HardwareProfileComponents 
    { 
     ComputerModel, 
     VolumeSerial, 
     CpuId, 
     MemoryCapacity, 
     VideoControllerDescription 
    } 

    public static Dictionary<string, string> HardwareProfile() 
    { 
     var retval = new Dictionary<string, string> 
         { 
          {HardwareProfileComponents.ComputerModel.ToString(), GetComputerModel()}, 
          {HardwareProfileComponents.VolumeSerial.ToString(), GetVolumeSerial()}, 
          {HardwareProfileComponents.CpuId.ToString(), GetCpuId()}, 
          {HardwareProfileComponents.MemoryCapacity.ToString(), GetMemoryAmount()}, 
          {HardwareProfileComponents.VideoControllerDescription.ToString(), GetVideoControllerDescription()} 
         }; 
     return retval; 

    } 

    private static string GetVideoControllerDescription() 
    { 
     Console.WriteLine("GetVideoControllerDescription"); 

     var s1 = new ManagementObjectSearcher("select * from Win32_VideoController"); 
     foreach (ManagementObject oReturn in s1.Get()) 
     { 
      var desc = oReturn["AdapterRam"]; 
      if (desc == null) continue; 
      return oReturn["Description"].ToString().Trim(); 
     } 
     return string.Empty; 
    } 


    private static string GetComputerModel() 
    { 
     Console.WriteLine("GetComputerModel"); 
     var s1 = new ManagementObjectSearcher("select * from Win32_ComputerSystem"); 
     foreach (ManagementObject oReturn in s1.Get()) 
     { 
      return oReturn["Model"].ToString().Trim(); 
     }    
     return string.Empty; 
    } 

    private static string GetMemoryAmount() 
    { 
     Console.WriteLine("GetMemoryAmount"); 
     var s1 = new ManagementObjectSearcher("select * from Win32_PhysicalMemory"); 
     foreach (ManagementObject oReturn in s1.Get()) 
     { 
      return oReturn["Capacity"].ToString().Trim(); 
     } 
     return string.Empty; 
    } 

    private static string GetVolumeSerial() 
    { 
     Console.WriteLine("GetVolumeSerial"); 
     var disk = new ManagementObject(@"win32_logicaldisk.deviceid=""c:"""); 
     disk.Get(); 

     string volumeSerial = disk["VolumeSerialNumber"].ToString(); 
     disk.Dispose(); 

     return volumeSerial; 
    } 

    private static string GetCpuId() 
    { 
     Console.WriteLine("GetCpuId"); 
     var managClass = new ManagementClass("win32_processor"); 
     var managCollec = managClass.GetInstances(); 

     foreach (ManagementObject managObj in managCollec) 
     { 
      //Get only the first CPU's ID 
      return managObj.Properties["processorID"].Value.ToString(); 
     } 
     return string.Empty; 
    } 
+0

En primer lugar, no se puede hacer: un GUID es un UUID calculado específicamente, por lo que al usar el término GUID en sí mismo, se define en formas específicas de cálculo. – TomTom

+0

Cambié el título para evitar llamarlo un "GUID", ya que es un tipo específico de identificación como notas de @TomTom. –

+0

¿por qué no se puede hacer? – ivowiblo

Respuesta

8

Aquí hay un artículo bastante decente sobre cómo MS lo hizo con Windows XP. Tal vez no sea exactamente lo que estás buscando, pero es un gran punto de partida.

Windows XP Activation Explained

¿Qué hardware de verificación Windows?

el sistema comprueba estos diez categorías de hardware:

  • Adaptador de pantalla
  • adaptador SCSI
  • IDE (de hecho, la placa base)
  • adaptador de red (NIC) y su Dirección MAC
  • RAM Cantidad rango (es decir, 0-64mb, 64-128MB, etc.)
  • Tipo de procesador
  • Procesador Número de serie
  • disco duro del dispositivo
  • disco duro Volume Serial Number (VSN)
  • CD-ROM/CD-RW/DVD-ROM
+0

Esto me dio lo que estaba buscando. Más de una lista sólida de cosas que puedo usar. Voy a elegir artículos que normalmente no cambiarían en un día determinado. ¡Gracias! – ErocM

+0

No hay problema. Me alegro de poder ayudar. Por cierto, estaba viendo el mismo problema para algo en lo que estoy trabajando. Después de leer los otros comentarios y respuestas, creo que "omitiré" la dirección MAC de NIC. Edward y Sean ambos ofrecieron sabios consejos en esa arena. –

12

No es realmente una respuesta, pero una palabra de precaución. Trabajé para una compañía de software que hizo un tipo similar de mecanismo de licenciamiento y fue ... frágil. Especialmente en computadoras portátiles. Considere:

  1. Al cambiar entre cableado e inalámbrico en una computadora portátil, tendrá una dirección MAC diferente en cada interfaz.

  2. Puede haber ventajas para cambiar su dirección MAC. Por ejemplo, algunos proveedores de Internet por cable en los estados vinculan estúpidamente su dirección MAC a su cuenta y uno podría necesitar conectar su computadora directamente al módem de cable y luego clonar el MAC de su enrutador si su enrutador muriera.

  3. Si un usuario fuera a arrancar desde un disco duro diferente (por ejemplo, una unidad flash o un dispositivo USB), ¿esto cambiaría lo que se informó como la primera unidad?

Y esto fue mucho antes de los días de la virtualización de productos básicos. Ahora considere que puede cambiar una configuración y reiniciar su VM y tener: una cantidad diferente de RAM, un disco duro de diferentes tamaños, un tipo diferente de controlador de disco duro virtual (IDE, SCSI, quizás múltiples interfaces de controlador SCSI). Y puede intercambiar en caliente los dispositivos de CD/DVD y cambiar la configuración de la NIC con un clic del mouse.

Así que no estoy diciendo "no hagas esto", exactamente, pero yo le anime a probar este mecanismo en tantas máquinas como en muchos ambientes como sea posible, y yo sugeriría además que sus usuarios tendrán muy poca paciencia cuando no puedan ejecutar el software que han pagado.

¿Has considerado los dongles de hardware?

+0

Imprimí esto y lo discutí con los programadores y mi jefe quiere que veamos qué puedo hacer con los elementos que normalmente no cambian. Solo puedo votar por uno, pero te di una buena marca por una buena respuesta y por las cosas que estar pendiente. – ErocM

9

Descubrí que la dirección MAC no merece realmente la pena hoy en día. Cada computadora tiene más de un adaptador de red, cualquiera de ellos puede ser un dispositivo externo que puede o no estar presente en un momento dado. Lanzamos un sistema que prestó demasiada atención a la dirección MAC hace años, y terminó siendo un desastre de servicio al cliente.

Por otro lado, es relativamente raro cambiar la CPU, la placa base, los controladores de bus/disco o el disco duro principal.

+0

Gran comentario en la dirección MAC. Estoy completamente de acuerdo. Tengo un adaptador de red extraíble para mi latop y se rompió de inmediato. Estoy usando el número de serie de la CPU y el disco duro en serie (basado en la unidad c). Cuando traté de obtener la placa madre en serie, en la mitad de las computadoras que probé, obtuve espacios en blanco. ¿Pasó lo mismo contigo? – ErocM

+0

CPU, motherboard, controladores de bus/disco, etc ... estos números de serie son iguales o en blanco ... ¿alguien más se enfrentó al mismo problema? –

Cuestiones relacionadas