aws-waf-token纯算分析

xionghazi 发布于 2025-12-30 152 次阅读 最后更新于 2025-12-30


本文内容仅限于学术研究和技术讨论,实际应用中应严格遵守相关法律法规和服务条款。本文内容遵守CC BY-NC-ND 4.0协议,禁止任何修改后二次传播。

这里推荐一下奶味狼开发的新一代 python的 js 代码执行库:never_jscore。执行速度拉爆 PyExecJS,两个库对于 aws 纯算算法的运行耗时差异可以直接看文章末尾(单次运行和1000次总计,差异超过我预料)。

一.认识 aws-waf-token

AWS WAF 是 亚马逊旗下的一款 web 应用程序防火墙,可以用于监视最终用户发送到应用程序的 web 请求,并控制对内容的访问。其特征为识别令牌存储在名为 aws-waf-token 的 Cookie 中。
AWS WAF 是提供图形验证码功能的,但这里我们只分析一下aws-waf-token 的获取过程,更多详情请访问:aws官方文档


二.流程拆解

1.请求首页失败

请求目标网站失败,返回html包含这样一段 js 代码,其中 window.gokuProps 参数值在后续是能用到的。

2. inputs 接口

接口会返回一个json数据,input 会参与后续的加密,challenge_type 会决定使用哪个方法去加密,difficulty 决定是否继续。

3. verify 接口

verify接口就是最终的验证接口,验证通过后返回的 token 值就是我们需要的 aws-waf-token

这个就是verify接口需要的参数,我们只需要关注 checksum,metrics,signals 和 solution 这四个值即可,其余的不是固定值就是前面两个接口返回的值。

整个加密流程都在 challenge.js 这个文件中进行的,ob混淆+异步执行。

我们直接搜索关键字,然后在这里断住,第一个红色方框处就是 checksum,metrics,signals 的生成地方,第二个红色方框里面就是 solution 的核心加密流程,整个流程都会用到一个 crc32 加密的字符串。

整体难度并不高,只是异步跟栈有点烦人,但是相对于谷歌来说也还好,不过也花了我两天才纯出来,整体就是 aes-gcm + crc32加密。


三、结果展示

这里你可能就要问了,这两个红色方框怎么耗时相差接近8倍呢?没错,我用了奶味狼开发的新一代 python的 js 代码执行库:never_jscore。aws 纯算法,单次运行差异接近 8 倍,运行1000次耗时差异更是达到了 14 倍。

never_jscore 是一款基于 Deno Core (V8) 的高性能 Python JavaScript 执行引擎,专为 JS 逆向工程优化,Rust + V8 直接绑定,运行速度这一块甩了 PyExecJS 八条街。
github项目地址:
neverl805/never-jscore: 基于rust deno_core开发封装的v8引擎库,用于python高性能执行js.(execjs的上位替代品)

never_jscore 技术交流群:加微信 xu970821582

ps:请曼支付我广告费。(´▽`ʃ♡ƪ)