初见

高阶爬虫:破解 Instagram 签名加密算法「一」

2018-08-08  本文已影响968人  xiyouMc

阅读本篇预计需要 5 分钟

分享之前,我想和大家说件事:

“ 大家应该也看到了我最近更新的频率很低,原因就不说了。不过这种情况只会持续一段时间而已,如果要关注我的分享可以加我的微信 mcx1469 ,当然加我的时候注明下个人介绍。”

正文

Sign 算法我相信大家并不陌生,通俗的来说就是一种签名算法。在我们访问的很多 Http 请求中为了保证请求的安全性都会追加一种签名。

当然这种 Sign 算法的存在也是有必要的,一个很复杂、很精密的 Sign 算法能很大程度上提高服务的安全性。例如微信朋友圈的接口,现在几乎没人能破解。

所以今天我要分享的内容是:破解一个国外大厂的 Sign 算法。

当然我会分步骤的进行分享,目的是为了对各位读者在之后的技术中能有所帮助。

这里我就不绕弯子了,这个所谓的国外大厂其实就是 Facebook 。 而我进行破解的 Sign 算法则是 Instagram 的一套加密算法。后文中将由 Ins 来代替。

很多玩 Ins 的朋友应该都知道,无论是在 App 上 还是 PC 上都无法进行保存Ins 图片的操作。

这是因为 Ins 为了保护原创所以在 App 和 JS 上都动了手脚,不允许有保存操作。

对于很多技术人来说:越是不让我做什么,我越会去做什么。

所以市场上就出现了形形色色的关于 Ins 保存图片的小工具,这个我就不分享了。感兴趣的可以去搜一下,一大堆。

其实保存某张图片的原理很简单,就是 图片链接 + ?__a=1 就会得到一段 JSON 。

但是。。。

如果我要获取到某个 Ins 明星的所有照片,虽然我也可以通过 主页链接 + ?__a=1 来拿到,但问题是这种操作只能在你登录的状态。

我们可以来验证下:

CASE 1、 在登录 Ins 的情况下,获取 JSON 数据

a:打开 Ins 上一个明星的主页,注意这段链接

image

b: 在这个主页的链接之后,我们增加 ?__a=1 来看看

image

可以很明显的看到有一段 json ,而这段 json 正是 Wade 主页的一部分图片。

CASE 2、注销 Ins 的登录再来试试

image

在未登录的状态下,同样可以访问到 Wade 的主页。但这时候我们再来试试获取 JSON 数据。

image

网页出错,请求被拒绝。很明显我们已经没有权限去读取这段JSON。

所以通过这么一步步验证之后,我们会发现 Ins 的个人主页数据并不会这么简单的被获取到。

插个题外话,其实在 FB 的 ”隐私门“ 之前这种方式还是可以正常请求的,但自从那件事之后接口就被 Ban 了。

这也正式的引出了我今天的主题,如何在未登录的状态下获取 Ins 个人主页的图片信息。

很多人应该都注意到了在未登录情况下,我们至少还可以在浏览器上访问到这些数据。

而且我还可以告诉你,上滑可以分页拿到所有数据。

因此,这足以证明我们是完全可以通过代码来拿到这些数据的。至于怎么去拿,就需要我们一步步分析。

很多人可能会说用 SeleniumJS 就能解决,但问题是效率太低。所以这种方式我们不考虑,我们需要直接调用接口来获取。

这时候会用到抓包工具,我个人用的是 Charles 。

a: 打开抓包工具,抓到主页的数据。

image

可以看到,这就是 wade 的主页数据。

b: 找到我们需要的数据

那么我们需要的数据又在哪,其实很简单,我们在浏览器上打开 wade 主页之后随便找一个 字符串或者数字进行复制。

然后在抓包工具中进行搜索,就能找到它的位置。

image

例如我通过查找 Wade 的”个人介绍“ 成功的找到了抓包工具中的数据位置。

我们会发现其实这些数据就是在之前抓到的网页里面,我们将这个网页复制出来在文本编辑器中打开看看。

image

再次搜索之后,我们发现这些数据保存在一个命名为 window._sharedData 的 JS 字符串中。

我们可以将这段内容复制出来,然后用 JSON 格式化工具进行格式化会发现这就是一段 JSON 数据,而且也正是我们需要的。

image

细心的网友会发现,其实这段内容的位置是固定在 sharedData 里面的,因此我们可以通过正则表达式来匹配到:

image

这样我们就手动成功的通过各种复制拿到了一段数据。

不过这段数据并不是完整的,而是主页数据中的第一页。后续还有核心的分页操作。

(考虑到内容太长,核心的分页逻辑会在下一篇进行分享)

通过这一步步分析之后,我们得到了一个核心数据就是这段正则表达式。这时候我们可以通过代码来验证下:

image

如上我们将这段正则应用到代码中,执行之后:

image

到这里,我们就成功的通过代码来拿到了主页的部分数据。

大家可以看到这段代码很简单,但要写出这段代码是需要经过一步步的分析之后才能产生的。

其实这篇文章中讲到的只是一些常规数据的获取方式,还是很入门很入门的阶段。

上面拿到的数据也只是一部分,确切的说只是主页中的第一页数据,也就只有 10 来张图片信息。

而要获取到更全的数据,就需要分析其中的分页逻辑,也正是 Sign 算法的应用之处,也同样是我们要核心破解的点。

聚焦到接口上,其实就是:

image

而 Sign 字段则是 query_hash。

由于考虑到内容太长,接下来的内容会在下一篇进行分享。

谢谢大家的阅读

上一篇 下一篇

猜你喜欢

热点阅读