今日头条-jsvmp-signature参数

案例链接:
一、页面分析
1、话不多说,直接抓包 。发现我们想要的内容就在这接口,对应的参数可以看到签名 。
二、参数分析
1、我是采用的直接搜索,断住后可以看出来加密的参数就是我们访问的url地址,x()函数返回的内容就是加密结果了 。
2、定位到了加密位置我们来看一下具体的加密过程,步进过后,我们可以发现一个相对比较绕的或者与三木表达式 。其实归根到底就是一顿才做过后,把..sign()方法赋值给了r
依依拆开进行分析:
2.1、将.赋值给n,如果n = null 的话就返回True,显然这里n=False
2.2、 如果n=void 0 则返回True,其实在js中void 0代表的就是,这里返回也是False
2.3、将n对象中的sign方法赋值给r,如果n.sign=null 则返回True,这里等于False
2.4、三目表达式如果 r !=则返回的内容就是r.call(n, o) 否则就返回,显然这里是要执行方法然后拿到加密结果的 。
【今日头条-jsvmp-signature参数】这里的r.call(n,o) = r.call(对象,参数),对于js中的call方法第一个参数是必须要被执行的对象,接下来是参数 。大体类似于的库,具体请自行百度 。
2.5、搞明白了这些,我们在控制台亲自模拟一遍加密过程,可以来出来是和正常加密的结果一致的
2.6、我们步进到加密方法内部一探究竟,发现他会跳转到.js里面
三、本地调试
1.将整个复制保存出来,方法中,然后我们在创建一个html的页面进行调试 。
点赞收藏并转发
2.查看加密结果,虽然和原生生成的对比长度短了点,但是不影响正常使用 。
四、本地js调试
1.在本地直接执行
glb = "undefined" == typeof window ? global : window
首先在js代码的头部,我们可以看到他检测了一下环境,如果不存在的话就为全局变量,否则为全局变量 。要知道是浏览器常使用的全局变量,是常使用的,他这里就是在检测你的环境是否是浏览器 。
所以我们要在头部给一个对象=,也可以使用导入jsdom模块使用dom补充 。两种方法自选
2.执行报错,缺少.环境,我们到实际环境中进行查找后补全 。
3.执行报错,缺少sign()方法,经推导排查后找到是第二个jsvmp的位置出现了问题,这里再一次检测了,我们本地的运行环境 。
解决方案:
我们将此jsvmp拆开来,分为三部分观察会清晰一点,在arr数据这里,头部有一个检测特征的三木运算符,这个特征是只有在node环境才会有的,我们到浏览器中调试是等于,我这里是分别在本地和浏览器打印后,将这个长度为36的数组对比查看发现的 。这里我们直接吧他改成void 0即可 。
报错位置
本地
浏览器
4.调试报错,缺少href,这里我是直接把浏览器的直接拔了下来 。
5.调试报错,缺少ua,这里也是一样
6.全部补齐后运行出来结果了,确认可以正常使用
7.但是相对于浏览器的有点短,后来通过两位大神指点,补充了得到了长度一样的结果
最终调用,拿到正常数据,感谢你的观看!希望本文对你有所帮助!