吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1926|回复: 37
收起左侧

[Python 原创] 用AI写的python版的Charles proxy的注册码计算器

  [复制链接]
hhyyqq 发表于 2025-3-25 20:42
       Charles是一个常用的抓包工具,虽然这个软件有30天的免费使用期,而且过期后也只是限制连续使用时间不超过30分钟(这个只是听说,没试过),但终究还是不方便,如果能够注册当然是最理想的。但是,原来常用的charles的在线注册网站已经挂了,模样还在,点啥都不反应了,如图1。

图1

图1

图1


而且有一个开源的charles激活码计算工具也被作者删除了,见图2。

图2

图2

图2

    幸好笔者找到曾经下载过一个激活码的计算器,不知道是哪个大佬用go语言写的,随便找了个在线go平台试了下,惊喜地发现,它算出的注册码在最新的charles版本上都能用。转念想到运行go语言的环境可能很多计算机都没有,不如把它转成python的,这样适用性就强些,于是,决定让ai帮我把go语言转成python语言,本来以为这件事对ai来说是件非常简单的事,哪里想到会一波三折,把ai转换过程记录下来,就有了这篇文章。

    先用了github上的deepseek-r1模型,图3和图4是与deepseek-r1的对话,图3是我的要求,图4是deepseek-r1的回答。

图3

图3

图3

图4

图4

图4

  这段代码执行算出的结果见图5。

图5

图5

图5

  从charles官网上下载的最版是5.0,安装好后在help-Enter Charles license…选项的弹出对话框中输入了python 版代码算出的key值,如图6。

图6

图6

图6

  然而charles的回应是key无效,如图7所示。

图7

图7

图7

  调试了几个版本都是无效的key,看来这个模型的算法并没有真正还原go语言的原始算法。那么,我们换个AI模型再试试,这回选了据称是最聪明的grok3模型,并且把提示词改了一下,一些要求更具体,如图8,和图9所示。

图8

图8

图8

图9

图9

图9

  调试了几次,能够计算出来key值,输入到charles里还是无效的key,如图10所示,说明这个最聪明的AI也没有能完全复刻go代码中key的算法。
10.jpg
图10

  还是回过头来找deepseek-r1模型,但这回换个部署在硅基流动的模型,提示词跟grok3的一样,见图11。

图11

图11

图11

  它的解答见图12。

图12

图12

图12

  运行时出错了,如图13:

图13

图13

图13

  当我把这个错误信息报给DeepSeek R1后,它长考了300多秒,给出了解答,如图14。

图14

图14

图14

  把它修改后的代码随意设置了name参数再运行后得到了key,把name和key输入到charles proxy的help-EnterCharles license…对话框后再点击Register得到的画面是图15啦。

图15

图15

图15

  这个信息框出现说明注册成功了。重启charles proxy后再看help-AboutCharles,注册信息如图16。

图16

图16

  至此,硅基流动的DeepSeek R1模型帮我从go 复刻出了完整、可用的python语言的最新版charles proxy的注册码算法。虽然人工把go转换到python也是可行的,但效率跟ai是不能比的,不得不说, 有ai的帮助,很多事情都可以高效完成。不过,网上部署的AI模型很多,大家都称自已的是满血模型,这次把go 转python的过程算是一个很简单的测试,号称满血的模型实际上也是有差别的,你也不知道在部署时是不是有阉割,只有多试几个才知道哪些是真正的满血或者说更聪明,我觉得是不是硅基流动模型的血更满些哦?至于号称最聪明的grok3,至少在这个测试中我没觉得它比硅基流动的DS聪明,以后提AI恐怕要有前缀或后缀了,说明是哪里部署的,要不然没得可比性啊。

charles_license.rar

2.61 KB, 下载次数: 155, 下载积分: 吾爱币 -1 CB

py原码

免费评分

参与人数 9吾爱币 +15 热心值 +8 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
riugduso + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Gentia + 1 谢谢@Thanks!
jk998 + 1 + 1 我很赞同!
HGG001 + 1 + 1 我很赞同!
SVIP008 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
wkdxz + 3 + 1 用心讨论,共获提升!
mf9999mf + 1 谢谢@Thanks!
dxaw24588 + 1 + 1 雀食不错

查看全部评分

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

撒旦の恶 发表于 2025-3-26 09:54
若是转换成Js代码岂不是更方便,浏览器上脚本运行,是不是连Python都不用装了?
luojineng 发表于 2025-4-13 12:19
import struct
import random

rounds = 12
roundKeys = 2 * (rounds + 1)

def crack(text: str) -> str:
    name = text.encode('utf-8')
    length = len(name) + 4
    padded = ((-length) & (8 - 1)) + length
    bs = struct.pack('>I', len(name))
    buff = bytearray()
    buff.extend(bs)
    buff.extend(name)

    ckName = 0x7a21c951691cd470
    ckKey = -5408575981733630035
    ck = new_ck_cipher(ckName)
    outBuff = bytearray()

    for i in range(0, padded, 8):
        bf = buff[i:i+8]
        now_var, = struct.unpack('>Q', bf)
        dd = ck.encrypt(now_var)
        outBuff.extend(struct.pack('>Q', dd))

    n = 0
    for b in outBuff:
        n = rotate_left(n ^ b, 0x3)
    prefix = n ^ 0x54882f8a
    suffix = random.randint(-(1 << 31), (1 << 31) - 1)

    if suffix >> 16 == 0x0401 or suffix >> 16 == 0x0402 or suffix >> 16 == 0x0403:
        in_ = (prefix << 32) | suffix
    else:
        in_ = (prefix << 32) | 0x01000000 | (suffix & 0xffffff)

    out = new_ck_cipher(ckKey).decrypt(in_)

    n2 = 0
    for i in range(56, -1, -8):
        n2 ^= (in_ >> i) & 0xff

    vv = n2 & 0xff
    if vv < 0:
        vv = -vv

    return f'{vv:02x}{out:016x}'

class ckCipher:
    def __init__(self):
        self.rk = [0] * roundKeys

    def encrypt(self, in_: int) -> int:
        a = (in_ & 0xffffffff) + self.rk[0]
        b = (in_ >> 32) + self.rk[1]

        for r in range(1, rounds+1):
            a = rotate_left(a ^ b, b) + self.rk[2*r]
            b = rotate_left(b ^ a, a) + self.rk[2*r+1]

        return ((b & 0xffffffff) << 32) | (a & 0xffffffff)

    def decrypt(self, in_: int) -> int:
        a = in_ & 0xffffffff
        b = in_ >> 32

        for i in range(rounds, 0, -1):
            a = rotate_right(a ^ b, b) ^ self.rk[2*i]
            b = rotate_right(b ^ a, a) ^ self.rk[2*i+1]

        a -= self.rk[0]
        b -= self.rk[1]

        return ((b & 0xffffffff) << 32) | (a & 0xffffffff)

def new_ck_cipher(ckKey: int) -> ckCipher:
    ck = ckCipher()

    ld = [0] * 2
    ld[0] = ckKey & 0xffffffff
    ld[1] = ckKey >> 32

    ck.rk[0] = -1209970333
    for i in range(1, roundKeys):
        ck.rk[i] = ck.rk[i-1] + -1640531527

    a = b = 0
    j = 0

    for k in range(3*roundKeys):
        ck.rk[a] = rotate_left(ck.rk[a] + (a+b), 3)

        ld[j] = rotate_left(ld[j] + (a+b), a+b)
        b = ld[j]

        a = (a+1) % roundKeys
        j = (j+1) % 2

    return ck

def rotate_left(x: int, y: int) -> int:
    return ((x << (y & 31)) | (x >> (32 - (y & 31)))) & 0xffffffff

def rotate_right(x: int, y: int) -> int:
    return ((x >> (y & 31)) | (x << (32 - (y & 31)))) & 0xffffffff

name = "charles"
print("name:", name, "    key:", crack(name))
我之前用GPT复现了一个。
Boulder01 发表于 2025-3-25 23:14
8970665 发表于 2025-3-26 00:55
是什么版本的,哪里下
xixicoco 发表于 2025-3-26 00:58
很不错的一次ai尝试
hah924 发表于 2025-3-26 06:19
下载测试一下
fanqie8 发表于 2025-3-26 06:40
确实不错,能提高生产力
ddfzl 发表于 2025-3-26 07:06
学习了,AI还真是有大用处
jandyx 发表于 2025-3-26 07:27
下载测试一下
cbweixin 发表于 2025-3-26 07:48
真可用。多谢多谢!
anning666 发表于 2025-3-26 08:37
楼主有心了,支持一下,charles确实是很好的抓包工具(中间人...)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-5-28 20:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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