首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Android】某哩某哩网页aes解密和APP真正免VIP无限观看

一、网页版AES:

1.首先我们打开浏览器"某哩某哩"的网页。

2.F12开启"开发者模式"-"Network"。(众所周知,一般这种视频都是m3u8.)

3.随便点一个视频进去  4.搜索"m3u8",果然是m3u8流

5.然后直接搜这个m3u8的文件名,结果搜不到,那么应该是被加密了

6.然后我们尝试搜这个视频的ID,可以发现有“视频推荐”、“演员信息”、“当前视频信息”3个相关的请求(PS:这个ID是后来加的,截图之前是另一个)

7.由上图得到的/video/info是从哪来的呢?不要急,ctrl+f搜一下,还真搜到一个JS文件。

8.我们从sources中打开这个文件,搜/video/info看看,果然搜到一个getVideoInfo的函数(注意这个a的值是从headers中获取的)

9.接着往下看,就看到一个decryptString,那么我猜这个应该就是解密的函数了,再搜decryptString,找到函数

10.分析下这个函数:

t = 获取到的加密字符串,o = 取md5,e = 取md5之后从第八位开始取出16位字符串

所以通过计算得出当前视频的iv和key

11.然后我们用AES解密试试

12.成功解密,并获得m3u8地址,拼接host后直接打开,结果发现不能播放。

我们返回网页的抓包看看,原来m3u8地址后面还有个token参数,添加token后打开正常播放

13.值得注意的是/video/info获取的时候是需要headers中添加origin、platform等的,不然返回的是视频简介,并不是完整的视频.

 所以用老哥的M3U8下载器时,需要自定义协议头:Origin

二、网页端用户Token的获取:

爬的时候问题来了,每个用户只能免费看30个视频。那我们就多弄点用户:

感觉应该是token的缘故(一个token代表一个用户),那么就要了解下token是怎么产生的:

    1.F12开启"开发者模式"-"Network",刷新下网页,搜索token的值,其实这个pwatoken是第二次访问的时候才会有的参数,

    我们新建一个无痕窗口或小号窗口,开启F12.会发现一个新的接口mail_pwa_temp,建议全程用抓包软件抓着。

    可以看出token是由mail_pwa_temp返回的,看一下提交的参数,post提交pwa-ckv

    那么这个pwa-ckv是哪来的呢,其实当我们访问首页的时候会返回一个license,这个就是pwa-ckv

    PS:但是,当我们把post的内容设为pwa-ckv=1的时候,出现了一个有意思的现象(附:貌似post任何都会返回会员的token,包括空白)

      体现到浏览器是这样的:

    没错,这就是一个VIP等级为2(也就是所谓的尊荣VIP的账号),那么他的token是可以无限抓视频的噢。

    貌似爬取的速度不能太快,会频繁。

三、实现网页版的无限观看的两种方法【方法已失效,会强制登出,token已被禁,已无法使用这个token抓视频】:

第一种:FD的自动回复器,这个我就不讲了,就是把token替换成前面取到的尊荣Token

第二种:JS打印this,下面是步骤:

  1.打开到会员页面,点击账户后面的刷新,会提示刷新成功,我们搜索“刷新成功”,不难发现还是app.XXXXXX.js这个文件中调用的

  2.搜索“refresh_success”,可以找到getUserInfo的函数,

  3.给这个函数打个断点,再刷新下个人信息,然后我们把this打印出来

  4.console中输入temp1.$store.state.newToken = '尊荣token'

    这里提到的尊荣token,是第二步中抓到的token,字符串长度大约是145左右。

    即可在浏览器中更换为尊荣VIP,享受无限观看。(值得注意的是:一刷新网页就会失效...再次操作即可)

四、实现APP端的真正无限观看【方法已失效,会强制登出,token已被禁】:

其实道理很简单,就是把APP中返回的Token固定成前面得到的尊荣VIP的Token。

1.首先我们抓包下APP,果然也是和网页版一样用到了Token,不过调用的接口不太一样。

2.那么我们打开MT管理器或者NP管理器,尝试搜索方法名包含Token的内容。

3.发现2个相关的getToken函数,让我们点进去,修改为返回之前得到的Token

4.编译APP之后,打开查看效果。

5.果然就变成了尊荣VIP。

虽然显示有每日观看次数限制,但是实际上你会发现是无限观看

五、实现APP端的真正无限观看:

其实道理也是很简单,首次打开APP的时候是要注册的。那么我们把注册的参数修改为随机即可达到每次清空数据后打开APP都会是一个新的体验用户。

因为SMALI中重新添加函数什么的稍微有点复杂,所以我在这直接调用了APP的原有random的函数(PS:这个random是我用到的函数简写,大家可以尝试其他的随机函数)

下图是由NP管理器转JAVA的修改前后的代码区别:(思路就是this.d赋值随机字符)

这个方法相对于第四步来说稍微有点难度,但是也只是稍微有点而已。

我相信你们能通过抓包然后得到一些信息,然后再次搞定。

这里就不详细的解说了,防止和谐,有能力者可以试试,对我我这自学的半吊子来说不是很难,我相信你们也不会觉得难的。

PS:抓包也能发现/user/info接口返回的expiry、level、user_id等信息,通过MT管理器或NP管理器搜索方法名,发现全部在ResponseUserInfo类中:

    比如getLevel(const v0,0x2    1是普通/2是尊荣)、getExpiry(const v0,0x746a6480)等等

    修改后发现仅仅是本地显示的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201223A05RVK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券