断点调试与插桩方法(以某音a_bogus为例)
以接口aweme/v1/web/aweme/post/
为例(这是用户作品列表的接口),这个接口是GET
请求,我们要找到a_bogus
参数的生成位置。
XHR/提取断电
这种断点方式能够在发包上断住,一般是send
方法
添加后发起请求就行在发包位置debugger
大家可以根据调用堆栈一步一步回调,一般来说接口肯定是在发包前生成好的,当然也可以锁定到bdm.js
的e
这个堆栈,按自己的经验可以进行尝试
添加断点
双击bdm.js
的第一个e
就能跳转到它的执行位置,添加断点,让程序执行到这一步
这里我们要留意一下apply
这个函数,它允许你调用一个函数,同时可以为这个函数指定 this 值(函数运行时指向的对象)
,我们可以简单理解它能进行赋值,这里我们没法直接得到它的结果
添加日志
从这里开始下面的操作就是所谓的插桩
了,利用插桩
可以让程序吐出日志信息,按下图方式添加s.apply(b, u)
的日志点,运行过程中会自动打印s.apply(b, u)
的值
重新发包后,在控制台就能看到打印出了几种数据格式,其中第一个红框就是aweme/v1/web/aweme/post/
接口后面的参数,不过没有a_bogus
参数,但是第二红框的数据结构跟a_bogus
参数是一样的,所以我们大胆推测这个就是a_bogus
的值,只要通过对比请求接口参数就能确定了。
添加条件断点
上面我们知道了a_bogus
的生成位置,但是我们得知道它是哪一个生成的才能知道固定的生成代码,所以我们要把日志断点改成条件断点
在原来的基础上进行修改断点
,改成条件断点
,然后输出s.apply(b, u) && s.apply(b, u).length == 160
这段代码的用意是,我们知道了a_bogus
的长度是160(注意:我调试是160,但是大家可能会不一样,自己计算得到就行
),当有生成值且值的长度是160时断住
重新发包并断住后,可以看到这就是我们想要的
然后单步调入
或者F9
进行下一步调试
这个就是实际的生成位置了,控制台打印一下就能佐证了。
感谢观看,讲解到此结束~~~
本文来自博客园,作者:七夜魔手,转载请注明原文链接:https://www.cnblogs.com/ranbox/p/18461038