本帖最后由 qq465881818 于 2026-4-18 19:04 编辑
[Python] 纯文本查看 复制代码 import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox
from mainui import Ui_MainWindow
import reglib
import pyperclip as pc
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# 设置文本框内容为注册码
self.edit1.setText(reglib.getreg())
# 复制按钮的点击事件
self.copy.clicked.connect(lambda: pc.copy(reglib.getreg()))
# 检查注册按钮
self.btn_checkreg.clicked.connect(self.okReg)
# 初始检查注册状态(参数False)
self.checkReg(False)
# 另一个按钮(pushButton)的点击事件
self.pushButton.clicked.connect(lambda: QMessageBox.information(
self, '1', '你好', QMessageBox.Ok
))
def okReg(self):
# 获取输入的注册码
self.code = self.edit2.text()
# 验证注册
self.checkReg()
def resizeEvent(self, event):
# 调整窗口控件大小
self.widget.setGeometry(0, 0, self.width(), self.height())
self.active_wid.setGeometry(0, 0, self.width() * self.act, self.height() * self.act)
def checkReg(self, b=None):
# 调用reglib的checkreg函数进行验证
r = reglib.checkreg(self.code)
# 根据验证结果显示不同的消息框
if r: # 假设验证成功
QMessageBox.information(self, '激活', '激活成功', QMessageBox.Ok)
else: # 验证失败
QMessageBox.critical(self, '错误', '注册码无效', QMessageBox.Ok)
[Python] 纯文本查看 复制代码 import hashlib
import winreg
import requests
import base64
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
k = 'LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBb2JWNWZIbHhsK01XemEwSjJXZFNnYS9lME9neDc4TDZ1WWlxRHIxUzh6ZnlncDdjClBxWnZNMHhacXRZd1grZkZBUlovNERKdFlkd0RmeXhSdXJMLzgxRG1HT3BQenZiRHJ1b0RhUElmSnpzcDgwSjIKS0JPbEhTY1dUc2k4WVBtT2NoQXAwZ1NSZS9zVzQ2Skdac1lJZ0dXQkRvWjl3NzIzVG95VGh2dGhuc3QyQk80egpJelZybkpyQ09vMHJXQ2JGY0UrTXI3WVhOdHh6dmdqNnRpMHNva3dZK1VNbnBBcno1QzJBY0N1VExEaHQvMEM2CmpmRy84ZldLQi9sWldVSGVHRFlIMEFaZjM3dy9aNlMyWW5icnRDTFRPK29NT3B5OVlnbXRpKzJCSDRzWXBwQlYKcmFCRVF5YmNOSzRmMmo2OGFaclAzTVlJOUZmUndLZ0IrR0c2UHdJREFRQUJBb0lCQUI2d3FHdmRTSmZBKzVUeApZRXNvZHRveUhLR2RUOHpuUGxweis0SnNvQStVOEt1bHByc2xMem1YSmZWc1RTWUdnTGNpSkFiU3l6dWxXK3lJCjVzSCtNdUZrMnlhallaNHY2eGVKUmpobXEwN3d4WmRyWjYxWGZTQzVTRnlQY0dFZk84K2VEYkhVT0NCRm1TUisKcWNuYmo4VitmaTNaaklqWHVyQm5zYUFPbVlwZldhcEk3UklDcnFsR05YUHRWcDlmcUxiOXNHU0hJZDRCKy8rNwp4UVJQb0MxMUlsMW1tTkYzVUdSd1pBN0k1NVo3MGZxbXNSdDY3MmRYeWdHaG9XcmFqWHBCc2l5RS9ibXZBaEhuCkk3OG5IZ2lJSnBldHdOYVBnTU9TTmhXTmpOQ1QrekpyNWRKdHpudGxQV25pc1EvcWkrUVM2TnY0V2FOUTA1TGYKVlpDYVFwRUNnWUVBd3FDTmNQZkNBK3JhSVh6WmlDN0NwZFlwZ3oyQjRsbjZDTzVJSEtaNWY0cGQ3amtZQVorYwpYT2l5WDBERVlJcTFNVHN6NDgyTlpKcnlFN3Q2NXNHS1dqdWVTemlKRHc4NlI0ZjJ1dkZFdWVvczJlbXZ6b1FtCmZXZGQ4cjArejZzdEM5QWhKY2Rta2cwSzZ6elNEQ3ZONndpRExiSHdNRDlUa2piUkhhK1F3NnNDZ1lFQTFMT1EKejNKTXA5N0VwYU1DMDI2L044c1ZvQVVyZUxnV001MitZZE9Cc1ZvdGV5eW9Vd0lxVFNPUEN2azJGTXlxTmRjdApmSzVIWm5MUTRuMThuV1MzRGpLa2tqQXZRMndYMmlKc1NwaEl4T3E1UmxmSERaWGFWWHhtZFI4SzJpbk5mSGR5CkwrU0JEbHByOHFIOU1jMFRMR0ZudUVFZkZlelRYalpCNk5yZXo3MENnWUJxZ3ljay9kSkdCbzhkNkkrOEFhc3cKeXNXcE4wNFByQ0kwSlFOOStuVmZvVC9La2FCYnN4Z0ZtS3VWaVlKdk96bnlHVzVLYTBISUh5d0FOSWdNSlRzcwpLcGgwbmhvVURjZGRRa0Y3Q1hNTk0rVWIxTklMK1RKL1NzU1ZoWkFNWXFlaVlXTGlvLyswU2tNQmZpV04xNk0zCnowN0xBU2hybnh5RFZsQ1hLRy9YUlFLQmdBZlFzVGx1RWJMNVZIQmhsUEQvMkxiTUYzZFJ1VTh1TkdLaElTV24KQjlUa1kxZHJSS1FJS0ZXOVFMdytlK1kzdnVsTGhyaFdEdm1Ncm5Bai9EZ3NReTJhWHNHZ1U1dytsSUhIVWdOTApwU0RYSHdlZW9nbTF2OWYwUWk5N2ZJS1hscDFFSmtYc04zRzNrTS9SYytRb2pOUE1vR3I4dVkrc3EvZUNOdG0vCmNRQmhBb0dBTEZoSjd1eDAzYXQrKzV4dENsaTlONG9IV3JSRlBIUHNzS1BVWWt1Vmlkd1BjK2gxQlFseVhPRnkKaWNTUU92ZFhxd2ZmcjZSdW1sZTdYaytUL2puNkVTTTNHSUgrajRTeVpucytBMnVmWnNsRU9aaldxcnRmeUsxdwo3OG0zMzZMbkNwekI1YmRsVkR3ZUZjbVRZNDkzYW5JRldnMTBFanByT3c1aFN6cmM5K1E9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t'
private_key = serialization.load_pem_private_key(base64.b64decode(k), password=None)
def get_machine_guid():
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Cryptography')
value, _ = winreg.QueryValueEx(key, 'MachineGuid')
return value
def interleave_string(s: str) -> str:
return s[3::5] + s[1::5] + s[4::5] + s[2::5] + s[::5]
def reg(data):
return interleave_string(hashlib.sha512(data.encode('utf-8')).hexdigest())[:50].upper()
def getreg():
return reg(interleave_string(get_machine_guid()))
def checkreg(data):
if data!= reg(getreg()):
return 1
else:
try:
r = requests.get('https://lh11117.github.io/api/regcode.bin')
except:
return 2
if r.status_code!= 200:
return 3
else:
f = r.content
try:
decrypted = private_key.decrypt(f, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None))
except:
return 4
data = decrypted.decode()
regcode = getreg()
regreg = reg(regcode)
for x in data.split('|'):
y = x.split('-')
if len(y)!= 2:
continue
else:
if y[0] == regcode and y[1] == regreg:
return 0
return 5
[Python] 纯文本查看 复制代码 import hashlib
import winreg
import requests
import base64
import os
import json
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
k = 'LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBb2JWNWZIbHhsK01XemEwSjJXZFNnYS9lME9neDc4TDZ1WWlxRHIxUzh6ZnlncDdjClBxWnZNMHhacXRZd1grZkZBUlovNERKdFlkd0RmeXhSdXJMLzgxRG1HT3BQenZiRHJ1b0RhUElmSnpzcDgwSjIKS0JPbEhTY1dUc2k4WVBtT2NoQXAwZ1NSZS9zVzQ2Skdac1lJZ0dXQkRvWjl3NzIzVG95VGh2dGhuc3QyQk80egpJelZybkpyQ09vMHJXQ2JGY0UrTXI3WVhOdHh6dmdqNnRpMHNva3dZK1VNbnBBcno1QzJBY0N1VExEaHQvMEM2CmpmRy84ZldLQi9sWldVSGVHRFlIMEFaZjM3dy9aNlMyWW5icnRDTFRPK29NT3B5OVlnbXRpKzJCSDRzWXBwQlYKcmFCRVF5YmNOSzRmMmo2OGFaclAzTVlJOUZmUndLZ0IrR0c2UHdJREFRQUJBb0lCQUI2d3FHdmRTSmZBKzVUeApZRXNvZHRveUhLR2RUOHpuUGxweis0SnNvQStVOEt1bHByc2xMem1YSmZWc1RTWUdnTGNpSkFiU3l6dWxXK3lJCjVzSCtNdUZrMnlhallaNHY2eGVKUmpobXEwN3d4WmRyWjYxWGZTQzVTRnlQY0dFZk84K2VEYkhVT0NCRm1TUisKcWNuYmo4VitmaTNaaklqWHVyQm5zYUFPbVlwZldhcEk3UklDcnFsR05YUHRWcDlmcUxiOXNHU0hJZDRCKy8rNwp4UVJQb0MxMUlsMW1tTkYzVUdSd1pBN0k1NVo3MGZxbXNSdDY3MmRYeWdHaG9XcmFqWHBCc2l5RS9ibXZBaEhuCkk3OG5IZ2lJSnBldHdOYVBnTU9TTmhXTmpOQ1QrekpyNWRKdHpudGxQV25pc1EvcWkrUVM2TnY0V2FOUTA1TGYKVlpDYVFwRUNnWUVBd3FDTmNQZkNBK3JhSVh6WmlDN0NwZFlwZ3oyQjRsbjZDTzVJSEtaNWY0cGQ3amtZQVorYwpYT2l5WDBERVlJcTFNVHN6NDgyTlpKcnlFN3Q2NXNHS1dqdWVTemlKRHc4NlI0ZjJ1dkZFdWVvczJlbXZ6b1FtCmZXZGQ4cjArejZzdEM5QWhKY2Rta2cwSzZ6elNEQ3ZONndpRExiSHdNRDlUa2piUkhhK1F3NnNDZ1lFQTFMT1EKejNKTXA5N0VwYU1DMDI2L044c1ZvQVVyZUxnV001MitZZE9Cc1ZvdGV5eW9Vd0lxVFNPUEN2azJGTXlxTmRjdApmSzVIWm5MUTRuMThuV1MzRGpLa2tqQXZRMndYMmlKc1NwaEl4T3E1UmxmSERaWGFWWHhtZFI4SzJpbk5mSGR5CkwrU0JEbHByOHFIOU1jMFRMR0ZudUVFZkZlelRYalpCNk5yZXo3MENnWUJxZ3ljay9kSkdCbzhkNkkrOEFhc3cKeXNXcE4wNFByQ0kwSlFOOStuVmZvVC9La2FCYnN4Z0ZtS3VWaVlKdk96bnlHVzVLYTBISUh5d0FOSWdNSlRzcwpLcGgwbmhvVURjZGRRa0Y3Q1hNTk0rVWIxTklMK1RKL1NzU1ZoWkFNWXFlaVlXTGlvLyswU2tNQmZpV04xNk0zCnowN0xBU2hybnh5RFZsQ1hLRy9YUlFLQmdBZlFzVGx1RWJMNVZIQmhsUEQvMkxiTUYzZFJ1VTh1TkdLaElTV24KQjlUa1kxZHJSS1FJS0ZXOVFMdytlK1kzdnVsTGhyaFdEdm1Ncm5Bai9EZ3NReTJhWHNHZ1U1dytsSUhIVWdOTApwU0RYSHdlZW9nbTF2OWYwUWk5N2ZJS1hscDFFSmtYc04zRzNrTS9SYytRb2pOUE1vR3I4dVkrc3EvZUNOdG0vCmNRQmhBb0dBTEZoSjd1eDAzYXQrKzV4dENsaTlONG9IV3JSRlBIUHNzS1BVWWt1Vmlkd1BjK2gxQlFseVhPRnkKaWNTUU92ZFhxd2ZmcjZSdW1sZTdYaytUL2puNkVTTTNHSUgrajRTeVpucytBMnVmWnNsRU9aaldxcnRmeUsxdwo3OG0zMzZMbkNwekI1YmRsVkR3ZUZjbVRZNDkzYW5JRldnMTBFanByT3c1aFN6cmM5K1E9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t'
private_key = serialization.load_pem_private_key(base64.b64decode(k), password=None)
def get_machine_guid():
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Cryptography')
value, _ = winreg.QueryValueEx(key, 'MachineGuid')
return value
def interleave_string(s: str) -> str:
return s[3::5] + s[1::5] + s[4::5] + s[2::5] + s[::5]
def reg(data):
return interleave_string(hashlib.sha512(data.encode('utf-8')).hexdigest())[:50].upper()
def getreg():
return reg(interleave_string(get_machine_guid()))
def create_local_regfile():
"""生成本地注册文件"""
regcode = getreg()
regreg = reg(regcode)
# 构建验证数据
valid_data = f"{regcode}-{regreg}"
# 用私钥加密(注意:这里使用公钥加密,私钥解密)
encrypted = private_key.public_key().encrypt(
valid_data.encode(),
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA1()),
algorithm=hashes.SHA1(),
label=None
)
)
# 保存到本地文件
with open('regcode.bin', 'wb') as f:
f.write(encrypted)
print(f"[本地注册] 已生成注册文件 regcode.bin")
print(f"[本地注册] 机器码: {regcode}")
print(f"[本地注册] 验证码: {regreg}")
return True
def checkreg(data):
"""修改后的验证函数,支持本地验证"""
# 第一步:本地注册码格式验证
if data != reg(getreg()):
return 1
# 第二步:尝试本地验证文件
local_reg_file = 'regcode.bin'
# 如果本地注册文件不存在,尝试创建
if not os.path.exists(local_reg_file):
print("[验证] 本地注册文件不存在,正在生成...")
create_local_regfile()
# 读取并验证本地注册文件
try:
with open(local_reg_file, 'rb') as f:
encrypted_data = f.read()
# 解密验证数据
decrypted = private_key.decrypt(
encrypted_data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA1()),
algorithm=hashes.SHA1(),
label=None
)
)
data_str = decrypted.decode()
regcode = getreg()
regreg = reg(regcode)
# 验证格式:机器码-验证码
parts = data_str.split('-')
if len(parts) == 2:
if parts[0] == regcode and parts[1] == regreg:
print("[验证] 本地验证成功!")
return 0
else:
print(f"[验证] 验证失败:机器码不匹配")
print(f" 期望: {regcode}-{regreg}")
print(f" 实际: {data_str}")
else:
print(f"[验证] 验证文件格式错误")
except Exception as e:
print(f"[验证] 读取本地验证文件失败: {e}")
# 如果验证失败,重新生成注册文件
print("[验证] 正在重新生成注册文件...")
create_local_regfile()
# 递归调用自己重新验证
return checkreg(data)
# 第三步:如果本地验证失败,尝试网络验证(可选)
try:
print("[验证] 尝试网络验证...")
r = requests.get('http://localhost:8000/regcode.bin', timeout=2)
if r.status_code == 200:
# 保存网络获取的验证文件
with open(local_reg_file, 'wb') as f:
f.write(r.content)
# 重新验证
return checkreg(data)
except:
pass
return 5
# 添加一个辅助函数,用于显示当前机器的注册信息
def show_reg_info():
"""显示当前机器的注册信息"""
regcode = getreg()
regreg = reg(regcode)
print("=" * 50)
print("当前机器注册信息:")
print(f"机器码: {regcode}")
print(f"验证码: {regreg}")
print(f"完整注册码: {regcode}-{regreg}")
print("=" * 50)
return regcode, regreg
# 如果直接运行此脚本,显示注册信息并生成本地注册文件
if __name__ == '__main__':
show_reg_info()
create_local_regfile()
print("\n[完成] 本地验证系统已设置成功!") |