总体思路
软件授权方案通常包含程序本体和注册机两部分。
当用户启动程序时,程序会检验本地的授权文件是否合法。若验证通过,则直接进入程序;若未找到授权文件或校验失败,则进入重新授权流程。进入授权流程时,程序先扫描本机运行环境生成机器码,然后提示用户找管理员获取授权码。用户将机器码发送给管理员,管理员将机器码输入注册机中,生成与该机器码唯一绑定的授权码后发送给用户。用户在程序中输入授权码,验证通过后正式进入程序,并在本地生成授权文件。

接下来介绍如何用 Python 来实现这套机制。
实现过程
实现这套授权机制,需要解决以下几个问题:
- 如何使授权码与机器唯一绑定,仅在本台机器上有效?
- 如何生成验证码,以及如何验证授权码是否有效?
- 如何保护自己的授权码不那么容易被人破解?
2.1 获取机器信息
要回答第一个问题,首先要搞明白软件如何判断自己运行在哪一台机器上。每一台机器都会有一个唯一的 MAC 地址,我们可以用它来作为机器的唯一标识。此外为了保险,还可以获取机器的 CPU 序列号、硬盘序列号、主板序列号等数据,与 MAC 地址共同作为一台机器的唯一标识。
Windows 系统下,可以使用 wmi 库来获取机器的硬件信息。
pip install wmi
2.1.1 获取 CPU 序列号
import wmi
m_wmi = wmi.WMI()
cpu_info = m_wmi.Win32_Processor()
if len(cpu_info) > 0:
serial_number = cpu_info[0].ProcessorId
print(serial_number)
2.1.2 获取 MAC 地址
import wmi
m_wmi = wmi.WMI()
for network in m_wmi.Win32_NetworkAdapterConfiguration():
mac_address = network.MacAddress
if mac_address != None:
print(mac_address)
2.1.3 获取硬盘序列号
import wmi
m_wmi = wmi.WMI()
disk_info = m_wmi.Win32_PhysicalMedia()
if len(disk_info) > 0:
serial_number = disk_info[0].SerialNumber.strip()
print(serial_number)





