吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3044|回复: 27
收起左侧

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

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

源码:
[Python] 纯文本查看 复制代码
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()[0].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[0]
        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()[0].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()[0].ProcessorId.strip()
    except:
        decryptString=''
    return decryptString



使用办法:
AUTHOR='52pj'是个人自设字符串
KEYFILENAME='./RegisterKey.key'是生成key文件的摘要

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

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



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

免费评分

参与人数 13吾爱币 +17 热心值 +10 收起 理由
PJ240313 + 1 我很赞同!
q1730780948 + 1 我很赞同!
DiGua3 + 1 用心讨论,共获提升!
PanHuang + 1 用心讨论,共获提升!
gmc333 + 1 热心回复!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
RainPPR + 2 + 1 我很赞同!
burning + 1 + 1 鼓励转贴优秀软件安全工具和文档!
lxq8432 + 2 + 1 谢谢@Thanks!
知心 + 1 + 1 热心回复!
chenhaifengpla + 1 谢谢@Thanks!
weikun444 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
bohong65 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lvbuqing 发表于 2023-8-27 14:30
AUTHOR别写死啊,没啥用,还不如直接存在RegisterKey.key
==========


[Asm] 纯文本查看 复制代码

def GetKeyFromFile(index):
    try:
        f=open(KEYFILENAME,'r')
        lines=f.readlines()
        keyString=lines[index]
        return keyString
    except:
        return ''




第一行 GetKeyFromFile(0)  这个是key
第二行 GetKeyFromFile(1)  这个是 AUTHOR


[Asm] 纯文本查看 复制代码

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



[Asm] 纯文本查看 复制代码
def GetLocalMachineEncrypedString(AUTHOR):
    try:
        c = wmi.WMI()
        decryptString = c.win32_Processor()[0].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



免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
liyitong + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

52bojie 发表于 2023-8-27 10:51
yu520 发表于 2023-8-27 11:07
Reclusere 发表于 2023-8-27 11:32
个人使用足足的够了 ,刚刚还在想为什么不适用注册码机制+绑定硬件信息
a2523188267 发表于 2023-8-27 11:53
应该挺好的,至少挡30%的小白了吧
 楼主| ccber 发表于 2023-8-27 12:02
Reclusere 发表于 2023-8-27 11:32
个人使用足足的够了 ,刚刚还在想为什么不适用注册码机制+绑定硬件信息

那个还没有具体去研究。我也是小白,就靠自己的思路想一下。
apull 发表于 2023-8-27 12:12
学习了,这方法可以。
zhang7069 发表于 2023-8-27 12:19
不求功能太多,够用就好,楼主加油!
sailor0712 发表于 2023-8-27 13:16
学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 23:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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