首页
社区
课程
招聘
[原创] 某网站极验逆向 v3.1.2
发表于: 2025-5-16 20:23 1892

[原创] 某网站极验逆向 v3.1.2

2025-5-16 20:23
1892

jscrambler 混淆器,主要是可见性的问题,一些 unicode 字符的去除,还有 decodeURI 里面的内容不能直接解码,得用源代码保留

逆向该混淆器的时候有一些通用的模板

首先是类似于这样的形式的代码,我们通过查看能够知道 f3.$_Ct 是一个函数,通过输入对应的索引就能得出对应的字符串,类似于字符串池,而以下的代码有用的只有 v507v509 其余的代码都是死代码( v510 几乎不会被用到)

没什么用的 switch,单步即可

270 索引的字符串为 prototype ,而 f52 是一个函数,为的是给函数添加新的函数,类似于继承

73aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5i4y4K6M7r3!0J5N6q4)9J5k6h3u0A6L8r3W2T1K9h3I4A6i4K6u0W2j5$3!0E0i4K6u0r3P5q4)9J5c8Y4m8S2M7%4y4H3L8%4u0@1i4K6u0V1L8r3!0Y4K9h3&6Q4x3V1k6U0j5i4m8@1j5$3S2S2

该接口获取极验的 token、challenge、gt

获取参数

获取参数

56fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2M7r3W2Q4x3X3g2Y4k6h3g2@1k6i4y4@1i4K6u0W2j5$3!0E0i4K6u0r3k6$3g2@1i4K6u0W2M7r3S2H3i4K6y4r3

该接口获取一些必要参数,后面要用到

获取极验图片

获取极验图片

23cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3q4@1K9h3y4Q4x3X3g2Y4k6h3g2@1k6i4y4@1i4K6u0W2j5$3!0E0i4K6u0r3M7%4c8S2N6r3W2U0i4K6u0r3K9Y4y4Q4x3V1k6U0L8r3W2U0K9#2)9J5k6e0y4Q4x3X3f1I4i4K6u0W2x3W2)9J5k6h3A6K6

e01K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3q4@1K9h3y4Q4x3X3g2Y4k6h3g2@1k6i4y4@1i4K6u0W2j5$3!0E0i4K6u0r3M7%4c8S2N6r3W2U0i4K6u0r3K9Y4y4Q4x3V1k6Y4j5%4c8Q4x3X3g2T1y4K6q4S2z5e0l9J5y4K6f1H3z5h3u0U0y4X3u0U0k6X3g2X3z5h3k6U0y4X3p5I4z5e0j5@1x3U0c8X3y4g2)9J5k6h3A6K6

这两个 js 实现了极验的加密(下面详细讲)

becK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2M7r3W2Q4x3X3g2Y4k6h3g2@1k6i4y4@1i4K6u0W2j5$3!0E0i4K6u0r3j5h3A6S2P5q4)9J5k6i4m8Z5M7l9`.`.

该接口用于提交请求

点击验证提交

点击验证提交

首先找到提交 post 请求的函数

post 提交

post 提交

调用者上面就是请求的参数,可以很清晰的看到

通过查看,我们可以发现 gt challenge lang 在上述 get.php 的接口就可以找到,剩下的参数有 pt client_type w

生成的地方

生成的地方

通过搜索 643 这个索引即可找到赋值的地方,它由 v452 决定,可能为 03

我们通过索引 107141 我们可以知道源代码长这样

而其中 v450 为 Navigator,是浏览器提供的结构,至此我们可以知道 pt 的值代表着 UA 字符串中是否 Mobi 字样,如果有,则为 3 ,如果没有则为 0

pt 参数附近,见上图,也就是

翻译一下就是

同理,非 Mobi 字样 UA 选择 'web'

w 是一个组合的参数

分析该三个数据即可

其中主要的是 new vF6()[v2081(374)](this[v2081(750)](p538));

内部的函数调用 $_CACd,而通过调试我们可以知道它会返回 v1811 ,它从 vF9() 初始化得到

vF9

可知它返回一个 16 字符长度的字符串,也就是 AES key,然后该生成的随机 AES key 会通过 RSA 加密,其中构造 vF6 的时候会自动加载公钥,然后调用 encrypt 函数

通过断点 setPublic 我们可以知道它会获取公钥

这里它虽然写的是这个,但是后面的解析其实是不需要首部的 00 字节的,所以我们去掉 00 然后转换为 PEM 格式公钥

通过跟踪 encrypt 函数,我们可以从中发现填充的代码,通过动态跟踪我们可以知道这是 RSAES-PKCS1-v1_5 填充

至此我们分析完了 v2019 的流程,也就是随机生成 AES key,然后再拿 RSA 公钥加密 AES key,返回 hex 格式字符串

vO16 对象序列化,然后调用 AES 加密,密钥是刚刚生成的 AES key

跟踪到里面就可以获取 IV0000000000000000 字符串,然后返回字节数组


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回