当前位置:网站首页>今日头条-jsvmp-signature参数
今日头条-jsvmp-signature参数
2022-07-18 02:49:00 【学狙人。】
案例链接: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调用,拿到正常数据,感谢你的观看!希望本文对你有所帮助!
边栏推荐
- array. Groupby, which classifies arrays
- Implementation of call, apply and bind
- 梅科尔工作室-DjangoWeb 应用框架+MySQL数据库第四次培训
- Vs2019 MFC dynamically creates edit control, csliderctrl class member function create application creates slider control control [mfc dynamically creates control 4]
- 想自学软件测试?无情嘲讽。
- Nacos cluster construction
- 7.17 simulation summary
- JMeter 21 day clock in day13
- 4273. 链表合并(DAY 64)
- Aspose.OCR 22.6 for .NET//Aspose.OCR
猜你喜欢
Explore Alibaba cloud IOT development board 1-haas 100
Vs2019 list control control self drawing routine inherits CListCtrl class onnmcustomdraw redrawing
开发idea插件在提交审核时因为兼容性问题未通过
Want to self-study software testing? Ruthless ridicule.
JMeter 21 天打卡 day08
QA机器人召回优化
想自学软件测试?无情嘲讽。
STM32中断梅开二度(一)
数据湖(十三):Spark与Iceberg整合DDL操作
NacosClient客户端搭建,微服务注册进nacos
随机推荐
array.groupBy,对数组进行分类
[unity3d] inputfield of ugui
mysql函数汇总之系统信息函数
Nacos服务部署安装
OS知识点简介(一)
使用深度学习制作机器人大脑图纸
【C语言】文件操作详解
STM32中断梅开二度(一)
Ribbon修改默认负载均衡策略
JMeter 21 day clock in day13
51world 如何修改渲染视频/窗口的大小 ?
Clouds want clothes, flowers want looks, spring breeze blows the sill, Revlon (romantic code implementation)
QA机器人第二节——召回
Epoll related functions and structure introduction and server development process
开发idea插件在提交审核时因为兼容性问题未通过
论文阅读_医疗NLP_ SMedBERT
epoll的ET工作模式和LT工作模式
TCP 通信流程
The development idea plug-in failed to pass the audit due to compatibility problems
主流注册中心的区别