-
思路分析
-
需求分析:
(1).我有代码不想给别人看,为什么不想,因为价值高,当然大部分时候是代码烂,大家都懂;
(2).有无良老板喜欢作,被逼无奈;
(3).有同行不讲武德,抄代码我没意见,还把我踢出群聊再抄让人难以忍受;
(4).就是为了用python实现一下,虽然我不是很赞成这种做法,但是技术可以研究. -
实现思路:
(1).就按常规的活路来,搞一机一码,直接绑定电脑唯一硬件码;
(2).怎么生成电脑唯一硬件码,啥玩意不会随便变更,重装系统都不会;
(3).硬盘分区C盘是个不错的选择,就选它了;
(4).硬件码怎么生成有了,再加个唯一识别码组合成机器码,唯一硬件码有了;
(5).硬件码有了,再找个搭档(注册码)握下手就OK了;
(6).将所有的信息核对都以读写注册表的方式完成;
(7),所有的信息都用utf8转码再加个md5转换,差不多可以了,
(8),最后再将源码打个包加个密装个壳可以了,我这里就不装壳了. -
实现效果:
让用户可以试用并且可以自行注册(有生成器的情况下)
-
-
代码实现
-
注册机代码编写,自动生成机器码,并验证注册码

我们将一些信息写在自定义的JSON里面,方便调整{ "作者信息": { "软件作者": "一阵寒风(Twei Tang)", "手机号码": "13627441202", "QQ号码": "1142729224/358143105", "邮箱地址": "tw358143105@sohu.com/358143105@qq.com", "作者主页": "https://blog.csdn.net/t358143105", "合作伙伴": [["启航自动化", "http://www.qhscript.com/"], ["起点CAM培训", "http://www.genesis2000.net/"]] }, "软件信息": { "图像路径": "f'{_dir_name}/img'", "帮助路径": "f'{_dir_name}/helps'", "程序路径": "f'{_dir_name}/program'", "日志路径": "f'{_dir_name}/logs'", "数据路径": "f'{_dir_name}/database'", "临时路径": "f'{_dir_name}/tmp'", "默认程式": "Genesis" } }注册机代码
#!/usr/bin/env python import io import os import sys import json import wmi import hashlib import win32api import win32con from PyQt5 import QtWidgets, QtGui, Qt from PyQt5.QtWidgets import QMessageBox, QInputDialog, QApplication, \ QLabel, QVBoxLayout, QLineEdit, QHBoxLayout, QDialogButtonBox, QDialog from PyQt5.QtGui import QPixmap, QIcon, QMovie # 开发日志 _header = { '程序名称': '注册机程序', '开发人员': '一阵寒风(Twei Tang)', '开发时间': '2022年03月17日', '版本信息': 'A.1.0', '联系方式': ( '邮箱地址<tw358143105@sohu.com', '微信号码<358143105>', '手机号码<13627441202>' ), '开发信息': ( '无' ), '修改信息': ( '初始版本(A.1.0),首次开发测试,暂无版本变更信息' ), '沟通记录': ( '无' ) } # 多栏位输入框 class MyInputDialog(QtWidgets.QDialog): def __init__(self, values, title='Setting Values:', parent=None): """ #~ >>>values={'String':'This is String','float':3.5,'int':15} #~ >>>title='QInputBox for Setting Values:' #~>>>dlg = QInputDialog(values=values,title=title) #~ >>>if ( dlg.exec_() == QtGui.QDialog.Accepted): RValues = dlg.GetModifiedValues() else: RValues = dlg.GetOriginValue() """ QtWidgets.QDialog.__init__(self, parent=parent) self.setWindowTitle(title) self.OriginValues = values.copy() self.ModifiedValues = values.copy() self.vbox = QVBoxLayout() cnt = 0 for key in self.ModifiedValues: keyStr = str(key) label = keyStr + ' :' KeyLabel = QLabel(label) ValueLineEdit = QLineEdit(str(self.ModifiedValues[key])) # ~ #为件控设置一个名字,方便使用函数findchild()查找 ValueLineEdit.setObjectName('VLE' + str(cnt)) h_box = QHBoxLayout() h_box.addWidget(KeyLabel) h_box.addWidget(ValueLineEdit) self.vbox.addLayout(h_box) cnt += 1 self.btn_OK = QDialogButtonBox(QDialogButtonBox.Ok) self.btn_Cancel = QDialogButtonBox(QDialogButtonBox.Cancel) self.btn_OK.clicked.connect(self.accept) self.btn_Cancel.clicked.connect(self.reject) h_box = QHBoxLayout() h_box.addWidget(self.btn_OK) h_box.addWidget(self.btn_Cancel) self.vbox.addLayout(h_box) self.setLayout(self.vbox) def GetOriginValue(self): """ #~ if the user click btn_Cancel,then return OriginValues """ return self.OriginValues def GetModifiedValues(self): """ #~ if the user click btn_OK,then return self.ModifiedValues """ cnt = 0 for key in self.ModifiedValues: VLEObjectName = 'VLE' + str(cnt) VLE = self.findChild(QLineEdit, VLEObjectName) cnt += 1 ovk = self.ModifiedValues[key] if type(ovk) == int: self.ModifiedValues[key] = int(VLE.text()) elif type(ovk) == float: self.ModifiedValues[key] = float(VLE.text()) else: self.ModifiedValues[key] = str(VLE.text()) return self.ModifiedValues if __name__ == "__main__": app = QApplication(sys.argv) _images_path = '你放置资源图片的路径' _config = '你的系统配置.json' try: fil = io.open(_config, 'r', encoding='utf-8') except BaseException as E: print(E) _dict = json.load(fil) _str = ''.join([f'<br/>合作伙伴: <a href=\"{ k[1]}\">{ k[0]}</a>' for k in _dict['作者信息']['合作伙伴']]) _get_id = wmi.WMI() CVolumeSerialNumber = str(win32api.GetVolumeInformation("C:\\")[1]) CVolumeSerialNumber += _get_id.Win32_Processor()[0].ProcessorId.strip() CVolumeSerialNumber += _get_id.Win32_BaseBoard()[0].qualifiers['UUID'][1:-1] _m = hashlib.md5() _m.update(CVolumeSerialNumber.encode(encoding='utf-8')) regedit_id = _m.hexdigest() CVolumeSerialNumbers = regedit_id + '我是你爸爸' m1 = hashlib.md5() m1.update(CVolumeSerialNumbers.encode(encoding='utf-8')) regedit_number = m1.hexdigest() _keys = None _key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, 'Software', 0, win32con.KEY_ALL_ACCESS) size = win32api.RegQueryInfoKey(_key)[0] result = False for i in range(size): try: if win32api.RegEnumKey(_key, i) != 'coolwindprogram': continue else: result =
-
用Python开发一个注册机
于 2024-11-26 11:57:34 首次发布

5564

被折叠的 条评论
为什么被折叠?



