自己动手实现抖音高清无水印视频下载工具(5)

1,546 阅读3分钟

这是我参与更文挑战的第9天,活动详情查看: 更文挑战

前情回顾

书接上回,在前几期中我们已经成功取到了除_signature以外的所有参数,从本文开始分析_signature参数的作用及获取逻辑。

参数含义

通过字面意思可以确定_signature参数是接口调用的签名,用来验证接口访问来源的合法性。

_signature参数来源及分析

首先我们还是从调试工具中进行源代码搜索进行分析;

通过搜索 我们发现 _signature是在index.98ac6f5d.js文件1289行进行赋值的。 image.png

我们顺着data['_signature'] = signature; // 作用参见readme@注释1顺藤摸瓜继续往前找。 我们再1482行找到了这句代码: signature = (0, _bytedAcrawler.sign)(nonce);

image.png

由上下文判断nonce这个参数是sec_uid,signture是计算所得出的,应该存在加密的算法,我们继续找。 再996行找到了这句代码var _bytedAcrawler = __webpack_require__("9bd2804c7e68ac461d65");

image.png

根据字面意思大概是再引用一段js或者一个js文件,我们继续看看__webpack_require__方法的内容,目前基本确定我们需要的代码都在index.98ac6f5d.js文件里,直接把文件内容复制到文本编辑器查比较方便一些。 我们再66行找到了这个方法的主体。

image.png

方法的内容先不分析,我们继续通过参数值来找,因为调用这个方法的参数是固定的9bd2804c7e68ac461d65,我们继续用这个参数来搜索下前台的代码,在vendor.15eaf68d.js中搜到了以下内容,对应的方法主体应该就是用来生成签名的,这段代码已经被加密混淆了,没法具体查看里面的逻辑,我们尝试将这段代码运行起来。

image.png

经过一段时间尝试后,虽然尝试把混淆的部分代码恢复为明文,但是把这些代码直接拆分本地的难度比较大,我们不妨换个思路,直接把页面文件通过浏览器保存至本地并尝试在浏览器运行,然后再尝试拆分出我们需要的那段代码。

image.png

保存后,在浏览器上搜的那2个核心js文件都被保存下来了,

image.png

接下来我们找到代码的对应位置,添加一行alert调试一下,原本nonce是从url取的,这里直接打开html没有param部分,这里写个固定值调试。

image.png

在浏览器中打开这个html页面,我们发现我们需要的signature值已经弹出来了,而且每次刷新这个值都会改变

image.png

生成签名的代码在本地运行没有问题,说明可以对代码进行拆分,我们用这个signature值调用下接口试试,

image.png

调用后发现,已经成功返回内容,重新生成并更换了几次几次后,调用没有发现问题,说明这个方法是可行的。

至此调用作品列表的接口所需的参数已全部拿到,比较复杂的接口分析部分已经告一段落就,从下期开始我将分享下载部分的功能开发实现过程。