js逆向——异步栈分析(上)
案例1:
受害者网站:https://m.ctyun.cn/wap/main/auth/login
首先抓包分析一波
发现是xhr请求,可以跟栈调试,相对还是容易一些
前面三个一般是send,ajax,xmlhttprequest这种封装好的发包的库,一般不用在意,当然如果习惯从第一个函数开始分析也是可以的
由于前面几个靠前的基本是发包函数,所以可以接着向下分析异步的栈
1、给异步的函数下断
这里的异步是一个while循环,不断取出一些回调函数来执行,对于then前面的e.shift表示执行成功的情况,而后面的e.shift表示执行失败的情况,而e是一个数组,用于存放很多异步的回调函数,shift相当于栈里面的pop,用于从异步栈当中取出,执行,并删除栈顶的回调函数
注意下断点的时候一定要下第一个e.shift,否则对于一些多线程的情况可能断不下来
2、找到合适的时机让他断下
当接口地址是account/login的时候再去观察数组e
我们向下看调用栈,找到合适的下断位置(一定能够找到)
其实可以找到2处合适的位置
上面2处位置都可以,然后我们还需要记录一下n = n.then(e.shift(), e.shift());的位置在文件chunk-vendors.a1bfb9a0.js:formatted的第668行,然后先取消断点,等时机到了再打上!!!
然后我们重新运行
其实可以发现运行异步之前加密密码已经生成了😂😂😂,说明加密算法不在异步里面(我们假装没看见)
这个时候的接口地址正好是account/login,所以我们找到chunk-vendors.a1bfb9a0.js:formatted的第668行重新打上断点,然后运行
此时就进入到正确的异步栈了
进入数组的第一个函数
将所有断点移除,然后在异步栈里面下断
重新点击登录,进入异步栈里面发现加密参数已经生成,说明它不是由异步操作生成的,这种情况直接跳过异步,正常向下跟栈即可
其中大部分都是chunk,可以找一些有用的信息位置,不妨看一看有没有生成加密,如果没用加密信息了也没啥大不了的,直接往上一个找即可
果然很快就找到了加密位置
案例2
点点数据
受害者网站:https://www.diandian.com/
首先快速定位接口,发现是xhr可以跟栈,就比较巴适了
前三个函数很有可能是封装的发包函数,直接跟异步的栈
到异步的位置同样记录一下文件名和行号(因为异步有很多回调,需要等到时机再打断点)
app~253ae210.bad26c3.js:formatted 655行
根据url定位
在异步这里一定要进入第0个位置,如果不是就再次运行,直到断到数组的第0号位置
松开其他断点直接进入函数内部
在整个函数的作用域耐心查找关键点(加密一般是函数的形式)
很快就跟到加密参数生成的位置了
案例三
高考填报志愿网站
https://www.jizhy.com/
就当课后作业自行练习巩固即可