Imagino que con el número de serie de la BIOS será más que suficiente...
wmic.exe BASEBOARD get serialnumber
http://www.vb-helper.com/howto_net_get_cpu_serial_number_id.htmlhttp://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/f393708f-d7e3-4aa3-a624-7e8c6662f343/O tambien puedes crear tu propia GUID como indican aquí (El code está en C#):
http://stackoverflow.com/questions/3823394/how-to-get-unique-identifier-of-systemNo creo que haya nada más efectivo... pero no soy un experto en el tema.
PD: Ahora, que algo incrackeable no creo que lo consigas, porque ni los de Sony ni los de Adobe pueden... xD.
Saludos.
Edito: quizás esto te sirva... son los códigos de arriba pero los he simplificado.
El número de serie de la placa base se puede modificar, pero yo creo que como protección standard está muy bien... ya si quieres puedes obtener todos los serials del hardware pc para mayor seguridad X'D
Obtener la ID de la placa base:
#Region " Get Motherboard ID Function "
' [ Get Motherboard ID Function ]
'
' Examples :
'
' Dim Motherboard_ID As String = Get_Motherboard_ID()
' MsgBox(Get_Motherboard_ID())
Private Function Get_Motherboard_ID() As String
For Each Motherboard As Object In GetObject("WinMgmts:").InstancesOf("Win32_BaseBoard") : Return Motherboard.SerialNumber : Next Motherboard
Return Nothing
End Function
#End Region
Obtener la ID del procesador:
#Region " Get CPU ID Function "
' [ Get CPU ID Function ]
'
' Examples :
'
' Dim Processor_ID As String = Get_Motherboard_ID()
' MsgBox(Get_CPU_ID())
Private Function Get_CPU_ID() As String
For Each CPU_ID As Object In GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_Processor") : Return CPU_ID.ProcessorId : Next CPU_ID
Return Nothing
End Function
#End Region