让自己的程序拥有自己的注册文件,防止在别人的机器使用
场景:有时候自己编写的程序不想被别人带走使用,想着自己的成果在自己的电脑上使用。
原理:
生成一个依据CPU序列号和本人自设字符串共同加密的摘要,保存key文件在本地。每次运行自己的程序时检验key文件的摘要和本地机器运算的摘要是否一致,不一致就认为不是你允许的计算机而退出程序。
源码:
import wmi
import hashlib
import os
AUTHOR='52pj'
KEYFILENAME='./RegisterKey.key'
#获取CPU的序列号加上Author字段,MD5一次,再在结果加上Author字段再MD5一次,形成最终的比较密码
def GetLocalMachineEncrypedString():
try:
c = wmi.WMI()
decryptString = c.win32_Processor().ProcessorId.strip() + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
decryptString = encrypedString + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
except:
encrypedString = hashlib.md5(AUTHOR.encode('utf-8')).hexdigest()
return encrypedString
#文件中储存的Key是CPU序列号加Author,一次MD5结果
def GetKeyFromFile():
try:
f=open(KEYFILENAME,'r')
lines=f.readlines()
keyString=lines
return keyString
except:
return ''
#把文件的key加上author,做最后一次MD5生成最终结果
def CheckIsRegistered():
decryptString=GetKeyFromFile()+AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
if encrypedString==GetLocalMachineEncrypedString():
return True
else:
return False
#生成key文件
def BuildRegisterKey():
try:
c = wmi.WMI()
decryptString = c.win32_Processor().ProcessorId.strip() + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
except:
encrypedString=''
try:
f=os.open(KEYFILENAME,os.O_CREAT|os.O_WRONLY)
os.write(f,encrypedString.encode('utf-8'))
print('写入', KEYFILENAME, '成功')
except:
print('写入',KEYFILENAME,'失败')
def BuildRegisterKey(decryptString):
if decryptString:
decryptString = decryptString + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
else:
encrypedString=''
try:
f=os.open(KEYFILENAME,os.O_CREAT|os.O_WRONLY)
os.write(f,encrypedString.encode('utf-8'))
print('写入', KEYFILENAME, '成功')
except:
print('写入',KEYFILENAME,'失败')
def ShowCPUSerialNumber():
try:
c = wmi.WMI()
decryptString = c.win32_Processor().ProcessorId.strip()
except:
decryptString=''
return decryptString
使用办法:
AUTHOR='52pj'是个人自设字符串
KEYFILENAME='./RegisterKey.key'是生成key文件的摘要
生成文件的调用方法:
BuildRegisterKey()
验证key的调用发放:
BuildRegisterKey()
总结:感觉100%能实现自己的目标要求,能否防住你周围90%的人员使用你的程序,pj大侠估计很容易就绕开了。聊胜于无,能够满足自己的要求即可,第一次在52pj发源码,请大家给个评价,帮助提升。 AUTHOR别写死啊,没啥用,还不如直接存在RegisterKey.key
==========
def GetKeyFromFile(index):
try:
f=open(KEYFILENAME,'r')
lines=f.readlines()
keyString=lines
return keyString
except:
return ''
第一行 GetKeyFromFile(0)这个是key
第二行 GetKeyFromFile(1)这个是 AUTHOR
def CheckIsRegistered():
decryptString=GetKeyFromFile(0)+GetKeyFromFile(1)
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
if encrypedString==GetLocalMachineEncrypedString(GetKeyFromFile(1)):
return True
else:
return False
def GetLocalMachineEncrypedString(AUTHOR):
try:
c = wmi.WMI()
decryptString = c.win32_Processor().ProcessorId.strip() + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
decryptString = encrypedString + AUTHOR
encrypedString = hashlib.md5(decryptString.encode('utf-8')).hexdigest()
except:
encrypedString = hashlib.md5(AUTHOR.encode('utf-8')).hexdigest()
return encrypedString
学习了,谢谢分享 这是根据什么原理 个人使用足足的够了 ,刚刚还在想为什么不适用注册码机制+绑定硬件信息 应该挺好的,至少挡30%的小白了吧 Reclusere 发表于 2023-8-27 11:32
个人使用足足的够了 ,刚刚还在想为什么不适用注册码机制+绑定硬件信息
那个还没有具体去研究。我也是小白,就靠自己的思路想一下。 学习了,这方法可以。 不求功能太多,够用就好,楼主加油! 学习学习