优酷H5简单分析
本帖最后由 虐心i 于 2019-6-5 14:22 编辑看本帖之前需要知道一些常识,例如优酷的解析接口是ups.youku.com,还有一些js知识
1.我们先对优酷的JS查看,搜索一下解析接口
发现js里面只有https://g.alicdn.com/player/beta-ykplayer/1.6.1/youku-player.min.js有这个接口所有的请求参数
我们把这个js下载并进行格式化解包
2.在文本编辑器上搜索ups.youku.com
我们可以清楚的看到27613行到27646行都是这个解析接口整个请求参数
{
key: "getServieceMtopParam",
value: function() {
var t = {
ccode: this._global.initConfig.ccode,
client_ip: "192.168.1.1",
utid: this._cna,
client_ts: parseInt((new Date).getTime() / 1e3),
version: this._global.version
};
t.ckey = this.getCkey() || O;
var e = {
vid: this._global.mediaData.mediaId
};
this._global.initConfig.playmode && 2 === parseInt(this._global.initConfig.playmode) && (e.playlist_id = this._global.initConfig.Fid, e.ob = this._global.initConfig.Ob),
this._global.initConfig.showid && (e.showid = this._global.initConfig.showid, e.show_videoseq = this._global.initConfig.show_videoseq || ""),
this._global.initConfig.currentShowId && (e.current_showid = this._global.initConfig.currentShowId),
this._global.initConfig.inputPassword && "" !== this._global.initConfig.inputPassword && (e.password = escape(this._global.initConfig.inputPassword));
var n = this._global.initConfig.customParam;
n && (n.client_id && n.password && (e.client_id = n.client_id, e.password = n.password), n.stealsign && (e.r = n.stealsign)),
1 === this._global.initConfig.nochannel && (e.nochannel = this._global.initConfig.nochannel),
0 !== this._global.config.reload && (e.reload = 1);
var i = this._global.adparam;
return i.atm = this._global.initConfig.customParam && this._global.initConfig.customParam.atm || "",
{
steal_params: (0, a.
default)(t),
biz_params: (0, a.
default)(e),
ad_params: (0, a.
default)(i)
}
}
},
分别是ccode ,client_ip , utid ,client_ts , version ,ckey , vid
根据这个代码,我们可以知道client_ip是一个固定值,其他的我们根据js往上搜索相应的函数,client_ts就是一个10位时间戳,vid众所周知就是https://v.youku.com/v_show/id_XNDEzOTA0NTU2NA==.html,紫色部分
3.ccode参数
在27312行发现,这个ccode=0502
4.utid参数
找遍了js都没发现有thins_cna这个函数的定义,我在想,这个会不会是cookies的验证参数,
果不其然,在cookies里面发现了他,
5.version参数
version=1.6.1
5.ckey
js上搜索发现
ckey=DIl58SLFxFNndSV1GFNnMQVYkx1PP5tKe1siZu/86PR1u/Wh1Ptd+WOZsHHWxysSfAOhNJpdVWsdVJNsfJ8Sxd8WKVvNfAS8aS8fAOzYARzPyPc3JvtnPHjTdKfESTdnuTW6ZPvk2pNDh4uFzotgdMEFkzQ5wZVXl2Pf1/Y6hLK0OnCNxBj3+nb0v72gZ6b0td+WOZsHHWxysSo/0y9D2K42SaB8Y/+aD2K42SaB8Y/+ahU+WOZsHcrxysooUeND
!!现在我们所有参数都有了,先把他们组合起来试一试吧
http://ups.youku.com/ups/get.json?vid=XNDEzOTA0NTU2NA==&ccode=0502&client_ip=192.168.1.1&version=1.6.1&utid=e0k7FHGrqjkCAQ515EhfkC+L&ckey=DIl58SLFxFNndSV1GFNnMQVYkx1PP5tKe1siZu/86PR1u/Wh1Ptd+WOZsHHWxysSfAOhNJpdVWsdVJNsfJ8Sxd8WKVvNfAS8aS8fAOzYARzPyPc3JvtnPHjTdKfESTdnuTW6ZPvk2pNDh4uFzotgdMEFkzQ5wZVXl2Pf1/Y6hLK0OnCNxBj3+nb0v72gZ6b0td+WOZsHHWxysSo/0y9D2K42SaB8Y/+aD2K42SaB8Y/+ahU+WOZsHcrxysooUeND&client_ts=155970345
恭喜你得到的结果是:客户端无权播放
{"cost":0.0020000000949949026,"data":{"error":{"note":"客户端无权播放,201","code":-6004}},"e":{"code":0,"provider":"hsfprovider","desc":""}} {"cost":0.0020000000949949026,"data":{"error":{"note":"客户端无权播放,201","code":-6004}},"e":{"code":0,"provider":"hsfprovider","desc":""}} 楼上两位,协议头问题吧,cookie没带 没啥用,感觉 优酷还是很好下载的,爱奇艺和腾讯m3u8地址都加密了。 重点是思路过程吧。 感谢分享,学习了原理! 默认ckey带cookies才能解析
优酷的ckey算法才是重点 支持楼主