本篇文章已过期,仅供思路参考
20230626 早上
以下逆向 JS 内容已过期,参考:https://github.com/acheong08/ChatGPT/issues/1431#issuecomment-1606145567
有另一种简单的方法生成 arkose_token
:chatgpt-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 | bda: ct + iv + s 的 base64 编码 |
其他参数都是写死,并且之前不传也可以,最近必须要传,并且还要传对,不然 403
重点就是在 bda 参数里,里面的内容是加密的
bda
通过 F12,一步一步跟,发现了一些蛛丝马迹,最后调用的是这个方法来生成 bda 参数:ALFCCJS.encrypt(bx, bv + bw)
于是反推,如何生成 bx
、bv
和 bw
bx
bx
依赖 b5
和 bg
b5
是一个数组,里面的东西大部分都是写死的,除了一个时间戳
bg
写死的,本次测试不传也正常(未来可能有校验)
将 b5
数组转成字符串,就得到了 bx
bv
bv
没什么好说的,就是当前浏览器 UA
写死
bw
bw
不复杂,当前时间戳然后计算一下
200
最后执行加密方法,就能生成加密 bda
如果提示 ALFCCJS is not defined
,执行下面 JS 将其初始化
1 | const script = document.createElement("script"); |
再设置到参数里调用接口就能拿到 arkose_token
GPT-4 就 200 了
视频(共三个)
一开始看错了 bv
成 by
,但是字幕烧录进去了,懒得改了,其实是 bx
, bv
, bw