wbt5 / real-url

获取斗鱼&虎牙&哔哩哔哩&抖音&快手等 58 个直播平台的真实流媒体地址(直播源)和弹幕,直播源可在 PotPlayer、flv.js 等播放器中播放。
GNU General Public License v2.0
7.31k stars 1.53k forks source link

虎牙最新js逆向思路2022.1.0 #298

Open YXCQU opened 2 years ago

YXCQU commented 2 years ago

最近再搞js逆向,正好huya练手,用的是移动站,pc端也看得差不多了,下面分享思路: https://bd.flv.huya.com/src/2297371393-2297371393-9867134999700963328-4594866242-10057-A-0-1.flv?wsSecret=0a6e39ba4db016857c6b26adb51b5410&wsTime=61d052ad&seqid=2840553744437&ctype=tars_mobile&ver=1&txyp=o%3An4%3B&fs=bgct&&sphdcdn=al_7-tx_3-js_3-ws_7-bd_2-hw_2&sphdDC=huya&sphd=264_*-265_*&t=103&ratio=2000&uid=1199597531167&uuid=2724277583&t=103&sv=2110211124

虎牙关键参数就是wsSecret、seqid、uid、uuid,其中uid需要注册到虎牙那边才能正常使用,这里先不讨论,先说wsSecret: seqid = uid + now(); // seqid是uid 加当前时间生成,如 1199597531167 + 1640955183406

s = md5(seqid+"|tars_mobile103") // 用md5加密参数,下面用

fm = "DWq8BcJ3h6DJt6TY$0$1$2$3" // 这里fm好像是固定参数,就是密钥之类 fm = fm.replace($0 = uid, $1 = 网页的StreamName, $2 = s, $3 = 网页的wsTime)

"wsSecret=" + md5(fm) + "&wsTime="+ 网页wsTime + "&seqid=" +seqid +"&ctype=tars_mobile&ver=1"+"txyp=o%3An4%3B&fs=bgct&&sphdcdn=al_7-tx_3-js_3-ws_7-bd_2-hw2&sphdDC=huya&sphd=264-265_&t=103&ratio=2000" //注意最后一个字符串可能需要根据看的频道换一下,ratio是清晰度

关键函数位置:

image

虎牙还是挺简单,播放时注意要 请求头,直接第三方播放器现在有问题 referer: https://m.huya.com/xxx sec-fetch-dest: empty sec-fetch-mode: cors sec-fetch-site: same-site user-agent: xxxxx 带着这几个请求视频基本搞定

SeaHOH commented 2 years ago

这位小哥,你这标题把人忽悠进来,却看不到有什东西啊。完全没必要新开 issue,跟帖讨论不好吗。

YXCQU commented 2 years ago

最新的m站就这样的,没骗人哦

YXCQU commented 2 years ago

uid生成方式: post请求 https://udblgn.huya.com/web/anonymousLogin, body参数:{"appId":5002,"byPass":3,"context":"","version":"2.4","data":{}}, 返回内容里面就有uid: { "uri": 1, "version": "2.4", "context": "", "requestId": 0, "returnCode": 0, "message": "success", "description": "success", "data": { "uid": "1463077285514", "passport": "", "version": "2.4", "biztoken": "", "nickName": "", "regOrigin": 99, "domainUrlList": null, "status": 0, "wupData": null } }

uuid生成 uuid = Number((Date.now() % 1e10 1e3 + (1e3 Math.random() | 0)) % 4294967295) // js代码 虎牙 一起看应该是可以解决了

SeaHOH commented 2 years ago

只摆了几个结果,你这算什么思路?而且从头到尾没有任何新东西,都是已经讨论过的。 除了你最后追加的这个匿名登录,但其参数也是残缺的,根本没法用好吧。还需要从其它 API 获取参数和 cookies。

YXCQU commented 2 years ago

只摆了几个结果,你这算什么思路?而且从头到尾没有任何新东西,都是已经讨论过的。 除了你最后追加的这个匿名登录,但其参数也是残缺的,根本没法用好吧。还需要从其它 API 获取参数和 cookies。

发的确实只有核心参数,不过也够了,我自己写的flutter播放器测试过了,下次写一个完整的m站js逆向分析教程吧,虎牙pc的js也看的差不多了,就不发了

SeaHOH commented 2 years ago

发的确实只有核心参数,不过也够了,我自己写的flutter播放器测试过了

根本不能用好吧,我之前就试过了,因为反混淆是外行,最后卡在 encryptWebDeviceFeature

下次写一个完整的m站js逆向分析教程吧

那你这不是标题党是什么?

MrNiebit commented 2 years ago

他这个思路是没问题的,可惜有个字符串应该是复制错了,感兴趣的可以自己找下😀

SeaHOH commented 2 years ago

他这个思路是没问题的,可惜有个字符串应该是复制错了,感兴趣的可以自己找下grinning

你是说那个分隔符?我说的不能用根本不是完全复制他的内容然后出错。 你能指出他有提供有什么新的东西吗?全是早就讨论过的确定的结果,就连最后的匿名登录 API 之前也提出过。 而且他这里有提到一点点思路

MrNiebit commented 2 years ago

我不知道之前的思路哈,我按他发的试了下,有些播放源可以一直用,有的只能播放到2分钟07秒

---原始邮件--- 发件人: @.> 发送时间: 2022年1月15日(周六) 下午3:23 收件人: @.>; 抄送: @.**@.>; 主题: Re: [wbt5/real-url] 虎牙最新js逆向思路2022.1.0 (Issue #298)

他这个思路是没问题的,可惜有个字符串应该是复制错了,感兴趣的可以自己找下grinning

你是说那个分隔符?我说的不能用根本不是完全复制他的内容然后出错。 你能指出他有提供有什么新的东西吗?全是早就讨论过的确定的结果,就连最后的匿名登录 API 之前也提出过。 而且他这里有提到一点点思路?

— Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you commented.Message ID: @.***>

panda-mute commented 2 years ago

用flv好像可以一直看

SeaHOH commented 2 years ago

@MrNiebit 你这个测试很正常,唯一的问题就是跟前面大家讨论过的没有任何区别。 都给你讲了,但凡他能讲丁点思路过程都可以接受,光摆结果根本不能称之为思路,而且这还都是之前早就讨论出的结果。

wjxgzz commented 2 years ago

受ctype参数影响,mp端算法不变,但UID不能为0,可以用已注册UID,游客匿名获取的UID有观看时间限制,到时间断流(猜测:实际测试中也确实2分多钟断流, 用固定已注册的uid并不会).mobile端UID要进行二次运算,pc端UID再次转换格式并且参数为u...... 测试potplayer播放时,ctype以及t参数可为空.

验证wsSecret正确与否请把节点转到ws或者al. 错误的时候是403的状态.断流是因为UID检测因素.

m端的uid算法他可能没有解决 这个is开的....

上个gayhub是真尼玛难啊...

MrNiebit commented 2 years ago

受ctype参数影响,mp端算法不变,但UID不能为0,可以用已注册UID,游客匿名获取的UID有观看时间限制,到时间断流(猜测:实际测试中也确实2分多钟断流, 用固定已注册的uid并不会).mobile端UID要进行二次运算,pc端UID再次转换格式并且参数为u...... 测试potplayer播放时,ctype以及t参数可为空.

验证wsSecret正确与否请把节点转到ws或者al. 错误的时候是403的状态.断流是因为UID检测因素.

m端的uid算法他可能没有解决 这个is开的....

上个gayhub是真尼玛难啊...

我用的已登录的uid,也不是100%可以的,还是会碰到只能播放2分钟 和 正常的播放源

SeaHOH commented 2 years ago

@MrNiebit 看前面的讨论,已登录 id 完全可以正常使用。

而且随机生成的 uid 效果也是这个效果,我怀疑如果匿名登录完全正确,获取的 uid 就不会出现断流。

wjxgzz commented 2 years ago

有一个很有意思的情况,抓mp的包,链接有效期是一天,我尝试着更换成hls(.m3u8)后缀时,它会断流,但是保持flv格式,可以流畅观看。(文件后缀是不参与wsSecret计算的 所以应该与这个无关)

替换streamName 保持uid/seqid不变,本地生成wsTime(即当前时间戳360024) .可以有效播放其它直播间 目前疑点:seqid的时间戳与wsTime是否挂钩,这个需要等待凌晨 wsTime失效后尝试(或有已尝试的大佬告知?)

已尝试:算法不变,改变格式为flv时不断流。 感觉hls目前有点奇奇怪怪的问题,包括m端uid转换了也不稳定

怀疑:虎牙迭代,CDN商节点没跟上??? 等大佬们解疑

附:本地三网能用的CDN http://223.111.117.27/tx.hls.huya.com/src/1394575534-1394575534-5989656310331736064-2789274524-10057-A-0-1-imgplus.m3u8

好玩~~

SeaHOH commented 2 years ago

@wjxgzz 为什么要在这里讨论,建议去其它 issue。

MrNiebit commented 2 years ago

用自己的uid也不行,隔了一段时间,用自己的uid获取的直播源只能播放两分钟;但是如果我用浏览器(之前已经登录过,Cookie没有失效)访问一下huya一起看,播放下,用那个uid获取的直播就又可以用了。

是不是有哪个接口 需要定期激活一下 uid,才可以正常播放呢

SeaHOH commented 2 years ago

@MrNiebit 为什么非要在这里重复一些已经早就讨论过的问题,直接看前面的不好吗?省得你折腾这么久才发现。

MrNiebit commented 2 years ago

主要是我才开始研究这个,我看之前issue的方法都失效了😅

---原始邮件--- 发件人: @.> 发送时间: 2022年1月17日(周一) 晚上10:36 收件人: @.>; 抄送: @.**@.>; 主题: Re: [wbt5/real-url] 虎牙最新js逆向思路2022.1.0 (Issue #298)

@MrNiebit 为什么非要在这里重复一些已经早就讨论过的问题,直接看前面的不好吗?省得你折腾这么久才发现。

— Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you were mentioned.Message ID: @.***>

TyrantG commented 2 years ago

@dingzhengjie 这个好耶

sdfhj commented 1 year ago

请问有最新的wsSecret计算方法么? 或者有没有能够逆向解析wsSecret计算公式的方法?