js解混淆和风控一直是我的弱点,js混淆我基本都是强看写算法,最近逛了下吾爱,看了很多大佬对某验的分析,研究了一段时间,会了点ast看代码轻松好多啊,虽然有很多大佬研究了,但还是来献献丑混点cb,谢谢,没写过文章,多见谅下哈
声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关. 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除.
正文
那么,让我们开始吧
网址:aHR0cHMlM0ElMkYlMkZkZW1vcyUyRWdlZXRlc3QlMkVjb20lMkZzbGlkZSUyRGZsb2F0JTJFaHRtbA==
第一步先分析流程

1.png (46 KB, 下载次数: 2)
下载附件
第一步
2025-9-29 16:25 上传
总共6个请求
1-就是获取gt和challenge
2-获取第一次w加密需要的加密参
3-第一次w加密请求,我觉得是先给服务器钥匙,顺便获取过风控的类型,这一步如果把第二步返回参写死,可以不用2
4-第二次w加密请求,无感验证、认证了gt和challenge才能进行之后的步骤,上一步给他钥匙了,他就能看我们行为,过了才能继续
5-获取新参数,以便最后请求
6-最后一步w加密请求,根据滑动轨迹加密跟第一步w加密差不多
我们看了这几个请求知道了,加密参只有一个w需要解,至于callback,看时间戳多了就会知道callback=geetest_13位时间戳
第二步分析js文件,解混淆
我们根据w加密的请求知道了调用栈,主要都是fullpage和slide进行,那么我们先用ast解混淆,去看看吾爱中大佬发的解某验混淆把,我也刚学ast,就不误人子弟了
ast解他们,大概需要解ob混淆、合并switch语句、unicode解码,这三步完,在我来看够了,跟之前强看不知道幸福多少,你们有能力可以继续解花指令
刚入门可以想我一样解完一步,替换js文件测试过风控,看能不能行,能就继续下一步,不行就继续研究,或者强看,我是就只能解到合并switch,能力不足阿,哈哈哈...........
第三步分析js文件,解w算法
解第一步w算法

2.png (64.49 KB, 下载次数: 3)
下载附件
2025-9-29 17:04 上传
导入解完的js文件,根据请求调用栈我们知道第一步w是i+r
先解决r算法如何生成

3.png (26.47 KB, 下载次数: 3)
下载附件
r加密
2025-9-29 17:07 上传
跟进去我们知道e是undefind拿去生成什么数据,然后进行加密
跟栈,我们先进去x方法生成加密算法

4.png (26.27 KB, 下载次数: 3)
下载附件
2025-9-29 17:19 上传
你们有经验了就会知道这个是rsa中n,e生成pubkey公钥的,跟栈走下去你们也会看到

5.png (41.4 KB, 下载次数: 3)
下载附件
2025-9-29 17:21 上传
看这边不是写着rsapubkey,可能你们会觉得我逆完了,正向看肯定是这样,但是你们不懂可以先记下,想好大概流程,后面走完这个请求伪造试试嘛,试试又不会怀孕
我为什么说伪造请求试试,不是叫你们加密看看和浏览器对不对,rsa加密是非对称加密,每次加密都不一样的,有些可以对,有些对不了的
这个x()方法跟完后进去--e是undefind拿去生成什么东西的方法

6.png (32.57 KB, 下载次数: 3)
下载附件
2025-9-29 17:30 上传
这边又提示我们aeskey,姑且先记下来,继续跟栈

7.png (70.26 KB, 下载次数: 2)
下载附件
2025-9-29 17:36 上传
这个算法,自己多试几次就知道生成16位16进制随机数了,我们也给他记下来aeskey的值
然后拿去加密了,我们跟栈出来就是这个结果

8.png (139.75 KB, 下载次数: 3)
下载附件
2025-9-29 17:40 上传
这个结果没有=大小写字母混合,所以不是加密后base64编码,我看是加密后转16进制
接下去就是解o算法,这也是什么加密,跟进去看看

9.png (106.08 KB, 下载次数: 2)
下载附件
2025-9-29 17:53 上传
看这个3,是不是之前aeskey生成的,还有1中的iv,我们就能知道不是aes就是des,2这边也写了模式cbc
那我们可以根据4中的数据自己去写加密算法试试嘛,转成字节数组来对对这个s是不是一样,就会知道这个就是aes加密了,aes是对称加密可以拿来对的,还有这个e,其中参数有一部分不就是之前所得第二步请求返回参嘛
得出的o是数组,在进行i加密就能得到w了,跟进去

10.png (101.53 KB, 下载次数: 3)
下载附件
2025-9-29 18:01 上传
看这个会不会熟悉

11.png (57.35 KB, 下载次数: 3)
下载附件
2025-9-29 18:04 上传
所以我们可以得出这个是魔改的,那是不是换chars字符表就行了?试试呗
我得出来是不行哦,那照着js写这个算法呗,自己学着写写,不贴出来了,后面还有其他修改算法也要写的,不是像md5,base64,aes这些造好的轮子

12.png (57.54 KB, 下载次数: 1)
下载附件
mgbase64str
2025-9-29 18:12 上传
像不像base64,=换了.,然后就是i、参数aes加密魔改base64编码加,r、我们猜rsa加密aeskey生成得16进制字符串
去试试呗,看看第一次w生成能不能过这个请求
解第二步w算法
第二步w和第一步不一样,没有rsa加密16进制字符串了,又要重新逆,下断点跟栈

13.png (190.35 KB, 下载次数: 3)
下载附件
第二步w算法
2025-9-29 19:14 上传
熟不熟悉,那个又是我们之前得aeskey,根据抓包第二次w请求来对比,所以这个w加密大概是aes加密、魔改base64编码,所以我们现在要先解r的参数算法,找到这个方法最上层下断点

14.png (46.27 KB, 下载次数: 3)
下载附件
2025-9-29 19:24 上传
根据r中,第一个加密参tt,由e,t,n三个生成的,那先逆e,跟进去

15.png (124.88 KB, 下载次数: 3)
下载附件
2025-9-29 19:28 上传

16.png (128.53 KB, 下载次数: 3)
下载附件
2025-9-29 19:29 上传
e传进来的值是滑动轨迹列表、r则是轨迹差
我之前看了一个大佬文章,全程手撕很牛,他对这个无感验证有个思路很好,他说这个检测行为不会因为,我轨迹少就封我吧,我深以为然
所以这个轨迹想想,是个小彩蛋
继续往下走

17.png (136.11 KB, 下载次数: 2)
下载附件
行为列表
2025-9-29 19:43 上传
这个轨迹差,重新整合了4个列表

18.png (19.68 KB, 下载次数: 3)
下载附件
2025-9-29 19:45 上传
行为列表、x、y、时间差列表,然后行为列表一个算法,其他三个一个算法,这几个算法都要手动还原,没有什么轮子
跟进f方法

19.png (73.15 KB, 下载次数: 3)
下载附件
2025-9-29 19:51 上传
大概就是根据行为得p中的值拿去运算,最后转为二进制,前面补零,在相加成为str
然后就是d算法

20.png (155 KB, 下载次数: 1)
下载附件
2025-9-29 20:07 上传
也是什么运算之后得到一个列表,再拿去转二进制,根据t判断是否需要多运算转二进制,再相加成为str

21.png (48.58 KB, 下载次数: 3)
下载附件
2025-9-29 20:07 上传
最后4个二进制str相加,余6,有剩补0,最后每6个转10进制对应chars的数,得出tt,这个可不是最后tt的值啊
t算法跟刚刚轨迹算法一样

22.png (58.53 KB, 下载次数: 3)
下载附件
t算法
2025-9-29 20:13 上传
不过进来的是空列表,生成的可以写死值

25.png (87.13 KB, 下载次数: 3)
下载附件
2025-9-29 20:33 上传
tt生成还需要一步,第一步w请求后返回的c、s拿去运算,这边的c、s才是t和n

23.png (87.52 KB, 下载次数: 1)
下载附件
n算法
2025-9-29 20:16 上传
这些win对象转74个-1再用magic data拼接
s 是无感认证时间,一定要比轨迹时间长
接下去就是twe_w_str json字符串拼接

24.png (110.87 KB, 下载次数: 3)
下载附件
2025-9-29 20:24 上传
s、h、hh、hi加密,本身str就是死值可以写死,要弄算法也行
s、h比hh、hi多了一层算法

26.png (97.72 KB, 下载次数: 2)
下载附件
2025-9-29 20:37 上传
熟悉不,之前叫你们自己练手的魔改base64

27.png (84.08 KB, 下载次数: 3)
下载附件
md5
2025-9-29 20:39 上传
h算法根据这两个标记,大概可以确认md5,可以自己去试试,算法贴给gpt问问也行,这种表长整数的,基本都是有轮子的那种算法,不用手敲
写文章真的比我逆向还要累,我都敲了半天了....................有点烦,想直接贴

28.png (11.16 KB, 下载次数: 3)
下载附件
2025-9-29 20:47 上传
然后就是ep、passtime就是之前说的s值、rp就是gt+challenge+passtime拿去md5加密
ep去跟栈

29.png (88.88 KB, 下载次数: 3)
下载附件
2025-9-29 20:52 上传
fp是轨迹最开始运动的参,lp是最后的运动参、跟进em,不过都是死参

30.png (45.91 KB, 下载次数: 3)
下载附件
2025-9-29 20:57 上传

31.png (94.39 KB, 下载次数: 2)
下载附件
2025-9-29 21:04 上传
tm根据自己返回的参数对照的伪造吧

32.png (75.56 KB, 下载次数: 3)
下载附件
captcha
2025-9-29 21:06 上传
captcha,伪造没有任何意义,本身就是通过js代码生成的,真要计较,我们ast解码后的这个也不能用,只能写死

33.png (49.71 KB, 下载次数: 2)
下载附件
2025-9-29 21:09 上传

34.png (109.27 KB, 下载次数: 3)
下载附件
gmbadse64
2025-9-29 21:10 上传
最后就是整合twe_w_str加密了,熟悉不?
这步请求完,再把第五步请求完,就剩第三个w加密了
解第三步w算法

35.png (113.13 KB, 下载次数: 2)
下载附件
2025-9-29 21:16 上传
这是第五步返回需要的参
challenge比原本多最后两位数,bg切割混乱的背景图、slice滑块图、s值

36.png (16 KB, 下载次数: 2)
下载附件
ut算法
2025-9-29 21:24 上传
bg切割混乱的背景图Ut算法

37.png (131.16 KB, 下载次数: 3)
下载附件
图片还原
2025-9-29 21:24 上传
bg还原图片,可以先等图片出来后,断着Canvas,按刷新直接就断到bg还原图片了,我Ut也是直接写死的
像这个bg图片还原、滑块x值,还有滑块轨迹都有现成的,k哥里面get_slide_track这个就能使用
原本我是想自己写轨迹的,x、y值好伪造,就是ts时间差没整好过不去,后续能力强了,自己多试试看行不行

38.png (101.79 KB, 下载次数: 3)
下载附件
2025-9-29 21:44 上传
终于到了最后的w生成,看抓包生成的w和第一次w生成差不多

39.png (90.22 KB, 下载次数: 3)
下载附件
2025-9-29 21:52 上传
先跟着找参数,最早轨迹生产加密算法在这,跟着进去

40.png (185.96 KB, 下载次数: 3)
下载附件
2025-9-29 21:58 上传
且听我说,1是滑动轨迹、2是滑动轨迹差,真正需要的是轨迹差、当每个轨迹差头两个差等于3中e的列表时则计算完生成str添加到i列表,不符合时候,就通过4步骤进入5中的n方法来计算str,添加到r、i中,o中单独计算轨迹差中的时间差,通过5中的n方法转换str
最后生成6中的r、i、n列表,再通过!!拼接,要记得这边也有个passtime,这个passtime就是根据轨迹差中的时间差总和

41.png (83.74 KB, 下载次数: 2)
下载附件
2025-9-29 22:09 上传
这个像不像第二次w中tt最后生成的算法

42.png (63.29 KB, 下载次数: 3)
下载附件
2025-9-29 22:11 上传
来咯,这个就是最后w生成算法了,刚刚生成的轨迹差参数就叫aa,现在我们继续逆userresponse

43.png (60.49 KB, 下载次数: 3)
下载附件
2025-9-29 22:14 上传
1中的t就是滑块滑倒缺口的x距离,e就是challge,在第五步返回的
2根据challge中最后两个参数进行36进制转10进制
3遍历challge的前32位,通过计算把c中没有key添加进去,最后再把计算的参添加到_列表中
4我也不懂这什么算法,gpt说是贪心算法,取随机数,最后就生成p了
不懂算法真没啥,这种照抄写成自己算法也不难,userresponse就出来了
imgload是图片载入时间,随机整数咯,自己伪造,然后进入ep

44.png (112.77 KB, 下载次数: 3)
下载附件
2025-9-29 22:27 上传
ep其他值都是死的,就tm和第二步一样,自己伪造咯

45.png (46.34 KB, 下载次数: 3)
下载附件
2025-9-29 22:31 上传
h9s9跟前面的captcha差不多,先是代码生成一个h9s9,在进入第二个p方法中重新生成新的h9s9,没意义,写死把

49.png (18.01 KB, 下载次数: 2)
下载附件
2025-9-29 22:40 上传
rp不是和之前第二次w生成一样嘛gt+challenge【:32】+passtime

46.png (30.07 KB, 下载次数: 2)
下载附件
2025-9-29 22:33 上传
通过抓包,我们也能猜出来最后w和第一次差不多,看这边是不是也很像第一次加密,只是加密参不同罢了

47.png (21.51 KB, 下载次数: 3)
下载附件
2025-9-29 22:36 上传
和第一次一样把,不过这个t是undefined,说明他重新生成了aeskey

48.png (134.38 KB, 下载次数: 3)
下载附件
2025-9-29 22:38 上传
aes加密,aeskey变了,加密参不就是我们前面逆的参

50.png (76.46 KB, 下载次数: 2)
下载附件
2025-9-29 22:42 上传
最后魔改base64加密,结束
第一次写这个,这么累,快敲了我一天时间,越写到后面越没耐心了,不好意思啊,下次改正,拜拜