断点调试与插桩方法(以某音a_bogus为例)

以接口aweme/v1/web/aweme/post/为例(这是用户作品列表的接口),这个接口是GET请求,我们要找到a_bogus参数的生成位置。

XHR/提取断电

这种断点方式能够在发包上断住,一般是send方法
在这里插入图片描述
添加后发起请求就行在发包位置debugger
在这里插入图片描述
大家可以根据调用堆栈一步一步回调,一般来说接口肯定是在发包前生成好的,当然也可以锁定到bdm.jse这个堆栈,按自己的经验可以进行尝试
在这里插入图片描述

添加断点

双击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进行下一步调试
在这里插入图片描述
这个就是实际的生成位置了,控制台打印一下就能佐证了。
在这里插入图片描述

感谢观看,讲解到此结束~~~

posted @ 2024-08-08 20:11  七夜魔手  阅读(33)  评论(0编辑  收藏  举报  来源