用Python开发一个注册机

  1. 思路分析

    • 需求分析:
      (1).我有代码不想给别人看,为什么不想,因为价值高,当然大部分时候是代码烂,大家都懂;
      (2).有无良老板喜欢作,被逼无奈;
      (3).有同行不讲武德,抄代码我没意见,还把我踢出群聊再抄让人难以忍受;
      (4).就是为了用python实现一下,虽然我不是很赞成这种做法,但是技术可以研究.

    • 实现思路:
      (1).就按常规的活路来,搞一机一码,直接绑定电脑唯一硬件码;
      (2).怎么生成电脑唯一硬件码,啥玩意不会随便变更,重装系统都不会;
      (3).硬盘分区C盘是个不错的选择,就选它了;
      (4).硬件码怎么生成有了,再加个唯一识别码组合成机器码,唯一硬件码有了;
      (5).硬件码有了,再找个搭档(注册码)握下手就OK了;
      (6).将所有的信息核对都以读写注册表的方式完成;
      (7),所有的信息都用utf8转码再加个md5转换,差不多可以了,
      (8),最后再将源码打个包加个密装个壳可以了,我这里就不装壳了.

    • 实现效果:
      让用户可以试用并且可以自行注册(有生成器的情况下)

  2. 代码实现

    • 注册机代码编写,自动生成机器码,并验证注册码
      在这里插入图片描述
      我们将一些信息写在自定义的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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值