【网络爬虫教学】快速定位拼多多加密算法入口(四)

Hi,大家好,欢迎大家参阅由IT猫之家精心制作的JS实战系列教学课程,我是作者叮当猫,在本期教学中,我将引导大家快速寻找出加密函数的入口,本期教学仍然是以并爹爹(某多)旗下的某个商城作为目标,在此之前,我已经做过两期教学,如果您还未曾看过,欢迎前往:拼夕夕网络爬虫频道 查阅,本期仅作为补充完善前两期的不足,如大家在此之后仍有不懂的欢迎留言,或加入我们的QQ技术交流群探讨:544185435


由于该加密参数是在异步地址触发后携带的,所以我们需要先找到该地址,然后使用Chrome提供的XHR断点机制进行捕获执行过程,这里,我们经过观察后发现携带该加密参数的url为: https://youhui.pinduoduo.com/network/api/goods/common/list ,那么我们跟前面文章一样,将它加入XHR断点匹配条件中,并勾上该规则,如上图。

开启XHR断点监控后,我们直接拖动右侧的滚动条,如无意外,网页加载会被打断,并如上图所示停了下来,为了更好的分析代码,我们需要点击左边下角箭头所指向的花括号,作用是格式化代码。

如无意外的话,我们将会看到包含我们需要的携带了加密字段的一串字符串便会出现在我们眼前,(如果你还没看到,请不用着急,可能还没加载出来罢了,要么就是你写错地址了)。

我们不难发现,并爹爹新版本的加密方案采用了大量的异步函数,这使得我们调试起来增加了不少的难度,为了减少工作量,我整理出了一种较为取巧的方式,当然肯定还有更好的方式,这仅仅只是我想到的其中的一种方式而已,这种方式是通过定位一个必经函数,然后判断其次数,当密文区间于x与y之间,那么我们便可以通过当此调用单步往下执行寻找出加密函数的入口。

我们这里以 var l = x(e, t, n); 作为定位函数,并在左边打上断点,然后我们拖动滚动条,(记得先关闭XHR的断点哦),如无意外,它会与前面的一样,会断了下来,那么接下来我们要做的是点击面板上的播放标志(这好像是老式DVD里的播放标志?),别管他是啥,点就对了,重点是要记录,它会在第几次出现包含加密内容的字符串,不过我这里点了好几次,都没看到,而且,已经点完了,so,它并不是我们要的定位点,pass掉吧,别灰心,没有失败谈什么成功呢?是吧?

既然上一个函数不行,那就再找一个呗,如图,我们这次定位到:return this._invoke(t, e) 这个方法中,同样的,我们也是点击面板上的那个“播放标志”其实我们也可以按“F8”键的啦,这个随便了,(要记得先放行本次的XHR捕获哦!),不难发现,我们在点击第二次的时候,包含加密数据的字符串出现在我们的眼中了,那么这个定位极有可能就是正确的,接着,我们就按F11单步的走吧,这里我们需要注意了,慎用F10,因为按F10,很容易就错过了,特别是这种异步函数发起的请求。

我们现在要做的是一直按F11往下走,但不要狂按,要根据实际情况来操作,否则很有可能就错过了。

看到上图圈圈里圈着的那个函数了嘛?这里有个l的方法里面包含了一个n的变量,其实它不是我们要找的函数入口,之所以截出来是想告诉大家,千万不要错过任何一个可能的细节,万一这个l函数就是呢?是吧,所以我们每走一步都需要特别留意每一个函数的调用,必要时,我们可以将这个函数打印到控制台中,看看是否为我们找到函数。

所以,我们继续往下走,如上图,我们又尝试输出一个函数,可惜,这也不是我们需要的函数,别放弃,这也意味着你离成功更近了,我们继续往下走,继续按F11,总之我们不要放过任何一个可能的函数。

皇天不负有心人,最终,我们在这个“he”的函数中找到了它,没错,从上图看来,它并不特别且一点也不显眼,它就这么一个“e[c(“0xec”, “ogba”)](he)”便调用了加密,我们如果不够心细,根本就不可能发现它,对吧,我们通过控制台的输出可以看到,这个he就是我们要找的入口函数,怎么样?其实也不难找吧?
总结
本期教学主要是为了弥补前一期的不足,在这期的教学中,我给大家演示了一便详细的调试过程,以便于大家更好的掌握该技巧,大家也可以到Youtube 或到 Youku 观看我们提供的教学视频,(如果您喜欢本系列视频,欢迎点击订阅我们的频道)在此声明:本站提供的这一系列教学仅供学术与交流之用,并非有意或蓄意破坏相关网站,如您认为本站侵犯了您的权益,请留言,我将配合删除一切相关的文章、视频;目前我们的视频仅上传了Youtube与Youku,都是免费开放的!