当前位置: 首页 > article >正文

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/ 

就当课后作业自行练习巩固即可


http://www.kler.cn/a/282154.html

相关文章:

  • 搭建es环境
  • MongoDB在现代Web开发中的应用
  • 螺旋矩阵II(leetcode 59)
  • 【软件测试】设计测试用例的万能公式
  • 【MySQL】InnoDB内存结构
  • 基于SpringBoot的旅游网站(程序+数据库+报告)
  • Faiss入门心得---向量数据库Faiss的搭建与使用
  • C#/WinForm实现炸弹人游戏
  • PaddleNLP 3.0 支持大语言模型开发
  • 新手学习打怪之编译安装LAMP和LNMP
  • 力扣850.矩形面积 II
  • Python的requests库详细介绍
  • 【持续更新】Mχ Plaayer Pro 1.86.0安卓知名播放器最新免费高级修改版
  • 深入浅出LangChain:从模型调用到Agents开发的全流程指南
  • 【React】跨域问题详解及解决方案
  • 手机三网状态实时查询分享
  • 软件设计模式 - 汇总
  • MyBatis的学习————下篇
  • SQL部分一
  • 【Docker】Docker学习01 | 什么是docker?
  • 【给女朋友讲C++】C++的调试之gdb
  • Wordpress 6.x 修改文件上传大小限制
  • 数学建模---论文写作
  • C# 数组,List,Stack,Dictionary,Queue,LinkedList 如何选择
  • java图片转pdf
  • electron 两个渲染进程之间通信