吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1485|回复: 12
上一主题 下一主题
收起左侧

[原创] 一款桌宠软件的验证算法分析

[复制链接]
跳转到指定楼层
楼主
luyutao 发表于 2026-6-17 12:21 回帖奖励
本帖最后由 luyutao 于 2026-6-18 15:12 编辑

前几天笔者的好朋友买了款纳西妲桌宠,我也受他推荐买了款可莉桌宠。






桌宠下载后打开发现有验证要求。看到左边那根小羽毛感觉是python程序。输入激活码后可以用。本着想让虚拟机也能用的想法(硬件不同,激活码不通用),我准备拿它练练手。

先查一下壳,验证了开始想法,本软件为使用PyInstaller打包的Python文件。

准备PyInstaller脱壳工具pyinstxtractor-ng,我用的是网页版PyInstaller Extractor WEB

将下载好的压缩包解压,发现了一个gsi.exe。我用winrar打开发现是一个自解压程序,判断这是桌宠本体。(本体内容后面会写,暂时不管他)


观察可得核心文件为encoderGod.pyc,接下来就可以使用pyc反编译工具得到源代码。该软件验证部分是python3.13写的。我用pycdc失败了,后用了在线的反编译工具pylingual,但是出现了compilation error


反正大部分可以看了,先保存下来吧。




我让ai改了下错误,获得下面的部分代码

def get_machine_code():
    cpu_info = str(platform.processor()) + str(psutil.cpu_count(logical=False)) + str(psutil.cpu_count(logical=True))
    mainboard_serial_number = get_mainboard_serial_number()
    machine_code = cpu_info + mainboard_serial_number
    return machine_code
def generate_user(machine_code):
    pre_key = 'hy'
    end_key = 'a'
    machine_code = pre_key + machine_code + end_key
    return hashlib.md5(machine_code.encode()).hexdigest()
def generate_key(machine_code):
    no_key = '可莉112'
    machine_code = machine_code + no_key
    return hashlib.md5(machine_code.encode()).hexdigest()

原理不复杂,先把cpu型号,物理核心数,逻辑核心数转为字符串加在一起,然后获得主板序列号,拼在最后面生成机器码
机器码前面拼接hy,后面拼接a,做md5,生成验证用码
验证用码加盐再md5就是激活码。(盐是每个型号桌宠名字和序号)
def verify_key(auto=False):
    user_key = key_entry.get()
    machine_code = get_machine_code()
    machine_code = generate_user(machine_code)
    current_key = generate_key(machine_code)
    if user_key == current_key:
        messagebox.showinfo('激活成功', '点击确认启动,感谢支持') or auto
        save_data()
        app.withdraw()
        try:
            current_dir = os.path.dirname(__file__)
            exe_path = os.path.join(current_dir, 'gsl.exe')
            subprocess.run([exe_path], check=True, cwd=os.path.dirname(sys.executable), shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            app.destroy()
            sys.exit()
        except subprocess.CalledProcessError as e:
            print(f'Error running gsl.exe: {e}')
        except FileNotFoundError:
            print('gsl.exe not found.')
    else:
        messagebox.showerror(current_key, '激活码错误,请重试') if not auto else None

这是判断部分代码,如果激活码正确就启动自解压主程序,然后退出激活程序,错误就弹窗通知
代码分析结束,可以写出keygen

import hashlib

user_id = input("youruserid")
key = hashlib.md5((user_id + '可莉112').encode()).hexdigest()
print(f'用户ID: {user_id}')
print(f'激活码: {key}')


测试成功,软件根目录生成了存放注册码的txt,删除该文件后,软件重回未注册状态。

总结:本次简单的展示了通过逆向软件内置算法计算注册码的分析流程,得益于软件能够轻松被脱壳和逆向,我们很容易就能看到软件的源代码,从而解析出其自带的授权码算法。其实脱壳后拿到自解压本体程序就足够用了(可以解压到c盘,不用每次运行在临时目录中)。购买后一开始如果不知道激活码算法可以分析其授权文件来猜测
附录:桌宠本体是开源软件bongo cat,加上可莉live2d模型

bongocat官网https://bongocat.com.cn/

这个桌宠为付费软件(live2d模型为作者制作)
下载链接:https://wwbah.lanzoul.com/iP3rh3sa9zcd密码:bnkd










免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
13388157215 + 1 + 1 用心讨论,共获提升!

查看全部评分

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

推荐
dork 发表于 2026-6-18 09:19
有官网,还是免费的,怎么就成收费的 了?https://bongocat.com.cn/
另外,https://github.com/MMmmmoko/Bongo-Cat-Mver/releases也有开源的

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
前进的小白 + 1 + 1 谢谢@Thanks!

查看全部评分

推荐
gtjdoctor 发表于 2026-6-17 16:50
4#
不苦小和尚 发表于 2026-6-17 16:50
解包以后就没啥问题了,交给ai直接就可以写注册算法了
5#
lnshijia 发表于 2026-6-17 17:02
这个不错,我试试看看
6#
康定先生 发表于 2026-6-17 18:08
QAQ该怎么使用啊,太难了
7#
博爵 发表于 2026-6-17 21:40
这个不是开源那个小猫咪桌面显示吗,作者添加个模型,加个验证就可以收费了
8#
孤狼微博 发表于 2026-6-17 22:02
不发下载地址还不如不发
9#
daoye9988 发表于 2026-6-18 07:58
空闲的时候玩玩桌宠
10#
gunxsword 发表于 2026-6-18 09:11
桌宠不方便发,两个网站也不方便吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-7-10 17:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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