阅读本篇预计需要 5 分钟
分享之前,我想和大家说件事:
“ 大家应该也看到了我最近更新的频率很低,原因就不说了。不过这种情况只会持续一段时间而已,如果要关注我的分享可以加我的微信 mcx1469 ,当然加我的时候注明下个人介绍。”
正文
Sign 算法我相信大家并不陌生,通俗的来说就是一种签名算法。在我们访问的很多 Http 请求中为了保证请求的安全性都会追加一种签名。
当然这种 Sign 算法的存在也是有必要的,一个很复杂、很精密的 Sign 算法能很大程度上提高服务的安全性。例如微信朋友圈的接口,现在几乎没人能破解。
所以今天我要分享的内容是:破解一个国外大厂的 Sign 算法。
当然我会分步骤的进行分享,目的是为了对各位读者在之后的技术中能有所帮助。
这里我就不绕弯子了,这个所谓的国外大厂其实就是 Facebook 。 而我进行破解的 Sign 算法则是 Instagram 的一套加密算法。后文中将由 Ins 来代替。
- 1、为什么要破解这套加密算法
很多玩 Ins 的朋友应该都知道,无论是在 App 上 还是 PC 上都无法进行保存Ins 图片的操作。
这是因为 Ins 为了保护原创所以在 App 和 JS 上都动了手脚,不允许有保存操作。
对于很多技术人来说:越是不让我做什么,我越会去做什么。
所以市场上就出现了形形色色的关于 Ins 保存图片的小工具,这个我就不分享了。感兴趣的可以去搜一下,一大堆。
其实保存某张图片的原理很简单,就是 图片链接 + ?__a=1 就会得到一段 JSON 。
但是。。。
如果我要获取到某个 Ins 明星的所有照片,虽然我也可以通过 主页链接 + ?__a=1 来拿到,但问题是这种操作只能在你登录的状态。
我们可以来验证下:
CASE 1、 在登录 Ins 的情况下,获取 JSON 数据
a:打开 Ins 上一个明星的主页,注意这段链接
b: 在这个主页的链接之后,我们增加 ?__a=1 来看看
可以很明显的看到有一段 json ,而这段 json 正是 Wade 主页的一部分图片。
CASE 2、注销 Ins 的登录再来试试
在未登录的状态下,同样可以访问到 Wade 的主页。但这时候我们再来试试获取 JSON 数据。
网页出错,请求被拒绝。很明显我们已经没有权限去读取这段JSON。
所以通过这么一步步验证之后,我们会发现 Ins 的个人主页数据并不会这么简单的被获取到。
插个题外话,其实在 FB 的 ”隐私门“ 之前这种方式还是可以正常请求的,但自从那件事之后接口就被 Ban 了。
这也正式的引出了我今天的主题,如何在未登录的状态下获取 Ins 个人主页的图片信息。
- 2、*分析思考+实践
很多人应该都注意到了在未登录情况下,我们至少还可以在浏览器上访问到这些数据。
而且我还可以告诉你,上滑可以分页拿到所有数据。
因此,这足以证明我们是完全可以通过代码来拿到这些数据的。至于怎么去拿,就需要我们一步步分析。
很多人可能会说用 SeleniumJS 就能解决,但问题是效率太低。所以这种方式我们不考虑,我们需要直接调用接口来获取。
这时候会用到抓包工具,我个人用的是 Charles 。
a: 打开抓包工具,抓到主页的数据。
可以看到,这就是 wade 的主页数据。
b: 找到我们需要的数据
那么我们需要的数据又在哪,其实很简单,我们在浏览器上打开 wade 主页之后随便找一个 字符串或者数字进行复制。
然后在抓包工具中进行搜索,就能找到它的位置。
例如我通过查找 Wade 的”个人介绍“ 成功的找到了抓包工具中的数据位置。
我们会发现其实这些数据就是在之前抓到的网页里面,我们将这个网页复制出来在文本编辑器中打开看看。
再次搜索之后,我们发现这些数据保存在一个命名为 window._sharedData 的 JS 字符串中。
我们可以将这段内容复制出来,然后用 JSON 格式化工具进行格式化会发现这就是一段 JSON 数据,而且也正是我们需要的。
细心的网友会发现,其实这段内容的位置是固定在 sharedData 里面的,因此我们可以通过正则表达式来匹配到:
这样我们就手动成功的通过各种复制拿到了一段数据。
不过这段数据并不是完整的,而是主页数据中的第一页。后续还有核心的分页操作。
(考虑到内容太长,核心的分页逻辑会在下一篇进行分享)
通过这一步步分析之后,我们得到了一个核心数据就是这段正则表达式。这时候我们可以通过代码来验证下:
如上我们将这段正则应用到代码中,执行之后:
- 3、*总结
到这里,我们就成功的通过代码来拿到了主页的部分数据。
大家可以看到这段代码很简单,但要写出这段代码是需要经过一步步的分析之后才能产生的。
其实这篇文章中讲到的只是一些常规数据的获取方式,还是很入门很入门的阶段。
上面拿到的数据也只是一部分,确切的说只是主页中的第一页数据,也就只有 10 来张图片信息。
而要获取到更全的数据,就需要分析其中的分页逻辑,也正是 Sign 算法的应用之处,也同样是我们要核心破解的点。
聚焦到接口上,其实就是:
而 Sign 字段则是 query_hash。
由于考虑到内容太长,接下来的内容会在下一篇进行分享。
谢谢大家的阅读