Chorme调试技巧(易盾滑块轨迹JS调试)
Chorme调试技巧
一般来说,我们如果想要对JS参数进行调试的话,都是在Network面板中擦欧总。首先清理数据包,之后禁用缓存,然后刷新页面,点击登录,在search中寻找我们需要的加密参数等等。比如一个数据包中有password参数经过了加密,因为全局匹配的搜索结果通常情况下比较多,所以我们会加一些符号来过过滤:
- password:
- password =
但是更方便的方法是查看Network选项卡中数据包的Initiator一栏中的堆栈调用信息。
断点
我们任意点击一个堆栈信息进去们可以在Sources面板之中点击序号栏下断点。然后点击页面上的例如登录按钮让它触发事件,我们配合右边的Call Stack去查看我们的关键信息到底在什么地方。
我们也可以选择去下XHR断点,因为许多请求是XHR请求,我们就可以复制一下XHR包的URL,在Sources面板中新建XHR Breakpoints就可以在发起网页这个XHR请求的时候断点。
我们也可以在Sources面板中,选择右边的Event Listener Breakpoints,下一个事件断点。比较常用的是Mouse里边的click断点,因为我们要抓的许多加密参数包是点击按钮后才会触发的。
这里的事件断点通常会断在一开始的HTML页面,我们可以一步步深入去了解事件加密。
通常我们在Sources面板中下断点,直接点击相应的序号栏即可。不过我们也可以选择条件断点Contional Breakpoint,也就是符合某种条件再断点,区别于无差别断点。
当你输入的表达式结果为真就会进行断点,比如password=='123'
,当我们输入的密码是123的时候就会进行断点。这个通常用于有循环的情况,我们只需要查看最后一次结果,这样就可以避免一步步调试进入循环。
而且条件断点我们并不必须输入表达式,可以直接输入console.log(password)
,这样虽然不会断下来,但是会有一个输出。这相当于一个console暗桩,这样即便是页面一开始加载的参数我们也可以得知,而且避免了断点卡顿。这种断点通常用于滑块验证码,滑块轨迹的每一次输出我们不可能每次移动一次让它卡顿一次,使用console暗桩就可以得到一个打印输出的效果。
监听
我们可以在console中进行以下操作,首先在元素面板选中某一调试节点,之后在console中输入monitorEvents($0)
,就可以在控制台输出相关的事件信息,这就是一个事件监听。如果觉得监听所有事件比较麻烦,我们可以写为monitorEvents($0,"click")
,这样就只会监听click事件。
如果是想监听节点的某一方法,我们可以这样写monitor($0.onClick)
,这样我们就会监听当前节点的点击方法。
使用watch
还可以监听变量。在Sources面板中有watch栏目,里边可以监听变量何时变化。比如我们可以添加password加密参数,在断点的配合下一步步深入,直到password数值改变,我们就可以定位到具体的JS加密地点。
易盾滑块轨迹调试
我们首先滑动滑块,再Network里边抓包,得到堆栈调用,再最后一步下断点。
查看堆栈信息步入,我们发现了p里边的data,data赋值的R是我们需要的,我们在这里下断点。
断点运行后我们可以发现R的数值来自于t.data,我们继续下断点
我们得知e是我们需要的值,但是进一步跟进之后无法获取到,我们在它前方下断点。
最终找到了data加密的地方,n的值都是经过加密的。n既然使用了join,那一定是一个数组,所以我们搜索上边的traceData。
在console里边输入monitor(Array.prototype.push)
,我们就可以知道数组添加的轨迹信息了。但是这个监听的缺点是不能定位,只能查看。如果要进一步定位,我们可以查找traceData.push
,找到最终的加密JS函数,笔者在这里不再深入,读者稍加思考即可找到。如果要关掉监控,则使用unmonitor(Array.prototype.push)
。