需求

最近需要抓取一些淘宝商品的首图视频,比如https://item.taobao.com/item.htm?spm=a230r.1.14.31.7ebfcec2qmczgd&id=641116554739&ns=1&abbucket=2#detail,该页面首图视频页面元素是blob协议加密,该协议返回大多是m3u8格式的视频,并被切分为多个ts格式的小段视频集合。

分析

通过chrome抓包果然找到了m3u8视频请求,第一个请求返回ts文件列表,紧接着发起视频请求返回ts视频数据。

# EXTM3U:.m3u8文件的格式定义
# EXT-X-KEY: 密钥的信息
# METHOD: 加密的方法,这里采用的是AES-128的加密方式
# URI: 密钥的地址,需要获取访问得到密钥的信息
# IV: 偏移量,AES加密的方法,通过这个密钥就可以解密,获取正确的视频信息

数据来源找到了,那么紧跟着就是找到这些链接的组成字段,如首个链接https://tbm-auth.alicdn.com/e99361edd833010b/1Ptetzs7wLumqr8DVXj/IZAAx7ivPbWWLLDYpm0_275076925941___hd.m3u8?auth_key=1619353994-0-0-7eac2e2d00d26717d7aad9746575f99f中大部分url参数都是加密串,通过搜索其中的1Ptetzs7wLumqr8DVXj,找到了多条符合条件的请求。

第一条请求中返回的数据中有两个参数的video_url,分别是hlsResources和mp4Resources,返回了m3u8和mp4格式,好家伙,这样省去了合并m3u8个流程,直接拿mp4格式的视频即可。

逆向

拿到返回video_url的请求的参数,通过逐条过滤参数发现,最终生效的参数只有四个,分别是appKey,t,sign,data,每次请求都有失效时间。

其中appKey固定为12574478,t为精确到毫秒的时间戳,sign是今天的逆向主角参数,data动态内容为'{"videoId": "%s","from":"detail"}' % "301079547561",其中301079547561作为videoId在页面请求时直接返回在页面js中。

sign

无痕浏览器清空页面缓存,搜索sign,从众多页面中找到可能出现的位置,sign就是j,而j = h(d.token + "&" + i + "&" + g + "&" + c.data),其中d.token是加密字符串,i为时间戳,g为固定值12574478,c.data为{“videoId”:“275076925941”,“from”:“detail”}

在控制台中调用h函数返回32位字符串,猜测是md5加密,就不扣h函数的js了。

接下来就是分析这些参数中唯一变的参数d.token的来源。

d.token

第一次断点时d.token为undefined。

放开断点后搜索d.token的值0027f0b395e6356158d06d22da238855,第一次出现在了返回video_url的请求返回时set-cookie中,作为Response Cookie返回了两个cookie,一个是_m_h5_tk,一个是_m_h5_tk_enc,_分割的前面一段就是d.token的值。

第二次进入断点时d.token=0027f0b395e6356158d06d22da238855,放开断点后搜索0027f0b395e6356158d06d22da238855出现在了同一个请求的Request Cookie中。

逻辑梳理

大概思路清晰了,对同一个请求多次访问,第一次返回cookie作为第二次请求的cookie,cookie中的_m_h5_tk_enc通过_分割的前半段字符串作为d.token,根据d.token + "&" + i + "&" + g + "&" + c.data进行md5得到sign,请求时加上两个cookie,完成video_url的请求,从而实现淘宝商品首图的视频抓取。

爬虫

APPKEY = '12574478'
DATA = '{"videoId": "%s","from":"detail"}' % "301079547561"
URL = 'https://h5api.m.taobao.com/h5/mtop.taobao.cloudvideo.video.queryforh5/1.0/'
params = {'jsv': '2.4.11', 'appKey': APPKEY, 't': int(time.time() * 1000),'sign': 'FAKE_SIGN_WITH_ANYTHING', 'api': 'mtop.wdetail.getItemDescx', 'callback': 'mtopjsonp1','v': '4.9','type': 'jsonp', 'dataType': 'jsonp','data': DATA}
headers = {'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit/601.1.46 ' + \'(KHTML, like Gecko) Version/9.0 Mobile/13G35 Safari/601.1',
}
images = []
# get token in first request
r1 = requests.get(URL, params=params, headers=headers)
token_with_time = r1.cookies.get('_m_h5_tk')
token = token_with_time.split('_')[0]
enc_token = r1.cookies.get('_m_h5_tk_enc')
# get results in second request
t2 = str(int(time.time() * 1000))
c = '&'.join([token, t2, APPKEY, DATA])
m = hashlib.md5()
m.update(c.encode('utf-8'))
params.update({'t': t2, 'sign': m.hexdigest()})
cookies = {'_m_h5_tk': token_with_time, '_m_h5_tk_enc': enc_token}
r2 = requests.get(URL, params=params, headers=headers, cookies=cookies)
results=json.loads(re.match(r' mtopjsonp1\((.*?)\)', r2.text).group(1))
video_url = jsonpath(results, '$..video_url')[1]
print(video_url)

完整源码请关注微信公众号:ReverseCode,回复:JS逆向

JS逆向之淘宝h5视频sign破解相关推荐

  1. 淘宝h5 页面 sign加密算法

    1.淘宝sign加密算法 淘宝对于h5的访问采用了和客户端不同的方式,由于在h5的js代码中保存appsercret具有较高的风险,mtop采用了随机分配令牌的方式,为每个访问端分配一个token,保 ...

  2. 2019年末逆向复习系列之淘宝M站Sign参数逆向分析

    郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是<2019年末逆向复习系列>的第一篇:< ...

  3. 淘宝 h5获取店铺所有宝贝销量 sign解密

    淘宝 h5获取店铺所有宝贝销量 sign解密 淘宝的sign加密在mtop.js中 通过图片我们可以看到 sign== j 而 j = h(d.token + "&" + ...

  4. 淘宝H5商品详情数据解析接口sign算法接口代码教程

    淘宝H5商品详情数据解析接口sign算法接口代码教程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018) key String 是 调用key(必须以GET方式拼接在 ...

  5. 淘宝商品评价api接口(app、h5端),淘宝评论视频API接口,淘宝评论API接口

    淘宝商品评价api接口(app.h5端),淘宝评论视频API接口,淘宝评论API接口可以通过商品id,获取商品评价信息.评价内容.买家秀图片.评论浏览量.评价视频.评价追评等页面上展示的数据均可以拿到 ...

  6. 淘宝商品评价api接口,淘宝评论视频API接口,淘宝评论API接口(app、h5端)

    淘宝商品评价api接口,淘宝评论视频API接口,淘宝评论API接口(app.h5端)可通过商品id,获取商品评价信息.评价内容.买家秀图片.评论浏览量.评价视频.评价追评等页面上展示的数据均可以拿到, ...

  7. 淘宝H5接口获取app数据6.0格式

    淘宝H5接口获取app数据6.0格式 公共参数: 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secret String 是 调用密钥 api_na ...

  8. 如何通过分析网页源码下载淘宝教育视频

    最近发现淘宝课程有挺多不错的课程,买了一个.但是淘宝课程比较操蛋就是不能下载.今天就来说说如何下载淘宝教育视频(请勿用于商业!!) 1.打开google 游览器,打开淘宝教育网址  比如说,我们要下载 ...

  9. 【Auto.js脚本】淘宝618集喵币列车活动 自动浏览任务

    [Auto.js脚本]淘宝618集喵币列车活动 自动浏览任务 附上使用方法: 1.打开Auto.js(该软件的相关用法就不细说了,无障碍,悬浮窗权限这些),右下角导入脚本 2.打开淘宝,进入活动页面, ...

最新文章

  1. 王二涛团队及合作者揭示沙棘放线菌固氮生物学机制
  2. Oracle数据库的关闭详解
  3. linux 阶段作业领导者,Linux入职基础-5.22_命令ps显示进程状态(应用实战6)
  4. Bitmap之位图采样和内存计算详解
  5. 几种纯css布局的导航栏
  6. 你说,辽宁输在哪了?
  7. MyBatis-Plus_LambdaQueryWrapper
  8. 如何将android连接到pc,如何将Android屏幕镜像到PC
  9. 2021美赛成绩查询证书下载
  10. 用我的亲身经历来告诉你如何自学Java?
  11. 仓库管理系统c#语言代码,C#仓库管理系统+完整源代码
  12. Ensembl数据库简介
  13. 4G LTE是什么意思
  14. Mac终端链接服务器记住密码
  15. 程序员经常浏览的网站
  16. Pywin32:Python库的简介、安装和使用攻略
  17. 领扣--唯一摩尔斯密码
  18. zbrush变化目标(Morph Target)子调控板解释
  19. ArcGIS教程:TIFF图像拼接及几何校正
  20. PMI-PMP®远程模考三 正题数

热门文章

  1. 为什么人工智能还远不能取代人类?语言理解能力仍然欠缺
  2. Shader山下(一)第一个Shader
  3. 技校毕业是什么学历_技校毕业是什么学历 毕业后好找工作吗
  4. 梦幻群侠传5帮派修炼_梦幻群侠传5中途修改修改门派,以及门派技能
  5. 逆袭共享单车、打脸王思聪,共享充电宝究竟凭什么?
  6. Java Synchronized 重量级锁原理深入剖析上(互斥篇)
  7. 2021年保育员(初级)证考试及保育员(初级)复审模拟考试
  8. Proxychains: HTTP 代理
  9. Win11右键菜单选项变成英文了怎么恢复回来?
  10. 网上抽奖你真的能成为幸运儿吗?分析一下网页结果让我震惊!!