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()