吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2705|回复: 13
收起左侧

[经验求助] python如何获取电脑硬件唯一码?

[复制链接]
俗静 发表于 2023-10-31 16:07
30吾爱币
需求:想每一台安装了软件的电脑有唯一的编号,即使软件卸载重装,编号依然不变。
使用:device_id = str(uuid.uuid1())#这个方法软件重装后编号会变化
使用下面的方法获取mac地址、cpu序列号、主板序列号作为唯一编号,经实测都不是全网唯一,而且有很大的概率重复(才1000个样本不到就出现重复了)
请教大家有没有别的好办法来制定唯一机器码

    # mac地址(不唯一)
    def mac_info(a=None):
        import uuid
        mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
        return mac
        # print("MAC地址:", ':'.join([mac[e:e + 2] for e in range(0, 11, 2)]))

    # cpu序列号(不唯一)
    def cpu_Info(a=None):
        cpu = []
        cp = wmi.WMI().Win32_Processor()
        for u in cp:
            cpu.append(
                {
                    "Name": u.Name,
                    "SerialNumber": u.ProcessorId,
                    "CoreNum": u.NumberOfCores
                }
            )
        return cpu[0].get('SerialNumber')

    # 主板序列号(不唯一)
    def mainboard_info(a=None):
        mainboard = []
        for board_id in wmi.WMI().Win32_BaseBoard():
            mainboard.append(board_id.SerialNumber.strip().strip('.'))
            return mainboard[0]

最佳答案

查看完整内容

1. 主板UUID 2.MachineGUID 重装系统会改变 [mw_shl_code=python,true]import winreg def get_machine_guid(): key = r'SOFTWARE\Microsoft\Cryptography' registry_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key) value, regtype = winreg.QueryValueEx(registry_key, 'MachineGuid') winreg.CloseKey(registry_key) re ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bin2163239 发表于 2023-10-31 16:07
1. 主板UUID
[Python] 纯文本查看 复制代码
wmic csproduct get UUID

2.MachineGUID 重装系统会改变
[Python] 纯文本查看 复制代码
import winreg

def get_machine_guid():
    key = r'SOFTWARE\Microsoft\Cryptography'
    registry_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key)
    value, regtype = winreg.QueryValueEx(registry_key, 'MachineGuid')
    winreg.CloseKey(registry_key)
    return value

print(get_machine_guid())
土鸡炖蘑菇 发表于 2023-10-31 17:09
import wmi
w = wmi.WMI()
obj = w.Win32_ComputerSystemProduct()[0]
bios = obj.IdentifyingNumber
print(bios)


电脑主板序列号唯一的,可以尝试这个
blfiag 发表于 2023-10-31 17:27
一个id可能不唯一,你可以多个硬件然后自己设置规则,取某n位到某m位之间,取MD5,再从MD5再取第i位到第j位,组成一串新id
 楼主| 俗静 发表于 2023-10-31 18:06
bin2163239 发表于 2023-10-31 17:24
1. 主板UUID

2.MachineGUID 重装系统 ...

谢谢回答,貌似是读注册表的方式。
如果是使用盗版的系统,用某个同一镜像安装的不知道会不会一样?
平淡最真 发表于 2023-10-31 18:07
blfiag 发表于 2023-10-31 17:27
一个id可能不唯一,你可以多个硬件然后自己设置规则,取某n位到某m位之间,取MD5,再从MD5再取第i位到第j位 ...

全取了肯定比截取部分更不容易重复
YangPC 发表于 2023-10-31 18:17
[Asm] 纯文本查看 复制代码
import psutil

# 获取硬盘序列号
def get_disk_serial():
    partitions = psutil.disk_partitions()
    for partition in partitions:
        try:
            partition_info = psutil.disk_usage(partition.mountpoint)
            if partition_info.total > 0:
                disk_serial = psutil.disk_serial_number(partition.device)
                if disk_serial:
                    return disk_serial
        except Exception as e:
            pass
    return None

# 获取主板序列号
def get_mainboard_serial():
    mainboard_serial = None
    try:
        with open('/sys/class/dmi/id/board_serial') as f:
            mainboard_serial = f.read().strip()
    except Exception as e:
        pass
    return mainboard_serial

# 获取CPU序列号
def get_cpu_serial():
    cpu_serial = None
    try:
        with open('/proc/cpuinfo') as f:
            for line in f:
                if line.strip().startswith('Serial'):
                    cpu_serial = line.split(':')[1].strip()
                    break
    except Exception as e:
        pass
    return cpu_serial

# 获取硬件唯一码
def get_hardware_unique_code():
    disk_serial = get_disk_serial()
    mainboard_serial = get_mainboard_serial()
    cpu_serial = get_cpu_serial()
    
    unique_code = f"{disk_serial}-{mainboard_serial}-{cpu_serial}"
    return unique_code
 楼主| 俗静 发表于 2023-10-31 18:19
土鸡炖蘑菇 发表于 2023-10-31 17:09
import wmi
w = wmi.WMI()
obj = w.Win32_ComputerSystemProduct()[0]

这是读取bios序列号,估计也不是唯一的,看这个帖子有人回答:https://bbs.csdn.net/topics/40306378
 楼主| 俗静 发表于 2023-10-31 18:35
YangPC 发表于 2023-10-31 18:17
[mw_shl_code=asm,true]import psutil

# 获取硬盘序列号

经实测:mac地址、主板序列号、cpu序列号全网是有重复的
然后硬盘序列号、bios序列号应该也是有重复的,百度一下他人的说法,虽然未实测
bin2163239 发表于 2023-10-31 18:44
俗静 发表于 2023-10-31 18:06
谢谢回答,貌似是读注册表的方式。
如果是使用盗版的系统,用某个同一镜像安装的不知道会不会一样?

用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。
返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-6-16 00:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表