如何生成 GPT-4 arkose_token

本篇文章已过期,仅供思路参考

20230626 早上

以下逆向 JS 内容已过期,参考:https://github.com/acheong08/ChatGPT/issues/1431#issuecomment-1606145567

有另一种简单的方法生成 arkose_tokenchatgpt-arkose-token-api

20230626 下午

当天,似乎上面的方法又失效了,所以还是先用回下面的方法

20230626 夜里 - 20230627

arkose_token 突然不检测了,但是还是先传着,保持和官网一样

2023-06-28

又开始检测了

2023-07-08

chatgpt-arkose-token-api 复活,主要是借鉴了 xyhelper/xyhelper-arkose

html 页面放在服务器上运行,不行,会弹验证码

但是单独起个服务跑 html 页面,又可以,莫名其妙

(我自己测试,如果服务器上开启了 IPv6,会拿不到 token,原因未知)

服务健康程度监控页面:Health Status

2023-07-27

方法已失效,不折腾了

2023-09-24

更新视频,通过抓 har 包获取合法 token(这个方法已经存在很久了,但是最近比较忙,也基本弃坑了没用 GPT,所以鸽到现在更新)

2023-10-02

原来本来就有更加方便的方法,之前没有注意,现在更新,无需额外再跑一个 token 服务


GPT-4 403

GPT-4 对 arkose_token 的校验在最近几天里每天都改变很多次,有时早上提交代码,下午就失效,或者晚上提交,第二天失效

通过不断的试错,把所有缺失的参数全部补上,但是最后还是 403 了

于是,打算从源头出发,学习一下 JS 的逆向(本人 JS 相对新手,但是曾经也写过)

arkose_token 从何来

接口:https://tcr9i.chat.openai.com/fc/gt2/public_key/35536E1E-65B4-4D96-9D97-6ADB7EFF8147

FormData:

1
2
3
4
5
6
7
8
bda: ct + iv + s 的 base64 编码
public_key: 35536E1E-65B4-4D96-9D97-6ADB7EFF8147
site: https://chat.openai.com
userbrowser: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
capi_version: 1.5.2
capi_mode: lightbox
style_theme: default
rnd: 随机数,小数点后有时 16 位,有时 17 位

其他参数都是写死,并且之前不传也可以,最近必须要传,并且还要传对,不然 403

重点就是在 bda 参数里,里面的内容是加密的

bda

通过 F12,一步一步跟,发现了一些蛛丝马迹,最后调用的是这个方法来生成 bda 参数:ALFCCJS.encrypt(bx, bv + bw)

于是反推,如何生成 bxbvbw

bx

bx 依赖 b5bg

b5 是一个数组,里面的东西大部分都是写死的,除了一个时间戳

bg 写死的,本次测试不传也正常(未来可能有校验)

b5 数组转成字符串,就得到了 bx

bv

bv 没什么好说的,就是当前浏览器 UA 写死

bw

bw 不复杂,当前时间戳然后计算一下

200

最后执行加密方法,就能生成加密 bda

如果提示 ALFCCJS is not defined,执行下面 JS 将其初始化

1
2
3
4
const script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://tcr9i.chat.openai.com/cdn/fc/js/6af2c0d87b9879cbf3365be1a208293f84d37b1e/standard/funcaptcha_api.js";
document.head.appendChild(script);

再设置到参数里调用接口就能拿到 arkose_token

GPT-4 就 200 了

视频(共三个)

一开始看错了 bvby,但是字幕烧录进去了,懒得改了,其实是 bx, bv, bw