蘑菇街采集无水印资源(mw-sign 值计算)

本贴最后更新于 1384 天前,其中的信息可能已经天翻地覆

3856113667.jpg

一。需求描述

通过“蘑菇街”App分享出来的链接获取无水印视频。**该内容只供学习交流,不可用于非法用途。**

二。分析接口

示例地址:https://g.mogu.com/1f2MGp2l

直接请求移动端的,这里就不示例 web 了,接口太多

489de6118ff6904291e221a860bf003f.png

如图,地址做了重定向,在 ResponseHeader 中拿到真实地址[location]

在 js 中找到了请求的接口

308d16014f95b64a8fe8636594147c63.png

第一个接口是根据iid获取视频信息的。第二个接口是根据videoId获取视频播放路径的
(其实第一个接口也有返回视频url , 但是清晰度不够高,所有需要在第二个接口中取)

分析以下请求参数

param 是否必须 说明
data 数据 json(包括 id 和 clientType)
mw-appkey 100028
mw-ttid NMMain@mgj_h5_1.0
mw-t 时间戳
mw-uuid 从 cookie 中获取
mw-h5-os iOS
mw-sign 调用 js 中方法 z 获取
callback 回调

其中“data”是可以手动拼出来的数据,"mw-appkey","mw-ttid","mw-h5-os" 都是写死的参数值。
"mw-t"为时间戳,剩下"mw-uuid" 和 "mw-sign"

三。获取 mw-uuid

这里发现 uuid 跟 cookie 中的一致!!!

620f410969e0ba408790f55b9c67c3c2.png

如何获取?

通过请求 https://list.mogujie.com 在 cookie 中获取 uuid (一开始我也找不到,别人说从这儿获取,hahaha)

四。获取 mw-sign

d64b5b1322d23047b3cc640775b88aff.png

在 js 中搜索 mw-sign , 最终锁定在了这个地方,先 buildQuery , 后调用了 z 方法 ,在 buildQuery 中也调用了一次 z 方法。

现在是已经知道了实现方式所以可以直接找到位置,第一次分析的时候非常困难,可以尝试debugger分析z方法的入参

第一次调用 z 方法,入参为{"iid":"" , "clientType":"h5"} ,有没有觉得很眼熟,这个就是刚刚分析请求参数中的 data

4ac4500be7f36547bb144bd64947643b.png

第二次调用 z 方法,入参为

100028&IOS&1564034676371&NMMain@mgj_pc_1.0&f65f8c1e-6286-4b4a-a917-5061e238155b&mwp.darling.feedById&1&b9cab4ab7f543491e2c4f6c556711345&39a9ae72d3faec64f157166036f84edd_1564026637963

c0b0de061df18c4eaeebcd04f9838a14.png

按&截开,最后发现每个参数代表的是

"mw-appkey",“mw-h5-os”,“mw-t”,“mw-ttid”,“mw-uuid”,以及部分请求地址(“mwp.darling.feedById/1”)使用"&"拼接而成

b9cab4ab7f543491e2c4f6c556711345   这个值是第一次调用z方法的结果

39a9ae72d3faec64f157166036f84edd_1564026637963  这个是cookie中的_mwp_h5_token

如何获取 mw-sign? 第二次调用 z 方法返回的结果就是 mw-sign

五。获取_mwp_h5_token

现在只查这个 token 了,直接说怎么获取吧

拼接好参数 调用api 携带mw-uuid(mw-sign 可以不带,因为我们这个时候并没有获取到mw-sign) 会返回以下结果
{"api":"mwp.darling.feedById","v":"1","ret":"FAIL_SYS_TOKEN_NEED_RENEW","token":"6aaeb8fe9371b395bfc417c0948f1e2c_1582195277778","encToken":"636565ab0ff6e4d5579a246e2f7ba4b7","needHeaderCookie":false}

这里这个 token 就是_mwp_h5_token , encToken 就是_mwp_h5_token_enc ,这两个值都有用,因为一会儿再次请求的时候需要带上 cookie

拿到 token 之后按照第二次调用 z 方法执行一次,获取出来的就是 mw-sign 了

六。最后请求获取数据

拼接好所有参数再次请求一次 api(必须带上 cookie,三个都要带),即可获取到响应数据。然后在里边找自己用的信息即可

七。注意

  1. 不同的接口请求地址不同,会影响第二次 z 方法加密
  2. uuid / token 之类的数据会失效,具体能保持多久不知道,目前 24 小时是没问题的,可以存入缓存。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...