网页抓取解密(网页版AES:1.的函数())
优采云 发布时间: 2021-12-04 12:01网页抓取解密(网页版AES:1.的函数())
一、网页版AES:
1.首先我们打开浏览器“咪咪咪”的网页。
2.F12 打开“开发者模式”-“网络”。(众所周知,这种视频一般是m3u8.)
3.点一个视频进去4.搜索“m3u8”,原来是m3u8流
5. 然后直接搜索这个m3u8的文件名,结果没有找到,那应该是加密了
6. 然后我们尝试搜索这个视频的ID,发现有3个相关的请求:“视频推荐”、“演员信息”、“当前视频信息”(PS:这个ID加了后来,之前截图是另一个)
7.上图得到的/video/info是哪里来的?不用着急,ctrl+f搜索,真的找到了一个js文件。
8. 我们从source打开这个文件,搜索/video/info,发现一个getVideoInfo函数(注意a的值是从headers中获取的)
9. 然后我低头看到一个decryptString,那我猜这应该是解密的函数,然后搜索decryptString找到函数
10.分析这个函数:
t=得到的加密串,o=取md5,e=取md5后第8位取出16位串
所以通过计算当前视频的iv和key
11. 然后我们尝试用AES解密
12. 解密成功,得到m3u8地址。拼接主机后,直接打开,却发现无法播放。
让我们回到网页来抓包。原来在m3u8地址后面有一个token参数。添加令牌后,打开即可正常播放。
13. 需要注意的是,获取/video/info的时候需要在headers中加上origin、platform等,否则返回的是视频介绍,不是完整的视频。
所以在使用我的M3U8下载器时,需要自定义协议头:Origin
二、 web端获取用户Token:
问题来了,在抓取的时候,每个用户只能免费观看30个视频。然后我们会得到更多的用户:
感觉应该是因为token(一个token代表一个用户),那我们就要明白token是怎么产生的:
1.F12打开“开发者模式”-“网络”,刷新网页,搜索token的值,其实这个pwatoken是一个参数,只有在第二次访问时才会出现。
我们新建一个隐身窗口或小窗口,打开F12.,你会发现一个新的界面mail_pwa_temp,建议使用抓包软件抓取整个过程。
可以看出是mail_pwa_temp返回的token,看一下提交的参数,post submit pwa-ckv
那么这个 pwa-ckv 是从哪里来的呢?事实上,当我们访问主页时,会返回一个许可证。这是 pwa-ckv
PS:但是,当我们将帖子的内容设置为pwa-ckv=1时,出现了一个有趣的现象(附:好像任何帖子都会返回会员的token,包括空格)
这反映在浏览器中:
没错,这是2级的VIP(也就是所谓的尊贵VIP账号),那么他的token可以无限期的抓拍视频。
看来爬行速度不能太快,会很频繁。
三、 两种实现网页版无限制观看的方法【方法已过期,将强制退出,令牌已被禁止,无法再使用此令牌拍摄视频】:
第一种:FD的自动回复,这个就不多说了,把token换成之前拿到的honor Token
第二种:JS打印这个,步骤如下:
1. 打开会员页面,点击账号后面的Refresh,会提示刷新成功,我们搜索“刷新成功”,不难发现文件中调用了app.XXXXXX.js
2.搜索“refresh_success”,可以找到getUserInfo的函数,
3. 给这个函数一个断点,刷新个人信息,然后我们把这个打印出来
4.在控制台输入temp1.$store.state.newToken ='尊荣token'
这里所说的honor token是第二步抓到的token,字符串长度145左右。
您可以在浏览器中更改为尊贵的VIP,享受无限观看。(值得注意的是:页面一刷新就失效了……再做一次)
四、在APP端实现真正的无限制观看【方法已过期,会强制退出,token已被禁止】:
其实原因很简单,就是将APP中返回的Token固定为之前获得的尊贵VIP的Token。
1. 首先我们抓了个app,用Token作为web版,但是调用界面不一样。
2. 然后我们打开MT管理器或者NP管理器,尝试搜索收录Token的方法名的内容。
3. 找到2个相关的getToken函数,让我们点进去修改,返回之前获取的Token
4.APP编译完成后,打开查看效果。
5.果然成了尊贵的VIP。
虽然显示每天的观看次数是有限制的,但实际上你会发现它是无限观看的
五、在APP端实现真正的无限观看:
其实原因很简单。您必须在第一次打开应用程序时注册。然后我们就可以将注册的参数修改为随机的,以达到每次清除数据后打开APP的新用户体验。
因为在SMALI中重新添加函数有点复杂,我这里直接调用了APP原来的随机函数(PS:这个随机是我用的函数的简写,你可以试试其他的随机函数)
下图是从NP管理器到JAVA修改前后的代码区别:(思路是给this.d分配随机字符)
这个方法比第四步要难一些,但也只是一点点而已。
相信你可以通过抓包得到一些信息,然后再搞定。
这里我就不详细解释了。防止和谐,有本事的人可以试试。对我这个自学半心半意的人来说并不难,相信你也不会觉得难。
PS:抓包还可以找到/user/info接口返回的expiry、level、user_id等信息。通过MT管理器或者NP管理器搜索方法名,发现都在ResponseUserInfo类中:
比如getLevel(const v0, 0x2 1为普通/2为荣誉), getExpiry (const v0, 0x746a6480)等
修改后发现只在本地显示。