js 逆向系列01-断点&方法栈

admin 2024年2月10日14:48:20评论15 views字数 1068阅读3分33秒阅读模式

如果一个网站存在加密,其大致的运行流程如下: 

网站代码运行时间轴 

1、加载 html 

2、加载 js 

3、运行 js 初始化 

4、用户触发事件 

5、调用 js 

6、加密函数 

7、给服务器发送信息(创建 XHR-send) 

8、接收到服务器返回数据 

9、执行 js 解密函数 

10、刷新网页

断点类型

在 js 逆向调试中,一般有如下几种断点:

DOM 断点DOM 事件断点XHR 断点代码行断点(手动下断)代码的断点 debugger(源码中写好的)全局事件断点(浏览器事件断点)异常捕获断点

下面介绍几种常用的断点。

DOM 断点

DOM 断点执行的比较靠前,距离加密函数比较远,无法根据栈调用快速定位,并且需要在渲染的时候,属性发生改变,才能断住。例如,下图中的 search 按钮,审查元素后,下一个 DOM 断点,此时点击 search 按钮,是无法断住的,但是在 DOM breakpoint 中是可以看到断点存在,就是因为属性为发生改变,无法断住。

js 逆向系列01-断点&方法栈

DOM 事件断点

如果 DOM 断点无法下断,可以用 DOM 事件下断,跟 DOM 断点特性一致,距离加密函数比较远,无法根据栈调用快速定位。下断的方法如下:

js 逆向系列01-断点&方法栈

在审查元素之后,点击对应行,在右侧的 event listeners 窗口,取消勾选 ancestors all,只显示当前的事件监听器,接着点击对应的代码行跳入下断即可:

js 逆向系列01-断点&方法栈

DOM 断点和 DOM 事件断点,在时间轴的第四步,也就是用户触发事件的阶段。


XHR 断点

XHR 就是 XML HTTP REQUEST,XHR 断点是在 send 的阶段下断,即时间轴中的第七步,执行的比较靠后,距离加密函数比较近,可以根据栈快速定位。 注意:非 XHR 发送的就断不住 以下面的网站为例:

js 逆向系列01-断点&方法栈

随便输入一个手机号,查看其 http request 的 url 为 authcode/,可以利用该 url 下一个 XHR 断点。

js 逆向系列01-断点&方法栈

在 source 窗口添加 XHR 断点,输入 url: /autocode/并勾选即可,下面再次发送验证码:

js 逆向系列01-断点&方法栈

点击发送,在 send 函数处卡住,成功断住。借助这个例子也可以看一下方法栈的情况。

js 逆向系列01-断点&方法栈

在这里可以清楚看到完整的调用关系。


全局事件断点(浏览器事件断点)

在 source 界面,展开 event listener breakpoints,点击对应的事件下断即可。

js 逆向系列01-断点&方法栈


异常捕获断点

有时候想要更清晰地了解 try catch 的异常处理,可以勾选 pause on caught exceptions,此时代码运行遇到异常时,不会进行 catch 块,而是会报错并且断住,方便分析,一般在跟环境时使用。

js 逆向系列01-断点&方法栈


原文始发于微信公众号(Crush Sec):js 逆向系列01-断点&方法栈

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月10日14:48:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   js 逆向系列01-断点&方法栈https://cn-sec.com/archives/2487009.html

发表评论

匿名网友 填写信息