爬虫入门之查找JS入口篇(二)

各位老铁们,当你划到这个视频,请帮忙点个双击加个关注,感谢老铁们。。。。额。。。不好意思,走错片场了,我们今天继续来将如何查找JS的入口,话不多说,开始吧。

目标地址:https://bbs.nubia.cn/

目的:获取该网页的源代码。

工具:Chrome浏览器

第一步:打开Chrome浏览器,地址栏输入网址,并按下F12,打开调试器,再按下回车,进行访问。(如果之前访问过这个网站,还请在 Application面板里面清除掉相关的缓存和记录。),你会看到如下的现象:

640?wx_fmt=png

又是 debugger,那我们按照第一篇下个条件断点试试?

没用的,这个坑我踩过了,只会让你的浏览器一直在那不停的转,然后你还关不掉,必须用 任务管理器 杀掉进程才行。任凭你内存有多大,也抵不过人家的无限循环呀。

下面介绍两种方法来过这个debugger:

方法一,禁用断点法:

)

640?wx_fmt=png

点击面板上的这个 按钮,目的是禁用所有断点,这样就不会debugger了。

方法二,置空函数法:

640?wx_fmt=png

跟踪堆栈,看看是哪个函数导致的,然后将这个函数置空。

640?wx_fmt=png

原来是递归调用,反正从0开始一直往后加,加到你吐血为止。

那我们将这个函数置空试试。

640?wx_fmt=png

按F5运行,就可以看到轻松过了这个debugger。

但还是有问题,F5过后,浏览器虽然载入了内容,但还是在不停的刷新,好了一会才停下来,原因在这里:

640?wx_fmt=png

关于 setInterval函数,请自行百度了解,这里不做深入分析。

停止刷新后,Network面板如下:

640?wx_fmt=png

面板上深色的两行就是我们要访问的网站,为什么会访问两次,第一次和第二次有什么区别呢?

第一次请求的内容,(也就是我们用requests库请求的内容)

640?wx_fmt=png

第二次请求的内容:

640?wx_fmt=png

嗯,这就是我们的所需要的网页源代码。

一般这种情况下,第二次请求肯定是比第一次多了什么内容,才获取到了正确的数据,我们来比对下请求头:

第一次:

640?wx_fmt=png

第二次:

640?wx_fmt=png

用我5000度的近视眼可以看出,是多了 Cookie字断,原来要带Cookie才能正常请求啊。。。。。。

那我们分别来看看Cookie值从哪里获取。

640?wx_fmt=png

点击第一个页面,返回的是 acw_tc 和 aliyungf_tc:

640?wx_fmt=png

点击第二个页面,没有返回cookies;

点击第三个页面,返回的是 acw_sc__v3:

640?wx_fmt=png

点击第四个页面,返回的是 SERVERID:

640?wx_fmt=png

目前就差 acw_sc__v2 不知道是哪里返回的了,如果你对上面的图有印象的话,你会发现它在这里:

640?wx_fmt=png

也就是我们第一次请求页面是的返回代码里面。

我们将 script 标签内的代码复制出来,使用 https://beautifier.io/ 这个网站美化下,注意勾选这里:

640?wx_fmt=png

然后复制到文本文档里,并用UE打开,当然你也可以复制到控制台下运行试试,看看有啥结果,坑我已踩,就不再赘述。

我们在代码里面搜索一下 acw_sc__v2:

640?wx_fmt=png

在这个函数里面,我们再看看 setCookie函数:

640?wx_fmt=png

这段代码,没多少JS知识的我都能知道是干嘛的。

原来就是 设置一个 cookie,第一个字段为 name,值是value ,以及其他的字段。这下明白了,是在这里设置的cookie。

我们再看看 reload 函数在哪里调用:

640?wx_fmt=png

原来是这里调用的,setTimeout函数的作用可自行百度。

这下我们知道 value 的实参就是 arg2了。

那arg2 该怎么计算呢?

我们一步一步开始分析:

    var _0x23a392 = arg1[_0x55f3('0x19', 'Pg54')]();	
    arg2 = _0x23a392[_0x55f3('0x1b', 'z5O&')](_0x5e8b26);

arg2是通过 执行_0x23a392[_0x55f3('0x1b', 'z5O&')] 这个函数返回而来,实参是 _0x5e8b26,这一堆代码是经过混淆的,人很难识别到底是干嘛的。

而这个 _0x23a392 肯定是与arg1相关的。

后面的内容因会涉及到侵权,不能细讲,公众号还想多活几天。只能说下思路。

第一个行代码是 arg1的值,是个字符串;

var arg1 = '8BFBB8FAFA6705664B5953DE4F7F48CF68D2DD5D';

第二行代码是个大数组,值都是字符串

var _0x4818 = ['csKHwqMI', 'ZsKJwr8VeAsy', 'UcKiN8O/wplwMA==', 'JR8CTg==', 'YsOnbSEQw7ozwqZKesKUw7kwX8ORIQ==', 'w7oVS8OSwoPCl3jChMKhw6HDlsKXw4s/YsOG', 'fwVmI1AtwplaY8Otw5cNfSgpw6M=', 'OcONwrjCqsKxTGTChsOjEWE8PcOcJ8K6', 'U8K5LcOtwpV0EMOkw47DrMOX', 'HMO2woHCiMK9SlXClcOoC1k=', 'asKIwqMDdgMuPsOKBMKcwrrCtkLDrMKBw64d', 'wqImMT0tw6RNw5k=', 'DMKcU0JmUwUv', 'VjHDlMOHVcONX3fDicKJHQ==', 'wqhBH8Knw4TDhSDDgMOdwrjCncOWwphhN8KCGcKqw6dHAU5+wrg2JcKaw4IEJcOcwrRJwoZ0wqF9YgAV', 'dzd2w5bDm3jDpsK3wpY=', 'w4PDgcKXwo3CkcKLwr5qwrY=', 'wrJOTcOQWMOg', 'wqTDvcOjw447wr4=', 'w5XDqsKhMF1/', 'wrAyHsOfwppc', 'J3dVPcOxLg==', 'wrdHw7p9Zw==', 'w4rDo8KmNEw=', 'IMKAUkBt', 'w6bDrcKQwpVHwpNQwqU=', 'd8OsWhAUw7YzwrU=', 'wqnCksOeezrDhw==', 'UsKnIMKWV8K/', 'w4zDocK8NUZv', 'c8OxZhAJw6skwqJj', 'PcKIw4nCkkVb', 'KHgodMO2VQ==', 'wpsmwqvDnGFq', 'wqLDt8Okw4c=', 'w7w1w4PCpsO4wqA=', 'wq9FRsOqWMOq', 'byBhw7rDm34=', 'LHg+S8OtTw==', 'wqhOw715dsOH', 'U8O7VsO0wqvDvcKuKsOqX8Kr', 'Yittw5DDnWnDrA==', 'YMKIwqUUfgIk', 'aB7DlMODTQ==', 'wpfDh8Orw6kk', 'w7vCqMOrY8KAVk5OwpnCu8OaXsKZP3DClcKyw6HDrQ==', 'wow+w6vDmHpsw7Rtwo98LC7CiG7CksORT8KlW8O5wr3Di8OTHsODeHjDmcKlJsKqVA==', 'NwV+', 'w7HDrcKtwpJawpZb', 'wpQswqvDiHpuw6I=', 'YMKUwqMJZQ==', 'KH1VKcOqKsK1', 'fQ5sFUkkwpI=', 'wrvCrcOBR8Kk', 'M3w0fQ==', 'w6xXwqPDvMOFwo5d'];

然后就是一个 自执行的函数,这个函数很重要,因为它是对 上面的大数组进行操作的,这是它的实参(_0x4818, 0x15b),函数里面有一些坑,你只需要注意:

有没有改变实参,有没有改变全局变量。

这里只改变了这个大数组,函数里面其他不相干的代码可以全部干掉。

这是我运行这个精简函数后得到的大数组

_0x4818 = ["wqImMT0tw6RNw5k=", "DMKcU0JmUwUv", "VjHDlMOHVcONX3fDicKJHQ==", "wqhBH8Knw4TDhSDDgMOdwrjCncOWwphhN8KCGcKqw6dHAU5+wrg2JcKaw4IEJcOcwrRJwoZ0wqF9YgAV", "dzd2w5bDm3jDpsK3wpY=", "w4PDgcKXwo3CkcKLwr5qwrY=", "wrJOTcOQWMOg", "wqTDvcOjw447wr4=", "w5XDqsKhMF1/", "wrAyHsOfwppc", "J3dVPcOxLg==", "wrdHw7p9Zw==", "w4rDo8KmNEw=", "IMKAUkBt", "w6bDrcKQwpVHwpNQwqU=", "d8OsWhAUw7YzwrU=", "wqnCksOeezrDhw==", "UsKnIMKWV8K/", "w4zDocK8NUZv", "c8OxZhAJw6skwqJj", "PcKIw4nCkkVb", "KHgodMO2VQ==", "wpsmwqvDnGFq", "wqLDt8Okw4c=", "w7w1w4PCpsO4wqA=", "wq9FRsOqWMOq", "byBhw7rDm34=", "LHg+S8OtTw==", "wqhOw715dsOH", "U8O7VsO0wqvDvcKuKsOqX8Kr", "Yittw5DDnWnDrA==", "YMKIwqUUfgIk", "aB7DlMODTQ==", "wpfDh8Orw6kk", "w7vCqMOrY8KAVk5OwpnCu8OaXsKZP3DClcKyw6HDrQ==", "wow+w6vDmHpsw7Rtwo98LC7CiG7CksORT8KlW8O5wr3Di8OTHsODeHjDmcKlJsKqVA==", "NwV+", "w7HDrcKtwpJawpZb", "wpQswqvDiHpuw6I=", "YMKUwqMJZQ==", "KH1VKcOqKsK1", "fQ5sFUkkwpI=", "wrvCrcOBR8Kk", "M3w0fQ==", "w6xXwqPDvMOFwo5d", "csKHwqMI", "ZsKJwr8VeAsy", "UcKiN8O/wplwMA==", "JR8CTg==", "YsOnbSEQw7ozwqZKesKUw7kwX8ORIQ==", "w7oVS8OSwoPCl3jChMKhw6HDlsKXw4s/YsOG", "fwVmI1AtwplaY8Otw5cNfSgpw6M=", "OcONwrjCqsKxTGTChsOjEWE8PcOcJ8K6", "U8K5LcOtwpV0EMOkw47DrMOX", "HMO2woHCiMK9SlXClcOoC1k=", "asKIwqMDdgMuPsOKBMKcwrrCtkLDrMKBw64d"]

自执行函数后面是一个 解密字串的函数,这个也不能细讲,基本上后面很很多地方都调用了这个函数。

这里只需要关注:

它的返回值是啥就可以了。

与返回相关的代码可以全部留下,其他不相关的代码可以全部删掉。

这是我调用这个精简函数后得到的值:

640?wx_fmt=png

这样我们可以将所有调用这个函数的地方通通找出来,然后将相应的结果替换进去,这样会使混淆的代码变得非常清晰。

还原后的代码长这样:

640?wx_fmt=png

我们把"unsbox" 和 hexXor这两个函数及arg1和_0x5e8b26分别拷出来:

640?wx_fmt=png

我们看到 arg2的值已经出来了,看看和浏览器的值是否一致:

640?wx_fmt=png

可以看出是一致的。

到此,已经全部分析完毕,每次请求得到的arg1可能都不一样,因此每次的Cookies都不一样,所以将arg1获取后再通过计算获取arg2的值,带着这个值再次请求,你需要用到session。

640?wx_fmt=png

代码我就不放了,请大家自行编写。完!

声明:本文如有侵权,请告知本人删除,谢谢。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值