win32ui win32api python3 for extensions example python winapi windows-8 wmi

python3 - win32api python



¿Por qué cambia el número de serie de un disco duro? (2)

Nuestro software antipiratería identifica a las personas de acuerdo con su disco duro de serie. Esto, creo, es una característica constante y no cambiará a menos que el usuario cambie su unidad física principal; ¿me corrige si estoy equivocado? Usamos el módulo python de WMI para obtener el número de serie del disco duro de los usuarios.

Para 2 de nuestras computadoras de prueba, el número de serie del disco duro ha cambiado. Pero no hemos cambiado su disco duro en absoluto.

¿Qué podría causar tal problema? ¿Nuestro código que identifica la serie no es completo en todos los sistemas operativos de Windows? Me di cuenta de que esta publicación menciona que puede obtener la serie incorrecta si un proceso de usuario estándar recupera el número de serie. Pero en nuestro caso, el error también ocurrió en un usuario administrador.

Alguna información importante:

  • Ambos nodos de prueba ejecutan Windows 8 Professional
  • Una computadora es una computadora portátil Toshiba
  • La otra computadora es una tableta Acer Iconia
  • La tableta se actualizó recientemente de Windows 8 a Windows 8.1 y noté que la serie cambió después de esta actualización
  • La computadora portátil tiene un usuario administrador que experimentó el problema. La tableta tiene un usuario estándar que experimentó el problema.

Además, ¿el número de serie del disco duro es la dirección MAC del dispositivo de hardware u otra cosa?

Código para obtener el número de serie del disco duro:

c = wmi.WMI() for item in c.Win32_PhysicalMedia(): if "PHYSICALDRIVE" in str(item.Tag).upper(): serialNo = item.SerialNumber break

Editar: una secuencia de comandos corta que recupera el número de serie de un disco duro de un usuario como un proceso normal y como un proceso elevado / de administración.

Nota: Para mí, produce exactamente el mismo número de serie sin importar como usuario o administrador. ¿Este script hace lo mismo por ti también?

import os import sys import wmi import win32com.shell.shell as shell ASADMIN = ''asadmin'' def get_elevated_privleges(): if sys.argv[-1] != ASADMIN: script = os.path.abspath(sys.argv[0]) params = '' ''.join([script] + sys.argv[1:] + [ASADMIN]) shell.ShellExecuteEx(lpVerb=''runas'', lpFile=sys.executable, lpParameters=params) def get_hard_drive_serial(): c = wmi.WMI() for item in c.Win32_PhysicalMedia(): if "PHYSICALDRIVE" in str(item.Tag).upper(): return str(item.SerialNumber) return None print "HD Serial as Regular User: " + get_hard_drive_serial() get_elevated_privleges() print "HD Serial as Admin User: " + get_hard_drive_serial()


Nuestro software antipiratería identifica a las personas de acuerdo con su disco duro de serie. Esto, creo, es una característica constante y no cambiará a menos que el usuario cambie su unidad física principal; ¿me corrige si estoy equivocado?

En el uso normal , el número de serie no debe cambiar, pero es posible que un usuario lo cambie si intentan eludir su técnica antipiratería. Vea aquí una lista de herramientas que hacen esto , dirigida a personas que intentan eludir sistemas anti-trampa en los juegos. Por lo tanto, debe considerar si el número de serie del disco duro es "lo suficientemente bueno" para impedir que la mayoría de la gente piratee su software.

¿Qué podría causar tal problema? ¿Nuestro código que identifica la serie no es completo en todos los sistemas operativos de Windows?

Ver este hilo del foro Los resultados varían según la versión de Windows, si el código se ejecuta como admin o no, y si se usa la clase Win32_DiskDrive o la clase Win32_DiskDrive . Parece bastante poco fiable, puede que tenga que escribir su propia capa de abstracción para manejarlo usted mismo, como se describe en estas publicaciones del foro.

Lo intenté yo mismo y descubrí que obtuve dos números de serie diferentes dependiendo de admin vs normal y Win32_PhysicalMedia vs Win32_DiskDrive :

VB38bb50ab-0de50c12

y

42563833626230356261302d6564303531632032

Tenga en cuenta que la segunda cadena es en realidad una versión codificada en hexadecimal y en byte invertido de la primera cadena. Quizás lo mismo te está pasando a ti?

¿El número de serie del disco duro es la dirección MAC del dispositivo de hardware u otra cosa?

Una dirección MAC (Control de acceso al medio) solo se relaciona con las interfaces de red, nada que ver con los discos duros. El número de serie del disco duro es una cadena arbitraria establecida por el fabricante del disco duro; puede ser cualquier cosa y solo tiene un significado para el fabricante, incluso podría estar en blanco si el fabricante no la implementa.


Sé que este es un hilo viejo, pero acabo de tener el mismo problema, usando el número de serie de la unidad como clave. Pensé que sería bueno documentar mis hallazgos en alguna parte.

Una cosa que noté fue que en algún lugar entre Windows 7 y Windows 8.1, parece haber habido un cambio en cómo las rutinas de WMI devuelven el número de serie de la unidad.

He enmascarado algunos personajes.

Windows 10 reports: [S21D********04F] Windows 8.1 reports: [S21D********04F] Windows 7 reports: [2SD1********40 F]

Parece que W7 y las siguientes no están intercambiando byte la información de la unidad.