js逆向案例-极验4代九宫格与语序点选

admin 2024年7月8日16:55:23评论82 views字数 4630阅读15分26秒阅读模式
提示!本文章仅供学习交流,严禁用于非法/商业用途
文章如有不当可联系本人删除!

涉及加密:AES-CBC与RSA与guid与md5/sha1/sha256

网址base64

aHR0cDovL2N4LmNuY2EuY24vQ2VydEVDbG91ZC9yZXN1bHQvc2tpcFJlc3VsdExpc3Q/Y2VydE51bWJlcj0mb3JnTmFtZT1mYWRmJmZyb21JbmRleD10cnVl

分析时间2023-10-01,至今思路有效运行有效,100+个步骤9k字与2h视频

接口流程:

js逆向案例-极验4代九宫格与语序点选

目录:

js逆向案例-极验4代九宫格与语序点选

一、案例分析

1.我们打开网址,搜索后,弹出如下的验证码,九宫格验证码,验证码的右下角出现GEETEST,这个就代表是极验反爬

js逆向案例-极验4代九宫格与语序点选js逆向案例-极验4代九宫格与语序点选

2.我们f12打开右侧的开发者工具平台,再次搜索查询数据,当我们过了验证码后查询出来如下,然后我们ctrl+f搜索下右侧的数据接口是什么,如图定位到了数据接口

js逆向案例-极验4代九宫格与语序点选

3.直接重放请求,用python的requests模拟下该请求,发现响应数据返回是验证失误,所以要么是请求头里面有参数失效了,要么是请求链接里面的参数失效了,我们这时候啥也不清楚,只能一个一个的验证

js逆向案例-极验4代九宫格与语序点选

4.分析下数据接口,先看下请求链接,这里的链接参数比较多,先大致看一下,orgName是我们刚刚随意搜索的词,certItemOne是空的,gen_time看起来是当前时间戳,pageNum和pageSize是页码和每页展示的条数;而现在留下来的是未知参数lost_number, pass_token,  captcha_output

js逆向案例-极验4代九宫格与语序点选

5.先研究lost_number,直接搜索它对应的值7e466e9c6e3f4177a4206341836904d4 ,发现右侧定位到的接口响应返回了这四个值,lost_number,gen_time, pass_token,  captcha_output ,也就是说我们需要研究verify这个接口才能从响应结果拿到这四个值

js逆向案例-极验4代九宫格与语序点选

6.由此,我们把代码重新写一下,也就是接下来我们需要获取代码中的verify_r,也就是要研究verify这个接口了

js逆向案例-极验4代九宫格与语序点选

二、verify接口(captcha_id,lost_number,payload, process_token,  w )

7.我们下看下verify这个接口,请求链接参数如下,有很多参数captcha_id,lost_number,payload, process_token,  w 暂未知,其中callback是geetest_ + 时间戳

js逆向案例-极验4代九宫格与语序点选

8.我们先把verify这个接口写下,接下来开始研究每一个可疑的参数是怎么来的

js逆向案例-极验4代九宫格与语序点选

二-1、geetest.js提取captcha_id

9.verify接口的captcha_id怎么来的,我们全局搜索下,第一搜索关键词,我们发现gt4.js这个文件里面似乎是生成的逻辑,但是有两处位置都有,我们并不知道是在哪里生成的,所以两处位置附近的行号都打上断点看看

js逆向案例-极验4代九宫格与语序点选

js逆向案例-极验4代九宫格与语序点选

10.verify接口的captcha_id怎么来的,接着刷新网页,在我们的断点处首次断住,但是此时captcha_id已经生成了,那接下来需要通过右侧的堆栈往上回溯查找是怎么来的

js逆向案例-极验4代九宫格与语序点选

11.verify接口的captcha_id怎么来的,堆栈回溯我们找到这里,发现captchaId是一个写死的固定值,并且是由js链接文件http://cx.cnca.cn/CertECloud/resourses/geetest/geetest.js 返回的,也就是说captcha_id我们可以通过获取这个js文件响应结果提取到captcha_id;当你练习了多个网站的时候,你会发现每个网站的captcha_id都是固定值,也就是说你可以理解成一个网站域名被极验官方分配了一个唯一的captcha_id,而通过captcha_id就可以确定是哪个网站有极验反爬,所以这个参数研究完了,单个网站写死就行

js逆向案例-极验4代九宫格与语序点选

12.同时在geetest.js链接响应里面,我们也能直观的看到它是极验4代,因为它走了极验4的逻辑函数

js逆向案例-极验4代九宫格与语序点选

13.继续verify接口的lot_number/payload/process_token怎么来的,我们搜索下值

js逆向案例-极验4代九宫格与语序点选

二-2、load接口返回lot_number/payload/process_token

14.verify接口的lot_number怎么来的,搜索结果如下,我们在load接口里面找到了它的来源,同时对比下会发现payload/process_token都是这个load接口返回的

js逆向案例-极验4代九宫格与语序点选

15.如此verify接口代码完善下,其中verify接口还有个w没研究,我们先预留下,后面研究,这个是重中之中

js逆向案例-极验4代九宫格与语序点选

16.清一下缓存,我们再次刷新网页,看下load接口有啥,如图请求链接参数有captcha_id和challenge ,其中captcha_id前面已经分析可知,我们看下challenge怎么来的

js逆向案例-极验4代九宫格与语序点选

二-3、load接口challenge的由来

17.load接口challenge参数怎么来的,老方法,先搜索challenge定位,可疑位置js行号打上断点;然后清掉浏览器缓存,再刷新网页,如图我们发现初始化的时候challenge是undefined,它实际上是uuid()函数随机生成

js逆向案例-极验4代九宫格与语序点选

18.load接口challenge参数怎么来的,我们鼠标悬浮在uuid函数上,并且点击进去看看uuid函数

js逆向案例-极验4代九宫格与语序点选

19.load接口challenge参数怎么来的,这一块uuid的函数是随机生成的

js逆向案例-极验4代九宫格与语序点选

20.至此,完善一下load接口的代码,

js逆向案例-极验4代九宫格与语序点选

21.如此,我们整个架子流程,load接口请求验证码,verify校验验证码,data数据接口,已经搭建好,还剩个步骤14的verify接口的w值没有分析

js逆向案例-极验4代九宫格与语序点选

三、verify接口w的由来

三-1、定位w位置

22.接下来我们开始极验当中最难的参数w值的研究,w值是verify接口里面用到的参数,所以我们可以故意的点击错误的w验证码来保持同一张图的verify测试,不过这里随意

js逆向案例-极验4代九宫格与语序点选

23.这里遇到一个非常困难的点在哪里呢,平常我们都是搜索式定位比如像前面介绍的步骤9一样搜索w: , 或者像前面介绍的步骤14搜索w的值,但是现在非常困难的这两种方法我们都无法定位到w是在何处生成,那怎么办呢

js逆向案例-极验4代九宫格与语序点选

24.这时候我们选择堆栈回溯的方法去分析,这里从上到下,越往上是越接近我们的响应结果,越往下是越接近请求的接口,所以我们随机点击几个蓝色的函数点进去,然后打断点分析,比如点击第一个蓝色的

js逆向案例-极验4代九宫格与语序点选

25.我们跳到了这里的,http://static.geetest.com/v4/static/v1.7.4-507111/js/gcaptcha4.js 的代码里面,这块代码有些许变量名混淆,分析代码十分不方便,还记得星球里面介绍的ast解混淆吗

js逆向案例-极验4代九宫格与语序点选

三-2、解混淆js

26.解混淆gcaptcha4.js 开始,我们把这份js代码完整的拿到本地,vscode里面把js代码收起来快捷键顺序,ctrl+A >  ctrl+ k  >  ctrl + 0 即可完成收缩,接下来步骤26~到步骤39都是解混淆和替换js文件的流程

js逆向案例-极验4代九宫格与语序点选

27.关于ast解混淆的js代码,这里直接参考的https://blog.csdn.net/qq_42857999/article/details/122364575 开源的,所以我们直接拿来用辅助解混淆下, 先安装好ast解混淆的依赖环境npm install @babel/parser @babel/traverse @babel/types @babel/generator fs -g --registry=http://registry.npm.taobao.org

js逆向案例-极验4代九宫格与语序点选

28.然后我们继续需要按如下步骤1/2/3/4操作,修改我们当前的ast_decode.js文件,然后运行

js逆向案例-极验4代九宫格与语序点选

29.如图我们得到了解混淆后的js文件,而这个时候,解混淆的js文件能不能用,我们解混淆后有没有制造了错误的逻辑,这个时候我们需要把已解混淆后的js文件替换到浏览器上验证下

js逆向案例-极验4代九宫格与语序点选

30.怎么替换js文件?首先在电脑上新建一个空的文件夹比如rewrite,当然你也可以选择一个已经存在的有内容的文件夹

js逆向案例-极验4代九宫格与语序点选

31.怎么替换js文件?然后回到浏览器上,选择Sources>Overrides>Select floder for overrides>选择你建好的空文件夹

js逆向案例-极验4代九宫格与语序点选

32.注意,这时候会弹出一个允许权限,勾选上

js逆向案例-极验4代九宫格与语序点选

32.如图这就是我们现在勾选上的Overrides后展示的内容

js逆向案例-极验4代九宫格与语序点选

33.接着我们需要刷新网页,在Network这个面板里面筛选找到gcaptcha4这个接口,然后鼠标右击这个接口,Override content(新版浏览器),旧版浏览器则是Save for overrides

js逆向案例-极验4代九宫格与语序点选

34.这时候我们回到Sources面板,会发现Network多了个⚠️ ,且js文件多了个紫色的圆点点,说明已经进入替换js文件状态

js逆向案例-极验4代九宫格与语序点选

35.如图,我们编辑下gcaptcha4.js文件,将我们解混淆后的js代码直接ctrl+A全部选中,ctrl+c全部复制上去,然后ctrl+s保存下,如此我们就已经改变了gcaptcha4.js的代码内容

js逆向案例-极验4代九宫格与语序点选

36.接下来,清掉缓存Application-Clear site data

js逆向案例-极验4代九宫格与语序点选

37.然后刷新下网页,如此当Network这里的接口有个紫色的小原点显示了,就说明它已经替换成功了

js逆向案例-极验4代九宫格与语序点选

38.如图在Response这里也替换成功了,但是能不能用,我们替换后的js文件会不会有错误,导致正常流程无法执行,还需要验证下,如何验证?

js逆向案例-极验4代九宫格与语序点选

39.我们点击下验证码,校验通过后,且数据正常查询,并不影响它正常的接口流程,就是无缝衔接,说明它没问题了,替换后的js文件可以

js逆向案例-极验4代九宫格与语序点选

js逆向案例-极验4代九宫格与语序点选

三-3继续定位w

40.继续步骤24的流程,我们现在继续研究w参数是怎么来的,点击蓝色的堆栈进入函数内部,比如第二个,这里的选择是随机选择打断点的,最终看能不能断住,起初最好选择越靠上的打断点

js逆向案例-极验4代九宫格与语序点选

41.如图我们点击验证码,确定后,在1270行断住了

js逆向案例-极验4代九宫格与语序点选

42.通过右侧的堆栈信息,我们一步一步往上找w初始生成的位置

js逆向案例-极验4代九宫格与语序点选

43.我们在这个堆栈里面的a函数里面的o参数找到了已经生成的w的身影,继续往上找

js逆向案例-极验4代九宫格与语序点选

44.同理步骤43,再继续往上找

js逆向案例-极验4代九宫格与语序点选

45.最终我们在堆栈i的位置,找到了w的值的由来, w=r, 而var r = (0, d["default"])(f["default"]["stringify"](e), s),此时我们需要在左侧行号2476和2477行打上断点

js逆向案例-极验4代九宫格与语序点选

四、分析w生成逻辑

   四-1、w-函数d["default"] 

46.并把之前的断点取消掉,只留现在的两个断点,再次点击验证码,我们把这行js代码翻译一下,这里的意思就是说r是d["default"] 这个函数加密而来,其中d["default"] 这个函数传入了两个实参f["default"]["stringify"](e)和s ,也就是到这里我们有三个对象需要研究,一个函数两个参数

原始的:var r = (0, d["default"])(f["default"]["stringify"](e), s)

翻译后:var r = d["default"](f["default"]["stringify"](e), s)

js逆向案例-极验4代九宫格与语序点选

47.先研究函数d["default"]

js逆向案例-极验4代九宫格与语序点选

 

 

原文始发于微信公众号(逆向OneByOne):js逆向案例-极验4代九宫格与语序点选

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月8日16:55:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   js逆向案例-极验4代九宫格与语序点选https://cn-sec.com/archives/2925989.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息