今天我们继续来介绍如何查找JS的入口。
目标地址:https://www.qimai.cn/rank
目的:爬取该网页上的榜单。
工具:Chrome浏览器 + 油猴插件
可用打XHR断点的方法查找加密位置,但是会非常卡,卡到你怀疑人生。
关于如何查找,请参考这篇文章,https://mp.weixin.qq.com/s/1E_ONUnMwTFozd9-dB70Yw
今天介绍一种比较另类,可以说是投机取巧,碰运气的方法。
请确保 浏览器已安装好 油猴插件,并添加如下脚本:
下面开始我们的查找之旅吧。
抓包分析得知,它的榜单在这里:
只有 analysis 这一个加密参数,一般情况下,我们会直接全局搜索(ctrl + shift + F) 这个参数,然而什么也搜不到。这种方法行不通。
我们打开 油猴脚本,如图:
刷新后,可以看到控制台有很多这样的信息:
像上次一样,我们在这里设置一个断点:
再次刷新页面,停在这里:
再看看堆栈:
点进去 m 函数,里面看看:
这里的n = 75,只是单个的值,而我们刚才在控制台看到打印了狠多这样的值,应该会有个循环还是什么,所以我们继续看下面的 C 函数:
嗯,果然是个 for循环,这时候我们把断点设置在 return 的 位置上:
有两个目的:for循环会一直循环多次,不那么容易看到结果,另外一个就是 有可能这里的for循环还没进来,参数就已经生成成功了。
设置好断点后,我们有两个选择:按 F5让浏览器继续往下跑,刷新页面重新加载页面。
这里我选择 刷新页面,害怕错过什么的我,还是重头来过吧,本来调试JS,就是个不断重试的过程。
刷新页面后,停在了这里:
说明没有进入for循环,我们再看看堆栈:
我们往下点击 gXmS 这个,看看是什么:
再分别看看 x,T,H,P是什么:
果不其然,我们看到了 analysis,也就是这里的P,再搜索这个函数里哪里有用到P,并分别打上断点:
运行后,依次取消之前的两个断点,停在了这里:
把 这行我们分别运行下看看:
可以看到,好我们之前抓包的api地址很相似了。
再把断点取消,然浏览器跑起来,看看第一个api地址:
https://api.qimai.cn/rank/indexPlus/brand_id/1?analysis=eEcbRABeWx9ZXlRVQDRbTRcbVBNRXlRvWVQfCSQUDVQCAFYHBAQCBgNwG1U%3D&analysis=eEcbRABeWx9ZXlRVQDRbTRcbVBNRXlRvWVQfCSQUDVQCAFYHBAQCBgNwG1U%3D
分别在新开的标签页里面赋值看看:
结果显示 不是 -1,说明我们之前计算的字串 是 api地址 的子串,也就是加密的位置就是那里。至此,JS入口已找到。
请读者自行扣出加密的代码验证。