Bootstrap

【JS逆向】纯异步JS逆向分析

声明

本文章所有内容仅供学习交流使用,不用于其他任何目的,其中的抓包内容、数据接口、敏感网址等均已做脱敏处理,严禁用于商业用途和非法用途,否则,由此产生的一切后果均与作者无关,若有侵权,请联系作者立即删除!

逆向目标

  • 网址:aHR0cHM6Ly93d3cuYXBwbGUuY29tLw==
  • 目标:逆向登录

抓包分析

点击右上角购物袋,选择登录。

首先输入手机号或邮箱,点击箭头,会发起一个init请求,其中a参数需要逆向分析。

在这里插入图片描述

该请求的响应在后续请求参数的生成会用到。

在这里插入图片描述

然后输入密码进行登录,会发起一个complete请求,其中的m1和m2参数需要逆向。

在这里插入图片描述

闲话不多说,直接开整。

逆向分析

  • a参数逆向

a的跟栈就不多说了,直接从启动器往前看就可以看到

在这里插入图片描述

生成逻辑很清晰,跟着逻辑把代码都扣下来即可。

这里有一个很坑的地方:f = r.publicValue其实是会走publicValuegetter函数的,如果你F10是看不到具体生成逻辑的,必须得F9才可以。

然后publicValue属性也是一个对象,其中的bi、buffer、hex属性也是这种玩法,一定要细心,不要被坑了。

在这里插入图片描述

参数a细心耐心点就能搞出来。

  • m1、m2参数

还是从启动器进去,下断,发包,跟栈。一直往前跟,就会发现m1和m2是经过异步生成的。

下面就开始讲解这种特征异步的处理方式。

首先我们在异步之前找个地方下断,最好是能断住我们想要的一次请求。我就在下图这个地方下断了,重新请求。

在这里插入图片描述

然后就会进到本篇文章所描述的特征点相关的代码,一般是switch (r.prev = r.next),我们直接下断,然后F8,然后单步跟。

在这里插入图片描述

这里r.next = 4表明下一次控制流会进入case 4,同时e._getSRPValues的结果就是下一次控制流的r.sent,这个原理我也不太懂,有大佬路过的话可以指点指点,然后我们直接在下一次控制流下断,F8。

在这里插入图片描述

可以发现m1和m2已经生成了,那就是我们错过了以下异步逻辑,重新跟。

在这里插入图片描述

这一次我们直接跟进去e._getSRPValues,还是一样的特征,该下断的地方都下,然后之后就按照这个逻辑跟了。

由于异步特别容易跟丢,所以我就直接揭开谜底,函数该跟的地方直接说了,下一个需要跟的就是Et

在这里插入图片描述

还是一样的特征,下一次有点特别,直接在ze.postMessage下断。

在这里插入图片描述

跳到ze.postMessage断点,发现是Worker,这里是postMessage,那我们就找onmessage下断。

在这里插入图片描述

可以看到m1和m2已经生成了。

在这里插入图片描述

我们网上看一个栈,可以确定就是在这生成的。

按照之前的逻辑m1和m2b1中来,而b1其实就是r.getEvidenceMessage(m)的结果,我们直接清空所有断点,在r.getEvidenceMessage(m)下断,重新发包。

在这里插入图片描述

可以看到,参数还没生成,而且h也很熟悉,就是第一个请求的响应。

在这里插入图片描述

接下来就是多层Promise了,直接硬刚。

小技巧:我们怎么看哪些函数需要重点跟呢,就是你点进去发现是下面这种形式的,然后基本都会进入一个Promise,跟Promise记得F9,同时,记得在下一次控制流提前下断。

在这里插入图片描述

第一次,从r.getEvidenceMessage(m)

在这里插入图片描述

第二次,从this.getEvidenceData(r)

在这里插入图片描述

第三次,从I函数进

在这里插入图片描述

第四次,从e.getHash()

这个promise会进入很多次,后面就不赘述了。

在这里插入图片描述

第五次,从与I同层级的A函数进

在这里插入图片描述

第六次,从与I同层级的T函数进

在这里插入图片描述

第七次,从与I同层级的O函数进

在这里插入图片描述

最后,就是在这里生成的m1和m2

在这里插入图片描述

扣代码的话就不带着扣了,因为实在是太多了,按照前文所讲的逻辑一步一步跟着扣就可以。

注意点:记住xxx.sent就是上一次控制流的结果,还有就是之前碰到的有bi、buffer、hash属性的对象,要重点关注各自的getter函数

最后直接附上模拟请求结果

在这里插入图片描述

成功!!!

账号网址:aHR0cHM6Ly9hcHBzdG9yZS5wYW5iYWlkLmNvbS9zaGFyZS9NVQ==K哥提供

;