吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 542|回复: 2
收起左侧

[CrackMe] 一个Python CM

[复制链接]
lccccccc 发表于 2026-4-18 17:38
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

自己写的Python+PyQt5写的软件序列码破解,无壳

提示:有网络验证的,如果错误码是2,就表明网络请求出错

https://wwbwo.lanzouu.com/i18ks3nki3mf








成功

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

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

qq465881818 发表于 2026-4-18 18:56
本帖最后由 qq465881818 于 2026-4-18 19:04 编辑

[Python] 纯文本查看 复制代码
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox
from mainui import Ui_MainWindow
import reglib
import pyperclip as pc

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        # 设置文本框内容为注册码
        self.edit1.setText(reglib.getreg())
        
        # 复制按钮的点击事件
        self.copy.clicked.connect(lambda: pc.copy(reglib.getreg()))
        
        # 检查注册按钮
        self.btn_checkreg.clicked.connect(self.okReg)
        
        # 初始检查注册状态(参数False)
        self.checkReg(False)
        
        # 另一个按钮(pushButton)的点击事件
        self.pushButton.clicked.connect(lambda: QMessageBox.information(
            self, '1', '你好', QMessageBox.Ok
        ))
    
    def okReg(self):
        # 获取输入的注册码
        self.code = self.edit2.text()
        # 验证注册
        self.checkReg()
    
    def resizeEvent(self, event):
        # 调整窗口控件大小
        self.widget.setGeometry(0, 0, self.width(), self.height())
        self.active_wid.setGeometry(0, 0, self.width() * self.act, self.height() * self.act)
    
    def checkReg(self, b=None):
        # 调用reglib的checkreg函数进行验证
        r = reglib.checkreg(self.code)
        # 根据验证结果显示不同的消息框
        if r:  # 假设验证成功
            QMessageBox.information(self, '激活', '激活成功', QMessageBox.Ok)
        else:  # 验证失败
            QMessageBox.critical(self, '错误', '注册码无效', QMessageBox.Ok)




[Python] 纯文本查看 复制代码
import hashlib
import winreg
import requests
import base64
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
k = 'LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBb2JWNWZIbHhsK01XemEwSjJXZFNnYS9lME9neDc4TDZ1WWlxRHIxUzh6ZnlncDdjClBxWnZNMHhacXRZd1grZkZBUlovNERKdFlkd0RmeXhSdXJMLzgxRG1HT3BQenZiRHJ1b0RhUElmSnpzcDgwSjIKS0JPbEhTY1dUc2k4WVBtT2NoQXAwZ1NSZS9zVzQ2Skdac1lJZ0dXQkRvWjl3NzIzVG95VGh2dGhuc3QyQk80egpJelZybkpyQ09vMHJXQ2JGY0UrTXI3WVhOdHh6dmdqNnRpMHNva3dZK1VNbnBBcno1QzJBY0N1VExEaHQvMEM2CmpmRy84ZldLQi9sWldVSGVHRFlIMEFaZjM3dy9aNlMyWW5icnRDTFRPK29NT3B5OVlnbXRpKzJCSDRzWXBwQlYKcmFCRVF5YmNOSzRmMmo2OGFaclAzTVlJOUZmUndLZ0IrR0c2UHdJREFRQUJBb0lCQUI2d3FHdmRTSmZBKzVUeApZRXNvZHRveUhLR2RUOHpuUGxweis0SnNvQStVOEt1bHByc2xMem1YSmZWc1RTWUdnTGNpSkFiU3l6dWxXK3lJCjVzSCtNdUZrMnlhallaNHY2eGVKUmpobXEwN3d4WmRyWjYxWGZTQzVTRnlQY0dFZk84K2VEYkhVT0NCRm1TUisKcWNuYmo4VitmaTNaaklqWHVyQm5zYUFPbVlwZldhcEk3UklDcnFsR05YUHRWcDlmcUxiOXNHU0hJZDRCKy8rNwp4UVJQb0MxMUlsMW1tTkYzVUdSd1pBN0k1NVo3MGZxbXNSdDY3MmRYeWdHaG9XcmFqWHBCc2l5RS9ibXZBaEhuCkk3OG5IZ2lJSnBldHdOYVBnTU9TTmhXTmpOQ1QrekpyNWRKdHpudGxQV25pc1EvcWkrUVM2TnY0V2FOUTA1TGYKVlpDYVFwRUNnWUVBd3FDTmNQZkNBK3JhSVh6WmlDN0NwZFlwZ3oyQjRsbjZDTzVJSEtaNWY0cGQ3amtZQVorYwpYT2l5WDBERVlJcTFNVHN6NDgyTlpKcnlFN3Q2NXNHS1dqdWVTemlKRHc4NlI0ZjJ1dkZFdWVvczJlbXZ6b1FtCmZXZGQ4cjArejZzdEM5QWhKY2Rta2cwSzZ6elNEQ3ZONndpRExiSHdNRDlUa2piUkhhK1F3NnNDZ1lFQTFMT1EKejNKTXA5N0VwYU1DMDI2L044c1ZvQVVyZUxnV001MitZZE9Cc1ZvdGV5eW9Vd0lxVFNPUEN2azJGTXlxTmRjdApmSzVIWm5MUTRuMThuV1MzRGpLa2tqQXZRMndYMmlKc1NwaEl4T3E1UmxmSERaWGFWWHhtZFI4SzJpbk5mSGR5CkwrU0JEbHByOHFIOU1jMFRMR0ZudUVFZkZlelRYalpCNk5yZXo3MENnWUJxZ3ljay9kSkdCbzhkNkkrOEFhc3cKeXNXcE4wNFByQ0kwSlFOOStuVmZvVC9La2FCYnN4Z0ZtS3VWaVlKdk96bnlHVzVLYTBISUh5d0FOSWdNSlRzcwpLcGgwbmhvVURjZGRRa0Y3Q1hNTk0rVWIxTklMK1RKL1NzU1ZoWkFNWXFlaVlXTGlvLyswU2tNQmZpV04xNk0zCnowN0xBU2hybnh5RFZsQ1hLRy9YUlFLQmdBZlFzVGx1RWJMNVZIQmhsUEQvMkxiTUYzZFJ1VTh1TkdLaElTV24KQjlUa1kxZHJSS1FJS0ZXOVFMdytlK1kzdnVsTGhyaFdEdm1Ncm5Bai9EZ3NReTJhWHNHZ1U1dytsSUhIVWdOTApwU0RYSHdlZW9nbTF2OWYwUWk5N2ZJS1hscDFFSmtYc04zRzNrTS9SYytRb2pOUE1vR3I4dVkrc3EvZUNOdG0vCmNRQmhBb0dBTEZoSjd1eDAzYXQrKzV4dENsaTlONG9IV3JSRlBIUHNzS1BVWWt1Vmlkd1BjK2gxQlFseVhPRnkKaWNTUU92ZFhxd2ZmcjZSdW1sZTdYaytUL2puNkVTTTNHSUgrajRTeVpucytBMnVmWnNsRU9aaldxcnRmeUsxdwo3OG0zMzZMbkNwekI1YmRsVkR3ZUZjbVRZNDkzYW5JRldnMTBFanByT3c1aFN6cmM5K1E9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t'
private_key = serialization.load_pem_private_key(base64.b64decode(k), password=None)
def get_machine_guid():
    key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Cryptography')
    value, _ = winreg.QueryValueEx(key, 'MachineGuid')
    return value
def interleave_string(s: str) -> str:
    return s[3::5] + s[1::5] + s[4::5] + s[2::5] + s[::5]
def reg(data):
    return interleave_string(hashlib.sha512(data.encode('utf-8')).hexdigest())[:50].upper()
def getreg():
    return reg(interleave_string(get_machine_guid()))
def checkreg(data):
    if data!= reg(getreg()):
        return 1
    else:
        try:
            r = requests.get('https://lh11117.github.io/api/regcode.bin')
        except:
            return 2
        if r.status_code!= 200:
            return 3
        else:
            f = r.content
            try:
                decrypted = private_key.decrypt(f, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None))
            except:
                return 4
            data = decrypted.decode()
            regcode = getreg()
            regreg = reg(regcode)
            for x in data.split('|'):
                y = x.split('-')
                if len(y)!= 2:
                    continue
                else:
                    if y[0] == regcode and y[1] == regreg:
                            return 0
            return 5










[Python] 纯文本查看 复制代码
import hashlib
import winreg
import requests
import base64
import os
import json
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding

k = 'LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBb2JWNWZIbHhsK01XemEwSjJXZFNnYS9lME9neDc4TDZ1WWlxRHIxUzh6ZnlncDdjClBxWnZNMHhacXRZd1grZkZBUlovNERKdFlkd0RmeXhSdXJMLzgxRG1HT3BQenZiRHJ1b0RhUElmSnpzcDgwSjIKS0JPbEhTY1dUc2k4WVBtT2NoQXAwZ1NSZS9zVzQ2Skdac1lJZ0dXQkRvWjl3NzIzVG95VGh2dGhuc3QyQk80egpJelZybkpyQ09vMHJXQ2JGY0UrTXI3WVhOdHh6dmdqNnRpMHNva3dZK1VNbnBBcno1QzJBY0N1VExEaHQvMEM2CmpmRy84ZldLQi9sWldVSGVHRFlIMEFaZjM3dy9aNlMyWW5icnRDTFRPK29NT3B5OVlnbXRpKzJCSDRzWXBwQlYKcmFCRVF5YmNOSzRmMmo2OGFaclAzTVlJOUZmUndLZ0IrR0c2UHdJREFRQUJBb0lCQUI2d3FHdmRTSmZBKzVUeApZRXNvZHRveUhLR2RUOHpuUGxweis0SnNvQStVOEt1bHByc2xMem1YSmZWc1RTWUdnTGNpSkFiU3l6dWxXK3lJCjVzSCtNdUZrMnlhallaNHY2eGVKUmpobXEwN3d4WmRyWjYxWGZTQzVTRnlQY0dFZk84K2VEYkhVT0NCRm1TUisKcWNuYmo4VitmaTNaaklqWHVyQm5zYUFPbVlwZldhcEk3UklDcnFsR05YUHRWcDlmcUxiOXNHU0hJZDRCKy8rNwp4UVJQb0MxMUlsMW1tTkYzVUdSd1pBN0k1NVo3MGZxbXNSdDY3MmRYeWdHaG9XcmFqWHBCc2l5RS9ibXZBaEhuCkk3OG5IZ2lJSnBldHdOYVBnTU9TTmhXTmpOQ1QrekpyNWRKdHpudGxQV25pc1EvcWkrUVM2TnY0V2FOUTA1TGYKVlpDYVFwRUNnWUVBd3FDTmNQZkNBK3JhSVh6WmlDN0NwZFlwZ3oyQjRsbjZDTzVJSEtaNWY0cGQ3amtZQVorYwpYT2l5WDBERVlJcTFNVHN6NDgyTlpKcnlFN3Q2NXNHS1dqdWVTemlKRHc4NlI0ZjJ1dkZFdWVvczJlbXZ6b1FtCmZXZGQ4cjArejZzdEM5QWhKY2Rta2cwSzZ6elNEQ3ZONndpRExiSHdNRDlUa2piUkhhK1F3NnNDZ1lFQTFMT1EKejNKTXA5N0VwYU1DMDI2L044c1ZvQVVyZUxnV001MitZZE9Cc1ZvdGV5eW9Vd0lxVFNPUEN2azJGTXlxTmRjdApmSzVIWm5MUTRuMThuV1MzRGpLa2tqQXZRMndYMmlKc1NwaEl4T3E1UmxmSERaWGFWWHhtZFI4SzJpbk5mSGR5CkwrU0JEbHByOHFIOU1jMFRMR0ZudUVFZkZlelRYalpCNk5yZXo3MENnWUJxZ3ljay9kSkdCbzhkNkkrOEFhc3cKeXNXcE4wNFByQ0kwSlFOOStuVmZvVC9La2FCYnN4Z0ZtS3VWaVlKdk96bnlHVzVLYTBISUh5d0FOSWdNSlRzcwpLcGgwbmhvVURjZGRRa0Y3Q1hNTk0rVWIxTklMK1RKL1NzU1ZoWkFNWXFlaVlXTGlvLyswU2tNQmZpV04xNk0zCnowN0xBU2hybnh5RFZsQ1hLRy9YUlFLQmdBZlFzVGx1RWJMNVZIQmhsUEQvMkxiTUYzZFJ1VTh1TkdLaElTV24KQjlUa1kxZHJSS1FJS0ZXOVFMdytlK1kzdnVsTGhyaFdEdm1Ncm5Bai9EZ3NReTJhWHNHZ1U1dytsSUhIVWdOTApwU0RYSHdlZW9nbTF2OWYwUWk5N2ZJS1hscDFFSmtYc04zRzNrTS9SYytRb2pOUE1vR3I4dVkrc3EvZUNOdG0vCmNRQmhBb0dBTEZoSjd1eDAzYXQrKzV4dENsaTlONG9IV3JSRlBIUHNzS1BVWWt1Vmlkd1BjK2gxQlFseVhPRnkKaWNTUU92ZFhxd2ZmcjZSdW1sZTdYaytUL2puNkVTTTNHSUgrajRTeVpucytBMnVmWnNsRU9aaldxcnRmeUsxdwo3OG0zMzZMbkNwekI1YmRsVkR3ZUZjbVRZNDkzYW5JRldnMTBFanByT3c1aFN6cmM5K1E9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t'
private_key = serialization.load_pem_private_key(base64.b64decode(k), password=None)

def get_machine_guid():
    key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Cryptography')
    value, _ = winreg.QueryValueEx(key, 'MachineGuid')
    return value

def interleave_string(s: str) -> str:
    return s[3::5] + s[1::5] + s[4::5] + s[2::5] + s[::5]

def reg(data):
    return interleave_string(hashlib.sha512(data.encode('utf-8')).hexdigest())[:50].upper()

def getreg():
    return reg(interleave_string(get_machine_guid()))

def create_local_regfile():
    """生成本地注册文件"""
    regcode = getreg()
    regreg = reg(regcode)
    
    # 构建验证数据
    valid_data = f"{regcode}-{regreg}"
    
    # 用私钥加密(注意:这里使用公钥加密,私钥解密)
    encrypted = private_key.public_key().encrypt(
        valid_data.encode(),
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA1()),
            algorithm=hashes.SHA1(),
            label=None
        )
    )
    
    # 保存到本地文件
    with open('regcode.bin', 'wb') as f:
        f.write(encrypted)
    
    print(f"[本地注册] 已生成注册文件 regcode.bin")
    print(f"[本地注册] 机器码: {regcode}")
    print(f"[本地注册] 验证码: {regreg}")
    return True

def checkreg(data):
    """修改后的验证函数,支持本地验证"""
    
    # 第一步:本地注册码格式验证
    if data != reg(getreg()):
        return 1
    
    # 第二步:尝试本地验证文件
    local_reg_file = 'regcode.bin'
    
    # 如果本地注册文件不存在,尝试创建
    if not os.path.exists(local_reg_file):
        print("[验证] 本地注册文件不存在,正在生成...")
        create_local_regfile()
    
    # 读取并验证本地注册文件
    try:
        with open(local_reg_file, 'rb') as f:
            encrypted_data = f.read()
        
        # 解密验证数据
        decrypted = private_key.decrypt(
            encrypted_data, 
            padding.OAEP(
                mgf=padding.MGF1(algorithm=hashes.SHA1()),
                algorithm=hashes.SHA1(),
                label=None
            )
        )
        
        data_str = decrypted.decode()
        regcode = getreg()
        regreg = reg(regcode)
        
        # 验证格式:机器码-验证码
        parts = data_str.split('-')
        if len(parts) == 2:
            if parts[0] == regcode and parts[1] == regreg:
                print("[验证] 本地验证成功!")
                return 0
            else:
                print(f"[验证] 验证失败:机器码不匹配")
                print(f"  期望: {regcode}-{regreg}")
                print(f"  实际: {data_str}")
        else:
            print(f"[验证] 验证文件格式错误")
            
    except Exception as e:
        print(f"[验证] 读取本地验证文件失败: {e}")
        # 如果验证失败,重新生成注册文件
        print("[验证] 正在重新生成注册文件...")
        create_local_regfile()
        # 递归调用自己重新验证
        return checkreg(data)
    
    # 第三步:如果本地验证失败,尝试网络验证(可选)
    try:
        print("[验证] 尝试网络验证...")
        r = requests.get('http://localhost:8000/regcode.bin', timeout=2)
        if r.status_code == 200:
            # 保存网络获取的验证文件
            with open(local_reg_file, 'wb') as f:
                f.write(r.content)
            # 重新验证
            return checkreg(data)
    except:
        pass
    
    return 5

# 添加一个辅助函数,用于显示当前机器的注册信息
def show_reg_info():
    """显示当前机器的注册信息"""
    regcode = getreg()
    regreg = reg(regcode)
    print("=" * 50)
    print("当前机器注册信息:")
    print(f"机器码: {regcode}")
    print(f"验证码: {regreg}")
    print(f"完整注册码: {regcode}-{regreg}")
    print("=" * 50)
    return regcode, regreg

# 如果直接运行此脚本,显示注册信息并生成本地注册文件
if __name__ == '__main__':
    show_reg_info()
    create_local_regfile()
    print("\n[完成] 本地验证系统已设置成功!")

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lccccccc + 1 + 1 用心讨论,共获提升!

查看全部评分

1346 发表于 2026-4-20 14:31
您可以看下我帖子和神奇的人鱼的破解思路贴学习一下,我也是一步一步学习加强python安全性的,目前的打包方式安全性极低,建议用nutika或cython打包~ 不然很容易反编译源码的,有源码再复杂的算法都没有用,直接源码调试了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-4-20 15:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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