美拍解析去水印原理,sign签名算法,获得无水印播放地址
QQ_qun= "1020598620";
不知道在看这篇文章前,是否有看到网上很多逆向js拿美拍美拍视频地址的方法,因为现在美拍网页端已经不返回无水印地址了,所以这个方法也就无用了,因此只有从APP下手。
先随便那一个分享链接
奶奶教你不花一分Q吃火锅!#传递正能量# http://www.meipai.com/media/1202978302?client_id=1089857299&utm_media_id=1202978302&utm_source=meipai_share&utm_term=meipai_ios&gid=2101594306
因为网页上已经没有无水印地址了,就不浪费时间,直接抓手机包。
通过抓包发现了返回视频地址的接口
http://api.meipai.com/medias/show.json?is_from_scroll=0&teenager_status=0&scroll_num=0&mac=00:81:e8:3e:2f:6a&resolution=1080*1920&client_id=1089857302&lon=116.410254&id=1202978302&from=13&local_time=1592463419&stat_gid=24465787&lat=39.916409&os=5.1.1&version=8.15&imei=865166025541999&device_id=865166025541999&iccid=89860075053102816171&channel=baidu&origin_channel=baidu&android_id=c697c427f5801f39&network=wifi&model=xiaomi&language=zh-Hans&sigTime=1592463419&sig=78527a8a6f00435e0fa3118f42c65a68&sigVersion=1.3
通过接口可以返回如下信息
{"id":1202978302,"client_id":1089857302,"caption":"奶奶教你不花一分Q吃火锅!#传递正能量#","entry_info":null,"weibo_share_caption":"#美拍#奶奶教你不花一分Q吃火锅!#传递正能量#","facebook_share_caption":"","weixin_share_caption":"分享@猪屁登 的美拍","weixin_friendfeed_share_caption":"奶奶教你不花一分Q吃火锅!#传递正能量#","qzone_share_caption":"奶奶教你不花一分Q吃火锅!#传递正能量#","qq_share_caption":"奶奶教你不花一分Q吃火锅!#传递正能量#","instagram_share_caption":"分享猪屁登的美拍“奶奶教你不花一分Q吃火锅!#传递正能量#”,快来看看!","weixin_share_sub_caption":"来跟我一起玩美拍吧~","weixin_friendfeed_share_sub_caption":"来跟我一起玩美拍吧~","qzone_share_sub_caption":"来跟我一起玩美拍吧~","qq_share_sub_caption":"来跟我一起玩美拍吧~","geo":null,"video":"http://mvvideo11.meitudata.com/5eacf279d5595tpm0f7wsl8930_H264_1_6c722f87a4874.mp4?k=a3e7f7a29a80b0679032bee10eca7827&t=5eef04e6","url":"http://www.meipai.com/media/1202978302?client_id=1089857302&utm_media_id=1202978302&utm_source=meipai_share&utm_term=meipai_android&gid=24465787","cover_pic":"http://mvimg10.meitudata.com/5eab9ed9b1cefmfx158imz4077.jpg","pic_size":"720*1280","category":3,"time":149,"is_long":true,"show_controls":true,"created_at":"1588392604","comments_count":102,"likes_count":3314,"reposts_count":2,"user":{"id":1706927454,"screen_name":"猪屁登","country":2630000,"province":2631700,"city":2631710,"avatar":"http://maavatar1.meitudata.com/5d8d8206f396e7081.jpg","gender":"m","birthday":"1999-01-02","age":21,"constellation":"魔羯座","verified":true,"verified_reason":"美拍达人","followers_count":165638,"friends_count":0,"reposts_count":0,"videos_count":293,"courses_count":0,"real_videos_count":293,"photos_count":0,"locked_videos_count":0,"real_locked_videos_count":0,"locked_photos_count":0,"be_liked_count":1555248,"following":false,"followed_by":false,"url":"http://www.meipai.com/user/1706927454?client_id=1089857302&gid=24465787&uid=0&utm_user_id=1706927454&utm_content=test&utm_source=meipai_share&utm_term=meipai_android","created_at":1563353716,"has_password":false,"status":"5","is_funy_core_user":false,"funy_core_user_created_at":0,"last_publish_time":0,"income_daily":0,"level":1,"has_assoc_phone":false,"decorate_avatar_user":"","decorate_avatar_comment":"","prefer_media_id":0,"member_info":{"is_member":0,"expired_at":0},"core_user_category":7,"weibo_share_caption":"猪屁登在美拍获得了1555248个赞,快来看看","facebook_share_caption":"@猪屁登在美拍获得了1555248个赞,快来看看","weixin_share_caption":"@猪屁登在美拍获得了1555248个赞,快来看看","weixin_friendfeed_share_caption":"@猪屁登在美拍获得了1555248个赞,快来看看","qzone_share_caption":"@猪屁登在美拍获得了1555248个赞,快来看看","qq_share_caption":"@猪屁登在美拍获得了1555248个赞,快来看看","instagram_share_caption":"@猪屁登在美拍获得了1555248个赞,快来看看","weixin_share_sub_caption":"来跟我一起玩美拍吧~","weixin_friendfeed_share_sub_caption":"来跟我一起玩美拍吧~","qzone_share_sub_caption":"来跟我一起玩美拍吧~","qq_share_sub_caption":"来跟我一起玩美拍吧~","collection_permission":1},"cur_lives_id":"","cur_lives_type":0,"cur_lives_stream_type":0,"cur_lives_scheme":"","cur_yy_actid":"","feed_id":"6662201454402235027","locked":false,"type":5,"caption_url_params":[],"privacy_config":{"allow_save_medias":1,"forbid_stranger_comment":0,"forbid_address_book":0,"forbid_using_user_profile":0,"forbid_comment":0,"forbid_repost":0},"has_watermark":0,"refuse_gift":true,"refuse_gift_reason":"送礼功能已下线","hide_gift_btn":true,"convert_cover_pic":"http://mvimg10.meitudata.com/5eacf2a1f09791695.jpg","ar_magic_info":null,"aside_info":null,"convert_pic_size":"720*1055","cover_pic_resize":"0,225,1010,1346","m_plan":false,"first_frame_pic":"http://mvimg10.meitudata.com/5ed9953658bdc2239.jpg","first_frame_pic_size":"720*1280","is_safe":1,"is_safe2":1,"miniprogram_data":{"path":"/pages/index/index?from=app&vid=1202978302&uid=&utm_source=meipai_share&utm_term=meipai_android&viewCount=1&shareCount=1&gid=&utm_media_id=1202978302&utm_user_id=1706927454&utm_target_uid=&utm_target_gid=24465787","title":"奶奶教你不花一分Q吃火锅!#传递正能量#","desc":"","pic":"http://mvimg10.meitudata.com/5eab9ed9b1cefmfx158imz4077.jpg"},"cover_title":"","dangerous_action":false,"category_tag_id":0,"recommend_caption":null,"recommend_cover_pic":null,"recommend_cover_pic_size":null,"user_recommend_cover_pic":"http://mvimg10.meitudata.com/5eacf279ef00ercuf7e5fv686.jpg","user_recommend_cover_pic_size":"720*958","comments_list":[{"id":1508560602,"content":"奶奶👵每次都是厉害👍[捂脸][捂脸]","picture":"","picture_thumb":"","created_at":1588393276,"user":{"id":1726984648,"screen_name":"🙈教查优-蕙-卷🙈"}},{"id":1508559244,"content":"太爽了","picture":"","picture_thumb":"","created_at":1588393139,"user":{"id":1654783106,"screen_name":"毕木痒深X"}}],"is_prefer":0,"like_users_info":[{"id":"1491171443","avatar":"http://mvavatar10.meitudata.com/5c6a14fb920d7aa0yhg8sr2986.jpg","screen_name":"楠🍀🍀🍀"},{"id":1768897756,"avatar":"http://mvimg11.meitudata.com/5eead9258615abf2t247nn3418.jpg","screen_name":"琳花寻爱"}],"collection":{"id":1167,"title":"猪屁登的世界","medias_count":246,"plays_count":65746758,"index":209,"user":{"id":1706927454},"cover_pic":"","recommend_cover_pic":"http://mvimg11.meitudata.com/5ea53c055ee2f9459.jpg","status":1},"liked":false,"plays_count":161752,"show_plays_count":true,"shares_count":27,"ip":"114.235.64.232"
}
筛选掉无用的参数后来分析下面的参数
参数 | 值 | 说明 |
---|---|---|
id | 1202978302 | 视频id |
sigTime | 1592463652 | 参与加密的时间戳 |
sig | ee53d98e26dd2e04105fcaaf95021e45 | 请求前签名 |
sigVersion | 1.3 | 签名版本 |
跳过逆向部分,总之是分析完毕,sign的计算如下(伪代码):
//(请求时间戳)
var ts =1592463652;
var md5 =("medias/show.json" + id + "bdaefd747c7d594f" + ts + "Tw5AY783H@EU3#XC").StringToMD5Hash();
//将md5相邻两个值互换位置
//例如:
//ee359de862dde24001f5acfa5920e154
//ee53d98e26dd2e04105fcaaf95021e45
var sig="";
for (int i = 0; i < md5.Length; i++)
{if (i % 2 == 0){sig+= md5[i + 1].ToString() + md5[i].ToString();}
}
分析如下:
- 获取时间戳
- 拼接字符串进行md5加密
- 将md5相邻两个值互换位置
源码如下:
long ts = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
var id = url.GetQueryString("utm_media_id");
var md5 = ("medias/show.json" + id + "bdaefd747c7d594f" + ts + "Tw5AY783H@EU3#XC").StringToMD5Hash();
//将md5相邻两个值互换位置
var sig = "";
for (int i = 0; i < md5.Length; i++)
{if (i % 2 == 0){sig += md5[i + 1].ToString() + md5[i].ToString();}
}
var query = "medias/show.json?id="+ id + "&sigTime=" + ts + "&sig=" + sig + "&sigVersion=1.3";
using var client = _httpClient.CreateClient();
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.14 Safari/537.36 Edg/83.0.478.13");
var httpResponse = await client.GetAsync("http://api.meipai.com/" + query);
var json= await httpResponse.Content.ReadAsStringAsync();