背景
最近安装了 chrome-devtools-mcp
便试着用他来逆点什么
便选定了aistudio的playground逆向
主要是足够难,本身页面有混淆,还有加密参数
加密参数主要是指:

当然本身这个参数目前全网都没有人能够逆向出来,我们也不追求他解决
我们的目标只有一个:
允许借助浏览器来获取这个参数,但是要让工作时浏览器只用来获取这个参数,尽可能的减少性能开销和延迟
然后结合我们自己提前的一些判断,比如:
- 换账户,这个token不能复用,换浏览器也不能复用
- 这个参数一个重要影响参数是发送的历史记录,只要历史记录和浏览器环境不变,这个参数可以随便用,不是一次性的
- 同一浏览器环境里,header在多次对话时都不会有任何变化
- 可以无头发包,只要header和token对的上
那目标其实很简单:
- 对于header部分,我们只需要执行一次初始化对话,获取他就行
- 对于body部分,这个加密token就直接复用前端浏览器;里的函数,发事件直接调用
- 这样就可以省去所有ui操作,只在初始时需要对话一次抓包获取header,后续浏览器的作用就是一个token机器
开始实现
最开始我选用了playwright来进行,中间都很顺利,且ai也顺利的打断点调试等手段,获得了前端里负责加密这个参数的函数:

(ai效率就是快,直接顶着混淆硬是找到了)
最终也是做的差不多了:

(可以看到获取加密token只用了22ms,这个数量级其实要不要逆向其实已经没意义了,速度很快)
但是,遇到下面一个问题:
我手动使用chrome浏览器获取的包可以直接curl使用,但是使用playwright无头发的包就不行,但是换成有头模式又可以用了
换句话说:这个加密token检测了浏览器环境,识别到是无头模式,后端直接403拒绝了
这就犯难了,难道真没办法能实现吗?
并不是!
因为去年的时候,其实有这样一个项目:
CJackHwang/AIstudioProxyAPI: FastAPI + Playwright + Camoufox 中间层代理服务器,兼容OpenAI API且支持参数转发。项目通过浏览器自动化将API请求转发到 Google AI Studio 网页,并同样按照OpenAI标准格式返回的工具。内置调试WebUI面板。
它里面就支持了无头模式来对网页进行ui化操作来实现反代
那这其实就只说明了一件事,浏览器环境不够干净。因为这个token的生成和你是不是使用了ui交互(是否使用了按钮点击等)没有关系
既然是环境问题,那使用同款camoufox浏览器应该就可以了
结果确实是这样,将脚本进行迁移后,使用类似方法,实现了真正意义上的无头反代:
对话过程中完全不需要开启浏览器窗口
就此,基本结束!
相关代码和说明已经发布到仓库里:
github.com
GitHub - Lianues/aistudioFastProxy
通过在 GitHub 上创建帐户来为 Lianues/aistudioFastProxy 开发做出贡献。
后记
其实上面这个思路我在大概在去年就已经有了,但是当时没逆出来这个关键的token工厂函数,便暂时用的抓包获取token的思路做了一个:
油猴脚本.txt (11.5 KB)
现在有了更强力的工具,直接让ai去逆,就完美实现了我当初的思路
不过aistudio现在基本上已经没有什么用了,配额给的太少了也
此外,playground和build是共用配额的,也因为有更方便和更好的build反代,导致playground被我废弃了很久
不过扒一扒前端还是挺有意义的
3 个帖子 - 3 位参与者