查看: 391|回复: 2

让自己的程序拥有自己的注册文件,防止在别人的机器使用

[复制链接]
发表于 2023-8-27 13:01 | 显示全部楼层 |阅读模式
gass123 2023-8-27 13:01 391 2 显示全部楼层
场景:
有时候自己编写的程序不想被别人带走使用,想着自己的成果在自己的电脑上使用。
原理:
生成一个依据CPU序列号和本人自设字符串共同加密的摘要,保存key文件在本地。每次运行自己的程序时检验key文件的摘要和本地机器运算的摘要是否一致,不一致就认为不是你允许的计算机而退出程序。

源码:
  1. import wmi
  2. import hashlib
  3. import os

  4. AUTHOR='52pj'
  5. KEYFILENAME='./RegisterKey.key'

  6. #获取CPU的序列号加上Author字段,MD5一次,再在结果加上Author字段再MD5一次,形成最终的比较密码
  7. def GetLocalMachineEncrypedString():
  8.     try:
  9.         c = wmi.WMI()
  10.         decryptString = c.win32_Processor()[0].ProcessorId.strip() + AUTHOR
  11.         encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
  12.         decryptString = encrypedString + AUTHOR
  13.         encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
  14.     except:
  15.         encrypedString = hashlib.md5(AUTHOR.encode('utf-8')).hexdigest()
  16.     return encrypedString

  17. #文件中储存的Key是CPU序列号加Author,一次MD5结果
  18. def GetKeyFromFile():
  19.     try:
  20.         f=open(KEYFILENAME,'r')
  21.         lines=f.readlines()
  22.         keyString=lines[0]
  23.         return keyString
  24.     except:
  25.         return ''

  26. #把文件的key加上author,做最后一次MD5生成最终结果
  27. def CheckIsRegistered():
  28.     decryptString=GetKeyFromFile()+AUTHOR
  29.     encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
  30.     if encrypedString==GetLocalMachineEncrypedString():
  31.         return True
  32.     else:
  33.         return False

  34. #生成key文件
  35. def BuildRegisterKey():
  36.     try:
  37.         c = wmi.WMI()
  38.         decryptString = c.win32_Processor()[0].ProcessorId.strip() + AUTHOR
  39.         encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
  40.     except:
  41.         encrypedString=''

  42.     try:
  43.         f=os.open(KEYFILENAME,os.O_CREAT|os.O_WRONLY)
  44.         os.write(f,encrypedString.encode('utf-8'))
  45.         print('写入', KEYFILENAME, '成功')
  46.     except:
  47.         print('写入',KEYFILENAME,'失败')

  48. def BuildRegisterKey(decryptString):
  49.     if decryptString:
  50.         decryptString = decryptString + AUTHOR
  51.         encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
  52.     else:
  53.         encrypedString=''

  54.     try:
  55.         f=os.open(KEYFILENAME,os.O_CREAT|os.O_WRONLY)
  56.         os.write(f,encrypedString.encode('utf-8'))
  57.         print('写入', KEYFILENAME, '成功')
  58.     except:
  59.         print('写入',KEYFILENAME,'失败')

  60. def ShowCPUSerialNumber():
  61.     try:
  62.         c = wmi.WMI()
  63.         decryptString = c.win32_Processor()[0].ProcessorId.strip()
  64.     except:
  65.         decryptString=''
  66.     return decryptString
复制代码
使用办法:
AUTHOR='52pj'是个人自设字符串
KEYFILENAME='./RegisterKey.key'是生成key文件的摘要

生成文件的调用方法:
BuildRegisterKey()

验证key的调用发放:
BuildRegisterKey()



总结:感觉100%能实现自己的目标要求,能否防住你周围90%的人员使用你的程序,pj大侠估计很容易就绕开了。聊胜于无,能够满足自己的要求即可,第一次在52pj发源码,请大家给个评价,帮助提升。

发表于 2023-8-28 22:39 | 显示全部楼层
pstno2 2023-8-28 22:39 显示全部楼层
签到顶贴6666
回复

使用道具 举报

发表于 2023-8-29 08:58 | 显示全部楼层
老好用了谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

快速回复 返回顶部 返回列表