我们的反盗版软件根据硬盘序列号来识别人员。我相信这是一个恒定的功能,除非用户更改其主要物理驱动器,否则不会改变 - 如果我错了,请纠正我?我们使用WMI
python模块获取用户的硬盘序列号。
我们的 2 台测试计算机的硬盘序列号已更改。但我们根本没有改变他们的硬盘。
什么会导致这样的问题?我们识别序列的代码是否不全面跨 Windows 操作系统?我确实注意到这个post https://stackoverflow.com/questions/9683278/how-to-get-hard-disk-drivers-serial-number-in-python提到如果标准用户进程检索序列号,您可能会得到错误的序列号。但在我们的例子中,错误也发生在管理员用户身上。
一些重要信息:
- 这两个测试节点都运行 Windows 8 Professional
- 一台电脑是东芝笔记本电脑
- 另一台电脑是 Acer Iconia 平板电脑
- 该平板电脑最近从 Windows 8 更新到 Windows 8.1,我注意到此更新后序列号发生了变化
- 该笔记本电脑的管理员用户遇到了该问题。该平板电脑有一位遇到此问题的标准用户。
另外,硬盘序列号是硬件设备的 MAC 地址还是其他什么?
获取硬盘序列号的代码:
c = wmi.WMI()
for item in c.Win32_PhysicalMedia():
if "PHYSICALDRIVE" in str(item.Tag).upper():
serialNo = item.SerialNumber
break
Edit:一个简短的脚本,可作为正常进程和提升/管理进程检索用户的硬盘驱动器序列号。
Note:对我来说,无论作为用户还是管理员,它都会输出完全相同的序列号。这个脚本对你也有同样的作用吗?
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()
我们的反盗版软件根据硬盘序列号来识别人员。我相信这是一个恒定的功能,除非用户更改其主要物理驱动器,否则不会改变 - 如果我错了,请纠正我?
In normal使用序列号不应改变,但它是possible如果用户试图绕过您的反盗版技术,则可以更改它。请参阅此处以获取执行此操作的工具列表 https://www.raymond.cc/blog/changing-or-spoofing-hard-disk-hardware-serial-number-and-volume-id/2/,针对那些试图绕过游戏中反作弊系统的人。因此,您必须考虑硬盘序列号是否“足够好”以阻止大多数人盗版您的软件。
什么会导致这样的问题?我们识别序列的代码是否不全面跨 Windows 操作系统?
See 这个论坛主题 http://social.msdn.microsoft.com/Forums/vstudio/en-US/8523d7b9-0dc8-4d87-be69-a482aec9ee5e/wmi-win32physicalmedia-smart-id-in-vista-and-7-permissions?forum=netfxbcl。结果会有所不同,具体取决于 Windows 版本、代码是否以管理员身份运行以及是否Win32_PhysicalMedia
使用类或Win32_DiskDrive
班级。看起来相当不可靠,您可能必须编写自己的抽象层来自己处理它,如这些论坛帖子中所述。
我自己尝试了一下,发现我得到了两个不同的序列号,具体取决于管理员与正常的序列号Win32_PhysicalMedia
vs Win32_DiskDrive
:
VB38bb50ab-0de50c12
and
42563833626230356261302d6564303531632032
请注意,第二个字符串实际上是第一个字符串的十六进制编码和字节反转版本!也许同样的事情也发生在你身上?
是硬盘驱动器序列号 硬件设备的 MAC 地址
或者是其他东西?
MAC(媒体访问控制)地址仅与网络接口有关,与硬盘无关。硬盘序列号是硬盘制造商设置的任意字符串——它可以是任何内容,并且只对制造商有意义,如果制造商没有实现它甚至可以为空。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)