今日头条-jsvmp-signature参数

案例链接:aHR0cHM6Ly93d3cudG91dGlhby5jb20vP3dpZD0xNjU3ODU1MTI2MDMz

一、页面分析

1、话不多说,直接抓包。发现我们想要的内容就在这接口,对应的参数可以看到signature签名。

 二、参数分析

1、我是采用的直接搜索_signature,断住后可以看出来加密的参数就是我们访问的url地址,x()函数返回的内容就是加密结果了。

2、定位到了加密位置我们来看一下具体的加密过程,步进过后,我们可以发现一个相对比较绕的或者与三木表达式。其实归根到底就是一顿才做过后,把window.byted_acrawler.sign()方法赋值给了r

依依拆开进行分析:

2.1、 将window.byted_acrawler赋值给n,如果n = null 的话就返回True ,显然这里n=False

2.2、  如果n= void 0 则返回True,其实在js中void 0代表的就是undefined,这里返回也是False

2.3、 将n对象中的sign方法赋值给r,如果n.sign=null 则返回True,这里等于False

2.4、 三目表达式如果 r  != undefined 则返回的内容就是r.call(n, o) 否则就返回 undefined,显然这里是要执行方法然后拿到加密结果的。

这里的r.call(n,o) = r.call(对象,参数),对于js中的call方法第一个参数是必须要被执行的对象,接下来是参数。大体类似于python的execjs库,具体请自行百度。

2.5、 搞明白了这些,我们在控制台亲自模拟一遍加密过程,可以来出来是和正常加密的结果一致的

2.6、我们步进到加密方法内部一探究竟,发现他会跳转到acrawler.js里面

三、本地调试

1.将整个复制保存出来,方法webstrom中,然后我们在创建一个html的页面进行调试。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>点赞收藏并转发</title>
</head>
<body>
    <script src="acrawler.js"></script>
    <script>
        url = 'https://www.kengnidian.com'
        let result = window.byted_acrawler.sign({url:url})
        console.log('加密结果:' + result)
    </script>
</body>
</html>

 2.查看加密结果,虽然和原生生成的对比长度短了点,但是不影响正常使用。

 四、本地js调试

1.在本地直接执行

glb = "undefined" == typeof window ? global : window

        首先在js代码的头部,我们可以看到他检测了一下window环境,如果window不存在的话global就为全局变量,否则window为全局变量。要知道window是浏览器常使用的全局变量,global是nodejs常使用的,他这里就是在检测你的环境是否是浏览器。

         所以我们要在头部给一个window对象=global,也可以使用导入jsdom模块使用dom补充window。两种方法自选

 2.执行报错,缺少doucument.referrer环境,我们到实际环境中进行查找后补全。

 

 3.执行报错,缺少sign()方法,经推导排查后找到是第二个jsvmp的位置出现了问题,这里再一次检测了,我们本地的运行环境。 

解决方案:

我们将此jsvmp拆开来,分为三部分观察会清晰一点,在arr数据这里,头部有一个检测exports特征的三木运算符,这个特征是只有在node环境才会有的,我们到浏览器中调试是等于undefined,我这里是分别在本地和浏览器打印后,将这个长度为36的数组对比查看发现的。这里我们直接吧他改成void 0即可。

报错位置

本地

 

浏览器

 4.调试报错,缺少href,这里我是直接把浏览器的location直接拔了下来。

 5.调试报错,缺少ua,这里也是一样

 6.全部补齐后运行出来结果了,确认可以正常使用

 

 7.但是相对于浏览器的有点短,后来通过两位大神指点,补充了cookie得到了长度一样的结果

 最终python调用,拿到正常数据,感谢你的观看!希望本文对你有所帮助!

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值