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,否则对于一些多线程的情况可能断不下来

### 关于JavaScript中的逆向启动器行为或调试技术 在讨论 JavaScript 中的逆向启动器(reverse starter)及其相关的行为或调试方法之前,需理解 JavaScript 的执行环境以及其事件循环机制如何影响函数调用的行为。 #### 函数调用的基础概念 JavaScript 是一种单线程语言,在运行过程中会维护一个 **调用** 来跟踪正在执行的函数。每当一个新的函数被调用时,它会被推入顶;当该函数返回时,则从中弹出[^3]。这种机制对于分析程序流非常重要,尤其是在处理错误时,可以通过查看调用来定位问题所在。 #### 调试工具和技术 现代浏览器提供了强大的开发者工具用于调试 JavaScript 应用程序。以下是几种常用的调试技术和实践: 1. **断点设置** 使用浏览器内置的开发者工具可以方便地在特定代码行处设置断点。一旦脚本执行到这些位置就会暂停,允许开发人员逐步执行代码并观察变量状态变化情况。 2. **控制台日志记录** 开发者经常通过 `console.log()` 方法打印消息至控制台以便监控应用程序内部工作状况。这种方法简单有效但可能不够精确全面。 3. **源映射(Source Maps)支持** 当使用编译型框架(如React, Vue等),实际部署的是经过转换后的文件而非原始源码。此时启用 source maps 功能可以帮助我们看到更接近真实编写形式下的错误信息路径[^4]。 4. **异步操作追踪** 对于涉及 Promise 或 async/await 结构的应用场景来说,特别需要注意它们是如何改变传统同步流程逻辑从而可能导致难以预料的结果或者异常捕获失败等问题的发生概率增加的情况。 5. **性能剖析(Profile)** 利用 Chrome DevTools Performance 面板能够深入洞察应用加载时间分布详情图谱,并识别潜在瓶颈区域进而优化整体表现效率水平。 #### 示例代码展示如何利用try-catch语句捕捉全局未定义变量引用错误实例 ```javascript function testError() { try { nonExistentVariable; // This will throw a ReferenceError. } catch (e) { console.error(`Caught an error: ${e.message}`); } } testError(); ``` 上述例子展示了基本的错误处理方式之一——`try...catch`结构,它可以用来捕获并响应运行时期间发生的各种类型的错误,包括但不限于语法错误(SyntaxErrors), 类型错误(TypeError) 和 参考错误(ReferenceError)[^5]. #### 总结说明 尽管这里提到的内容主要围绕常规意义上的前端JS编程范畴展开论述,但对于所谓“反向启动”的具体含义如果是指某种特殊模式下服务端渲染(SSR)/客户端初始化过程里所遇到的独特挑战而言,则还需要进一步澄清确切需求才能给出更具针对性解答方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值