美文网首页
蘑菇街采集无水印资源(mw-sign值计算)

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

作者: Aroli | 来源:发表于2020-03-27 22:03 被阅读0次

    原文地址:点击跳转

    一。需求描述

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

    二。分析接口

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

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

    489de6118ff6904291e221a860bf003f-8f9146df.png

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

    在js中找到了请求的接口

    308d16014f95b64a8fe8636594147c63-01153d11.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-c861dd39.png

    如何获取?

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

    四。获取mw-sign

    d64b5b1322d23047b3cc640775b88aff-5e2b4f50.png

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

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

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

    4ac4500be7f36547bb144bd64947643b-61c917ad.png

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

    100028&IOS&1564034676371&NMMain@mgj_pc_1.0&f65f8c1e-6286-4b4a-a917-5061e238155b&mwp.darling.feedById&1&b9cab4ab7f543491e2c4f6c556711345&39a9ae72d3faec64f157166036f84edd_1564026637963
    
    c0b0de061df18c4eaeebcd04f9838a14-58417126.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小时是没问题的,可以存入缓存。

    原文地址:点击跳转

    相关文章

      网友评论

          本文标题:蘑菇街采集无水印资源(mw-sign值计算)

          本文链接:https://www.haomeiwen.com/subject/nztduhtx.html