131 lines
4.6 KiB
Python
131 lines
4.6 KiB
Python
import subprocess
|
|
import hashlib
|
|
import logging
|
|
import sys
|
|
import time
|
|
|
|
def get_hardware_info():
|
|
"""获取硬件信息(方案一)"""
|
|
startupinfo = None
|
|
if sys.platform == "win32":
|
|
startupinfo = subprocess.STARTUPINFO()
|
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
|
startupinfo.wShowWindow = subprocess.SW_HIDE
|
|
|
|
try:
|
|
# 获取CPU ID
|
|
cpu_info = subprocess.check_output('wmic cpu get ProcessorId', startupinfo=startupinfo).decode()
|
|
cpu_id = cpu_info.split('\n')[1].strip()
|
|
|
|
# 获取主板序列号
|
|
board_info = subprocess.check_output('wmic baseboard get SerialNumber', startupinfo=startupinfo).decode()
|
|
board_id = board_info.split('\n')[1].strip()
|
|
|
|
# 获取BIOS序列号
|
|
bios_info = subprocess.check_output('wmic bios get SerialNumber', startupinfo=startupinfo).decode()
|
|
bios_id = bios_info.split('\n')[1].strip()
|
|
|
|
if all([cpu_id, board_id, bios_id]):
|
|
print(f"\n方案一硬件信息:")
|
|
print(f"CPU ID: {cpu_id}")
|
|
print(f"主板序列号: {board_id}")
|
|
print(f"BIOS序列号: {bios_id}")
|
|
|
|
combined = f"{cpu_id}:{board_id}:{bios_id}"
|
|
return hashlib.md5(combined.encode()).hexdigest()
|
|
except Exception as e:
|
|
print(f"方案一获取失败: {str(e)}")
|
|
return None
|
|
|
|
def get_system_info():
|
|
"""获取系统信息(方案二)"""
|
|
startupinfo = None
|
|
if sys.platform == "win32":
|
|
startupinfo = subprocess.STARTUPINFO()
|
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
|
startupinfo.wShowWindow = subprocess.SW_HIDE
|
|
|
|
backup_info = []
|
|
|
|
try:
|
|
# 获取系统盘序列号
|
|
volume_info = subprocess.check_output('wmic logicaldisk where "DeviceID=\'C:\'" get VolumeSerialNumber', startupinfo=startupinfo).decode()
|
|
volume_serial = volume_info.split('\n')[1].strip()
|
|
if volume_serial:
|
|
backup_info.append(("volume", volume_serial))
|
|
print(f"\n系统盘序列号: {volume_serial}")
|
|
except Exception as e:
|
|
print(f"获取系统盘序列号失败: {str(e)}")
|
|
|
|
try:
|
|
# 获取Windows安装时间
|
|
os_info = subprocess.check_output('wmic os get InstallDate', startupinfo=startupinfo).decode()
|
|
install_date = os_info.split('\n')[1].strip()
|
|
if install_date:
|
|
backup_info.append(("install", install_date))
|
|
print(f"Windows安装时间: {install_date}")
|
|
except Exception as e:
|
|
print(f"获取系统安装时间失败: {str(e)}")
|
|
|
|
if backup_info:
|
|
combined = "|".join(f"{k}:{v}" for k, v in sorted(backup_info))
|
|
return hashlib.md5(combined.encode()).hexdigest()
|
|
return None
|
|
|
|
def test_stability():
|
|
"""测试ID的稳定性"""
|
|
print("开始测试硬件ID稳定性...")
|
|
print("将进行10次测试,每次间隔1秒")
|
|
|
|
# 存储每次生成的ID
|
|
hardware_ids = []
|
|
system_ids = []
|
|
|
|
for i in range(10):
|
|
print(f"\n第 {i+1} 次测试:")
|
|
|
|
# 测试方案一
|
|
hw_id = get_hardware_info()
|
|
if hw_id:
|
|
print(f"方案一(硬件信息)生成的ID: {hw_id}")
|
|
hardware_ids.append(hw_id)
|
|
|
|
# 测试方案二
|
|
sys_id = get_system_info()
|
|
if sys_id:
|
|
print(f"方案二(系统信息)生成的ID: {sys_id}")
|
|
system_ids.append(sys_id)
|
|
|
|
time.sleep(1)
|
|
|
|
# 分析结果
|
|
print("\n测试结果分析:")
|
|
|
|
if hardware_ids:
|
|
unique_hw_ids = set(hardware_ids)
|
|
print(f"\n方案一(硬件信息):")
|
|
print(f"生成次数: {len(hardware_ids)}")
|
|
print(f"唯一ID数: {len(unique_hw_ids)}")
|
|
print("是否稳定: " + ("是" if len(unique_hw_ids) == 1 else "否"))
|
|
if len(unique_hw_ids) > 1:
|
|
print("出现的不同ID:")
|
|
for idx, id in enumerate(unique_hw_ids):
|
|
print(f"{idx+1}. {id}")
|
|
else:
|
|
print("\n方案一(硬件信息): 获取失败")
|
|
|
|
if system_ids:
|
|
unique_sys_ids = set(system_ids)
|
|
print(f"\n方案二(系统信息):")
|
|
print(f"生成次数: {len(system_ids)}")
|
|
print(f"唯一ID数: {len(unique_sys_ids)}")
|
|
print("是否稳定: " + ("是" if len(unique_sys_ids) == 1 else "否"))
|
|
if len(unique_sys_ids) > 1:
|
|
print("出现的不同ID:")
|
|
for idx, id in enumerate(unique_sys_ids):
|
|
print(f"{idx+1}. {id}")
|
|
else:
|
|
print("\n方案二(系统信息): 获取失败")
|
|
|
|
if __name__ == "__main__":
|
|
test_stability() |